صندوق المؤلف


ناقش مشروعك

من نحن

نحن شريك Microsoft Gold مع وجودها في جميع أنحاء الولايات المتحدة والهند. نحن مزود خدمات تقنية معلومات ديناميكي ومهني يخدم المؤسسات والشركات الناشئة ، ويساعدها على مواجهة تحديات الاقتصاد العالمي. نحن نقدم خدمات في مجال استشارات إدارة علاقات العملاء وتنفيذها ، وتطوير التطبيقات ، وتطوير تطبيقات الهاتف المحمول ، وتطوير الويب ، والتطوير الخارجي.

انشر التطبيقات على متجر Google Play

أنشئ تطبيق Android وانشره على متجر Google Play

By سوبود درموان / 18 فبراير 2022

13 أكتوبر 2022
أنشئ تطبيق Android وانشره على متجر Google Play

متجر Google Play ، منصة حيث يمكنك الحصول على العديد من التطبيقات المفيدة لجميع متطلباتك الفريدة والمختلفة. لا يمكن لأحد أن يشكك في هيمنة وشعبية حساب متجر Google Play في مجال تطبيقات وبرامج الهاتف المحمول. ولكن ، تمامًا مثل أي متجر تطبيقات أو نظام أساسي آخر ، تأتي هذه المنصة أيضًا بمجموعتها الخاصة من القواعد والإجراءات واللوائح ، وتحتاج إلى فهم كيفية عملها من أجل تجنب المشكلات أو المشكلات المستقبلية.

يحتاج Android إلى توقيع جميع التطبيقات رقميًا بشهادة قبل تثبيتها. لذلك ، من أجل توزيع تطبيق Android الخاص بك من خلال متجر Google Play ، يجب توقيعه بمفتاح إصدار يحتاج بعد ذلك إلى استخدامه لجميع التحديثات القادمة.

بالنسبة للمبتدئين والمبتدئين ، قد يبدو نشر تطبيق على Google Play وكأنه عملية مخيفة. نظرًا لأن النشر لأول مرة يعد أمرًا صعبًا ومثيرًا أيضًا.

ملاحظات: لا تؤجل بعض المهام المهمة حتى تاريخ الإصدار أو الإصدار التجريبي ، فإن الانتهاء منها مقدمًا سيوفر لك الكثير من الوقت. لكن ، لا داعي للقلق ، يمكننا المساعدة.

هذه المقالة عبارة عن دليل تفصيلي حول كيفية إنشاء تطبيق Android ونشره بنجاح على متجر Google Play.

لذلك دعونا نبدأ!

1) إضافة رمز المشغل

عند إنشاء برنامج Flutter جديد ، يكون لديه رمز تشغيل افتراضي. لتخصيص هذا الرمز ، قد ترغب في سحب ملف Flutter_launcher_icons الحزمة. 

بدلاً من ذلك ، يمكنك القيام بذلك بنفسك باتباع الخطوات التالية: 

  • راجع الإرشادات الخاصة بعناصر تصميم الرموز المهمة. 
  • في دليل [مشروع] / android / app / src / main / res / ، ضع رموز الملفات في مجلدات مسماة باستخدام سمات التكوين. تشير مجلدات mipmap الافتراضية إلى سياسة التسمية الصحيحة. 
  • في AndroidManifest.xml ، قم بتحديث رمز علامة تطبيق android في الرموز من الخطوة الأخيرة (على سبيل المثال ، <تطبيق android: أيقونة = "@ mipmap / ic_launcher" ...). 
  • للتحقق من تغيير الرمز ، استخدم التطبيق الخاص بك وتحقق من رمز التطبيق في Launcher. 

2) تمكين الميزات الرئيسية

إذا كان تطبيقك يستخدم طرق عرض النظام الأساسي ، فقد ترغب في تمكين مكونات الخصائص باتباع الخطوات الموضحة في دليل بدء تشغيل Android. 

فمثلا: 

1- أضف Android Essentials إلى /android/app/build.gradle

