سؤال

بالنسبة إلى الاختبار الآلي (باستخدام Hudson) لدي برنامج نصي ينشئ مجموعة من المحاكيات للعديد من مجموعات من إصدار نظام التشغيل Android ودقة الشاشة وكثافة الشاشة واللغة.
هذا يعمل بشكل جيد، باستثناء جزء اللغة.

أحتاج إلى إيجاد طريقة لتغيير لغة نظام Android تلقائيا. إليك بعض الأساليب التي يمكنني التفكير فيها، حسب تفضيل:

  • استخراج / تحرير / إعادة تحديد صورة qemu مباشرة قبل بدء المحاكي
  • تشغيل نوع من System-Locale - تغيير APK على المحاكي بعد بدء التشغيل
  • تغيير إعدادات الإعدادات المحلية على نظام الملفات المحاكي بعد بدء التشغيل
  • تغيير إعدادات الإعدادات المحلية في بعض SQLite DB على المحاكي بعد بدء التشغيل
  • تشغيل تسلسل رئيسي (عبر واجهة Telnet's Emulator) التي من شأنها أن تفتح تطبيق الإعدادات وتغيير اللغة
  • يدويا بدء المحاكي لكل إصدار منصة، تغيير اللغة باليد في الإعدادات، مما يوفره وأرشفة الصور للحصول على نشر لاحقا

أي أفكار ما إذا كان يمكن القيام بذلك، إما عن طريق الأساليب المذكورة أعلاه أو غير ذلك؟

هل تعرف أين تستمر إعدادات الإعدادات المحلية في / اقرأ من قبل النظام؟


المحلول:
بفضل معلومات Dtmilano حول الخصائص ذات الصلة، وبعض التحقيقات الأخرى من جانبي، توصلت إلى حل أفضل وأبسط من جميع الأفكار أعلاه!

لقد قمت بتحديث إجابته أدناه مع التفاصيل.

هل كانت مفيدة؟

المحلول

شخصيا أعتقد أن أبسط طريقة هي بدء المحاكي، وربما مثيل نظيف إلا إذا كنت تقوم بتشغيل اختبارات التكامل التي تعتمد على التطبيقات الأخرى ثم قم بتغيير لغةها باستخدام ADB:

$ adb shell '
setprop persist.sys.language en;
setprop persist.sys.country GB;
stop;
sleep 5;
start'

أو أي لغة تريد ضبطها. للتحقق من أن التغيير كان ناجحا فقط استخدام

$ adb shell 'getprop persist.sys.language'

قد ترغب أيضا في تشغيل المحاكات على منافذ معرفة، تحقق إجابتي في هذا الموضوع.


لاحظ أنه يمكنك أيضا تعيين خصائص النظام مباشرة عند بدء المحاكي:

emulator -avd my_avd -prop persist.sys.language=en -prop persist.sys.country=GB

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

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

نصائح أخرى

الإجابة المقبولة لا تعمل بعد الآن. persist.sys.language و persist.sys.country ذهبت من خصائص المحاكي.

الحل الخاص بي هو استخدام تطبيق مثبتة مسبقا على تطبيق Android Emulator "المخصص Locale". ما عليك سوى إرسال نية مع معلمة لغة إضافية إلى ذلك على النحو التالي:

adb shell am broadcast -a com.android.intent.action.SET_LOCALE --es com.android.intent.extra.LOCALE EN

مزيد من المعلومات هنا - قم بإعداد Android Emulator لأتمتة اختبار UI.

تحديث: بناء على تعليق من Jonas Alves يعمل الأمر التالي على API 28+:

adb shell am broadcast -a com.android.intent.action.SET_LOCALE --es com.android.intent.extra.LOCALE "en_US" com.android.customlocale2
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top