rely {// ... implementation 'com.google.android.material: material: <version>' // ...} 

للحصول على أحدث إصدار ، قم بزيارة موقع Google Maven. 

2- اضبط السمة على /android/app/src/main/res/values/styles.xml

<style name = "LaunchTheme" parent = "Theme.AppCompat"> + <style name = "LaunchTheme" parent = "Theme.MaterialComponents.NoActionBar">

أيضا ، اقرأ: أساسيات Flutter: لماذا نستخدم Flutter لتطوير تطبيقات الأجهزة المحمولة

3) توقيع الطلبات

للنشر في متجر Google Play ، تحتاج إلى تزويد تطبيقك بتوقيع رقمي. استخدم الإرشادات التالية للتسجيل في التطبيق الخاص بك. 

يحتوي Android على مفتاحين للتوقيع: التنشيط والتحميل. يقوم المستخدمون بتنزيل ملف apk. موقّع بـ "مفتاح الإصدار". يُستخدم "مفتاح التحميل" للتحقق من أصالة ملف .aab / .apk الذي تم تحميله بواسطة المطورين في متجر Google Play Store وإعادة توقيعه باستخدام مفتاح الإصدار مرة واحدة في متجر Google Play. 

يوصى بشدة باستخدام التوقيع التلقائي المستند إلى السحابة على مفتاح التغذية. لمزيد من المعلومات ، راجع الوثائق الرسمية لمتجر Google Play. 

إنشاء مخزن مفاتيح القصة 

إذا كان لديك مخزن مفاتيح موجود ، فانتقل إلى الخطوة التالية. إذا لم يكن كذلك ، فقم بإنشاء واحد آخر: 

اتبع الخطوات الرئيسية لإنتاج Android Studio.

الإجراءات التالية في سطر الأوامر: 

لنظام التشغيل Mac / Linux ، استخدم الأمر التالي: 

keytool -genkey -v -keystore ~ / upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload

بالنسبة لنظام التشغيل Windows ، استخدم الأمر التالي: 

keytool -genkey -v -keystore c: \ Users \ USER_NAME \ upload-keystore.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload 

يحفظ هذا الأمر ملف upload-keystore.jks في دليلك الرئيسي. إذا كنت تريد حفظه في مكان آخر ، فقم بتغيير الوسيطة التي تنقلها إلى معلمة Keystore. ومع ذلك ، حافظ على سرية ملف Keystore ؛ لا تنظر إليه من سيطرة مصدر عام! 

عرض Keystore من التطبيق

قم بإنشاء ملف باسم [تنفيذ المشاريع ] /android/key.properties يحتوي على مرجع لمتجر المفاتيح الخاص بك: 

storePassword = <password from previous step> keyPassword = <password from previous step> keyAlias = uploadstoreFile = <store key file location, such as / Users / <username> /upload-keystore.jks> 

تحضير القليل من تسجيل الدخول

هيئ Gradle لاستخدام مفتاح التحميل عند إنشاء تطبيقك في وضع الإصدار عن طريق تحرير [تنفيذ المشاريع ] /android/app/build.gradle ملف. 

أضف تفاصيل Keystore من ملف التخطيط الخاص بك قبل كتلة android: 

def keystoreProperties = New properties () 
  
def keystorePropertiesFile = rootProject.file ('key.properties') 
  
   if (keystorePropertiesFile.exists ()) {keystoreProperties.load (new FileInputStream (keystorePropertiesFile)) 
  
} 
  
   android {...} 
  
Upload the key.properties file to the keystoreProperties item. 
  
Discover the buildTypes block: 
  
  buildTypes 
  
{free 
  
{ 
  
     // TO DO: Add your signature construction signature setting. 
  
        // Signing with debugging right now, 
  
         // so `flutter run --release` is active. 
  
          
signingConfig signingConfigs.debug}} 
  
And replace it with the following signature details: 
  
  signingConfigs 
  
{free 
  
{ 

           keyAlias keystoreProperties ['keyAlias'] 
  
        KeyPassword keystoreProperties ['keyPassword'] 
  
storeFile keystoreProperties ['storeFile']? file (keystoreProperties ['storeFile']): null 
  
          
store-keystorePasswordstoreProperties ['storePassword']}} 
  
   buildTypes 
  
{ 
 
       Free 
  
{ 
  
          
signingConfig signingConfigs.release}} 

أيضا ، اقرأ: كيفية تنفيذ إعلانات Admob على تطبيقات Flutter

4) تقليل الكود الخاص بك بمقدار R8

R8 هي ميزة جديدة للرمز من Google ويتم تمكينها تلقائيًا عند إنشاء إصدار APK أو AAB. لتعطيل R8 ، قم بتمرير علامة - no-shrink لمبنى apk أو حزمة تطبيقات flutter build.

5) تحديث بيان التطبيق

تحديث ملف البيان الافتراضي للتطبيق ، AndroidManifest.xml على، عثر عليه في [تنفيذ المشاريع ] / الروبوت / التطبيق / إس آر سي / main ، وتأكد من صحة القيم ، خاصة ما يلي: 

استمارتنا

تحرير تسمية android: في علامة التطبيق لعرض الاسم الأخير للتطبيق. 

تصريح الاستخدام 

أضف android.permission.INTERNET إذن إذا كان رمز التطبيق الخاص بك يحتاج إلى الوصول إلى الإنترنت. لا يتضمن القالب القياسي هذه العلامة ولكنه يسمح بالوصول إلى الإنترنت أثناء التطوير لتمكين الاتصال بين أدوات Flutter ونظام التشغيل. 

6) تحديث التخطيط

قم بتحديث ملف إنشاء Gradle الافتراضي ، بناء، متوفر في [تنفيذ المشاريع ] / الروبوت التطبيق وتحقق من صحة القيم ، لا سيما القيم التالية في التكوين الافتراضي كتلة:

رقم الاستمارة

حدد التطبيق الأخير المنفصل (معرف التطبيق).

الإصدار & اسم الإصدار

حدد رقم الإصدار داخل التطبيق ، بالإضافة إلى وحدة الأحرف التي تشير إلى رقم الإصدار. يمكنك القيام بذلك عن طريق تعيين بنية الترجمة في ملف pubspec.yaml ملف. انظر دليل الترجمة لنصوص الترجمة.

minSdkVersion ، و compilesdkVersion ، و targetSdkVersion

حدد الحد الأدنى لمستوى API ، ومستوى API الذي تم فيه دمج التطبيق ، ومستوى API الأقصى الذي تم تصميم التطبيق للعمل به. راجع قسم مستوى واجهة برمجة التطبيقات في نص البرنامج النصي للحصول على معلوماتك.

buildToolsVersion

حدد إصدار Android SDK Build Tools الذي يستخدمه تطبيقك. بدلاً من ذلك ، يمكنك استخدام Android Gradle Plugin في Android Studio ، والذي سيقوم تلقائيًا باستيراد الحد الأدنى من أدوات البناء اللازمة لتطبيقك دون الحاجة إلى هذا التخطيط.

أيضا ، اقرأ: أفضل أطر تطوير تطبيقات الويب لعام 2022: احصل على أكبر قدر من قابلية التوسع بتكاليف أقل

7) إنشاء إصدار التطبيق

لديك تنسيقان محتملان للإصدار عند النشر في متجر Google Play.

1- تطبيق مجمّع (اختياري)

2- APK

  1. حزمة APP - من سطر الأوامر:

أدخل القرص المضغوط [مشروع]

1- إطلاق بناء رفرفة com.appbundle

2- (تشغيل Flutter الذي يقوم تلقائيًا بإنشاء بنية الإخراج.)

APK- من سطر الأوامر:

  1. أدخل القرص المضغوط [مشروع]
  2. إطلاق بناء الرفرفة apk - تقسيم لكل أبي

(أمر Flutter Construction هو الإعداد الافتراضي - Release.)

8) النشر في متجر Google Play- للحصول على إرشادات مفصلة حول كيفية نشر التطبيق الخاص بك في متجر Google Play ، راجع وثائق تشغيل Google Play.

وفي الختام

نأمل أن تكون الإرشادات والخطوات المذكورة أعلاه مفيدة في توجيهك خلال الإجراء الخاص بكيفية نشر تطبيق Android على متجر Google Play. لكن يجب أن تلاحظ أن الرحلة لا تنتهي عند النشر. بعد تحميل التطبيق على متجر التطبيقات ، تحتاج إلى استراتيجية تسويقية نشطة لجذب العملاء. أيضًا ، للحصول على أقصى استفادة من تطبيقك الجديد ، يتعين عليك الترويج له للتأكد من أن الناس يعرفون ذلك واكتشافه كتطبيق جذاب بما يكفي لتنزيله.

[sc name = "Mobile App Development"] [add_newsletter] [add_related_page_diff_contents blog_cat = "mobile-development"]

متجر Google Play ، منصة حيث يمكنك الحصول على العديد من التطبيقات المفيدة لجميع متطلباتك الفريدة والمختلفة. لا يمكن لأحد أن يشكك في هيمنة وشعبية حساب متجر Google Play في مجال تطبيقات وبرامج الهاتف المحمول. ولكن ، تمامًا مثل أي متجر تطبيقات أو نظام أساسي آخر ، تأتي هذه المنصة أيضًا بمجموعتها الخاصة من القواعد والإجراءات واللوائح ، وتحتاج إلى فهم كيفية عملها من أجل تجنب المشكلات أو المشكلات المستقبلية.

يحتاج Android إلى توقيع جميع التطبيقات رقميًا بشهادة قبل تثبيتها. لذلك ، من أجل توزيع تطبيق Android الخاص بك من خلال متجر Google Play ، يجب توقيعه بمفتاح إصدار يحتاج بعد ذلك إلى استخدامه لجميع التحديثات القادمة.

بالنسبة للمبتدئين والمبتدئين ، قد يبدو نشر تطبيق على Google Play وكأنه عملية مخيفة. نظرًا لأن النشر لأول مرة يعد أمرًا صعبًا ومثيرًا أيضًا.

ملاحظات: لا تؤجل بعض المهام المهمة حتى تاريخ الإصدار أو الإصدار التجريبي ، فإن الانتهاء منها مقدمًا سيوفر لك الكثير من الوقت. لكن ، لا داعي للقلق ، يمكننا المساعدة.

هذه المقالة عبارة عن دليل تفصيلي حول كيفية إنشاء تطبيق Android ونشره بنجاح على متجر Google Play.

لذلك دعونا نبدأ!

1) إضافة رمز المشغل

عند إنشاء برنامج Flutter جديد ، يكون لديه رمز تشغيل افتراضي. لتخصيص هذا الرمز ، قد ترغب في سحب ملف Flutter_launcher_icons الحزمة. 

بدلاً من ذلك ، يمكنك القيام بذلك بنفسك باتباع الخطوات التالية: 

  • راجع الإرشادات الخاصة بعناصر تصميم الرموز المهمة. 
  • في دليل [مشروع] / android / app / src / main / res / ، ضع رموز الملفات في مجلدات مسماة باستخدام سمات التكوين. تشير مجلدات mipmap الافتراضية إلى سياسة التسمية الصحيحة. 
  • في AndroidManifest.xml ، قم بتحديث رمز علامة تطبيق android في الرموز من الخطوة الأخيرة (على سبيل المثال ، <تطبيق android: أيقونة = "@ mipmap / ic_launcher" ...). 
  • للتحقق من تغيير الرمز ، استخدم التطبيق الخاص بك وتحقق من رمز التطبيق في Launcher. 

2) تمكين الميزات الرئيسية

إذا كان تطبيقك يستخدم طرق عرض النظام الأساسي ، فقد ترغب في تمكين مكونات الخصائص باتباع الخطوات الموضحة في دليل بدء تشغيل Android. 

فمثلا: 

1- أضف Android Essentials إلى /android/app/build.gradle

rely {// ... implementation 'com.google.android.material: material: <version>' // ...} 

للحصول على أحدث إصدار ، قم بزيارة موقع Google Maven. 

2- اضبط السمة على /android/app/src/main/res/values/styles.xml

<style name = "LaunchTheme" parent = "Theme.AppCompat"> + <style name = "LaunchTheme" parent = "Theme.MaterialComponents.NoActionBar">

أيضا ، اقرأ: أساسيات Flutter: لماذا نستخدم Flutter لتطوير تطبيقات الأجهزة المحمولة

3) توقيع الطلبات

للنشر في متجر Google Play ، تحتاج إلى تزويد تطبيقك بتوقيع رقمي. استخدم الإرشادات التالية للتسجيل في التطبيق الخاص بك. 

يحتوي Android على مفتاحين للتوقيع: التنشيط والتحميل. يقوم المستخدمون بتنزيل ملف apk. موقّع بـ "مفتاح الإصدار". يُستخدم "مفتاح التحميل" للتحقق من أصالة ملف .aab / .apk الذي تم تحميله بواسطة المطورين في متجر Google Play Store وإعادة توقيعه باستخدام مفتاح الإصدار مرة واحدة في متجر Google Play. 

يوصى بشدة باستخدام التوقيع التلقائي المستند إلى السحابة على مفتاح التغذية. لمزيد من المعلومات ، راجع الوثائق الرسمية لمتجر Google Play. 

إنشاء مخزن مفاتيح القصة 

إذا كان لديك مخزن مفاتيح موجود ، فانتقل إلى الخطوة التالية. إذا لم يكن كذلك ، فقم بإنشاء واحد آخر: 

اتبع الخطوات الرئيسية لإنتاج Android Studio.

الإجراءات التالية في سطر الأوامر: 

لنظام التشغيل Mac / Linux ، استخدم الأمر التالي: 

keytool -genkey -v -keystore ~ / upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload

بالنسبة لنظام التشغيل Windows ، استخدم الأمر التالي: 

keytool -genkey -v -keystore c: \ Users \ USER_NAME \ upload-keystore.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload 

يحفظ هذا الأمر ملف upload-keystore.jks في دليلك الرئيسي. إذا كنت تريد حفظه في مكان آخر ، فقم بتغيير الوسيطة التي تنقلها إلى معلمة Keystore. ومع ذلك ، حافظ على سرية ملف Keystore ؛ لا تنظر إليه من سيطرة مصدر عام! 

عرض Keystore من التطبيق

قم بإنشاء ملف باسم [تنفيذ المشاريع ] /android/key.properties يحتوي على مرجع لمتجر المفاتيح الخاص بك: 

storePassword = <password from previous step> keyPassword = <password from previous step> keyAlias = uploadstoreFile = <store key file location, such as / Users / <username> /upload-keystore.jks> 

تحضير القليل من تسجيل الدخول

هيئ Gradle لاستخدام مفتاح التحميل عند إنشاء تطبيقك في وضع الإصدار عن طريق تحرير [تنفيذ المشاريع ] /android/app/build.gradle ملف. 

أضف تفاصيل Keystore من ملف التخطيط الخاص بك قبل كتلة android: 

def keystoreProperties = New properties () 
  
def keystorePropertiesFile = rootProject.file ('key.properties') 
  
   if (keystorePropertiesFile.exists ()) {keystoreProperties.load (new FileInputStream (keystorePropertiesFile)) 
  
} 
  
   android {...} 
  
Upload the key.properties file to the keystoreProperties item. 
  
Discover the buildTypes block: 
  
  buildTypes 
  
{free 
  
{ 
  
     // TO DO: Add your signature construction signature setting. 
  
        // Signing with debugging right now, 
  
         // so `flutter run --release` is active. 
  
          
signingConfig signingConfigs.debug}} 
  
And replace it with the following signature details: 
  
  signingConfigs 
  
{free 
  
{ 

           keyAlias keystoreProperties ['keyAlias'] 
  
        KeyPassword keystoreProperties ['keyPassword'] 
  
storeFile keystoreProperties ['storeFile']? file (keystoreProperties ['storeFile']): null 
  
          
store-keystorePasswordstoreProperties ['storePassword']}} 
  
   buildTypes 
  
{ 
 
       Free 
  
{ 
  
          
signingConfig signingConfigs.release}} 

أيضا ، اقرأ: كيفية تنفيذ إعلانات Admob على تطبيقات Flutter

4) تقليل الكود الخاص بك بمقدار R8

R8 هي ميزة جديدة للرمز من Google ويتم تمكينها تلقائيًا عند إنشاء إصدار APK أو AAB. لتعطيل R8 ، قم بتمرير علامة – no-shrink لمبنى apk أو حزمة تطبيقات flutter build.

5) تحديث بيان التطبيق

تحديث ملف البيان الافتراضي للتطبيق ، AndroidManifest.xml على، عثر عليه في [تنفيذ المشاريع ] / الروبوت / التطبيق / إس آر سي / main ، وتأكد من صحة القيم ، خاصة ما يلي: 

استمارتنا

تحرير تسمية android: في علامة التطبيق لعرض الاسم الأخير للتطبيق. 

تصريح الاستخدام 

أضف android.permission.INTERNET إذن إذا كان رمز التطبيق الخاص بك يحتاج إلى الوصول إلى الإنترنت. لا يتضمن القالب القياسي هذه العلامة ولكنه يسمح بالوصول إلى الإنترنت أثناء التطوير لتمكين الاتصال بين أدوات Flutter ونظام التشغيل. 

6) تحديث التخطيط

قم بتحديث ملف إنشاء Gradle الافتراضي ، بناء، متوفر في [تنفيذ المشاريع ] / الروبوت التطبيق وتحقق من صحة القيم ، لا سيما القيم التالية في التكوين الافتراضي كتلة:

رقم الاستمارة

حدد التطبيق الأخير المنفصل (معرف التطبيق).

الإصدار & اسم الإصدار

حدد رقم الإصدار داخل التطبيق ، بالإضافة إلى وحدة الأحرف التي تشير إلى رقم الإصدار. يمكنك القيام بذلك عن طريق تعيين بنية الترجمة في ملف pubspec.yaml ملف. انظر دليل الترجمة لنصوص الترجمة.

minSdkVersion ، و compilesdkVersion ، و targetSdkVersion

حدد الحد الأدنى لمستوى API ، ومستوى API الذي تم فيه دمج التطبيق ، ومستوى API الأقصى الذي تم تصميم التطبيق للعمل به. راجع قسم مستوى واجهة برمجة التطبيقات في نص البرنامج النصي للحصول على معلوماتك.

buildToolsVersion

حدد إصدار Android SDK Build Tools الذي يستخدمه تطبيقك. بدلاً من ذلك ، يمكنك استخدام Android Gradle Plugin في Android Studio ، والذي سيقوم تلقائيًا باستيراد الحد الأدنى من أدوات البناء اللازمة لتطبيقك دون الحاجة إلى هذا التخطيط.

أيضا ، اقرأ: أفضل أطر تطوير تطبيقات الويب لعام 2022: احصل على أكبر قدر من قابلية التوسع بتكاليف أقل

7) إنشاء إصدار التطبيق

لديك تنسيقان محتملان للإصدار عند النشر في متجر Google Play.

1- تطبيق مجمّع (اختياري)

2- APK

  1. حزمة APP - من سطر الأوامر:

أدخل القرص المضغوط [مشروع]

1- إطلاق بناء رفرفة com.appbundle

2- (تشغيل Flutter الذي يقوم تلقائيًا بإنشاء بنية الإخراج.)

APK- من سطر الأوامر:

  1. أدخل القرص المضغوط [مشروع]
  2. إطلاق بناء الرفرفة APK -سبليت لكل أبي

(أمر Flutter Construction هو الإعداد الافتراضي إلى الإصدار.)

8) النشر في متجر Google Play- للحصول على إرشادات مفصلة حول كيفية نشر التطبيق الخاص بك في متجر Google Play ، راجع وثائق تشغيل Google Play.

وفي الختام

نأمل أن تكون الإرشادات والخطوات المذكورة أعلاه مفيدة في توجيهك خلال الإجراء الخاص بكيفية نشر تطبيق Android على متجر Google Play. لكن يجب أن تلاحظ أن الرحلة لا تنتهي عند النشر. بعد تحميل التطبيق على متجر التطبيقات ، تحتاج إلى استراتيجية تسويقية نشطة لجذب العملاء. أيضًا ، للحصول على أقصى استفادة من تطبيقك الجديد ، يتعين عليك الترويج له للتأكد من أن الناس يعرفون ذلك واكتشافه كتطبيق جذاب بما يكفي لتنزيله.

خدمات تطوير تطبيقات الجوال

هل تريد الاستفادة من تكنولوجيا الهاتف المحمول لعملك؟ Cynoteck هو مزود خدمات تطوير تطبيقات الجوال وقفة واحدة. نحن نقدم خدمات تطوير تطبيقات iOS و Android حتى تتمكن من الوصول إلى جمهورك المستهدف على أي جهاز.



ضيف
0 التعليقات
التقيمات المضمنة
عرض جميع التعليقات
0
أحب أفكارك ، يرجى التعليق.x
()
x