Изменение языкового стандарта эмулятора Android автоматически

Для автоматического тестирования (с использованием Hudson) у меня есть script, который генерирует кучу эмуляторов для многих комбинаций версии ОС Android, разрешения экрана, плотности экрана и языка.
Это отлично работает, за исключением языковой части.

Мне нужно найти способ автоматически изменить локаль системы Android. Вот некоторые подходы, которые я могу представить в порядке предпочтения:

  • Извлечение/редактирование/переупаковка изображения QEMU непосредственно перед запуском эмулятора
  • Запуск какого-то APK-адаптера, изменяющего систему, на эмуляторе после запуска
  • Изменение настроек языкового стандарта в файловой системе эмулятора после запуска
  • Изменение настроек языкового стандарта в некоторой SQLite DB на эмуляторе после запуска
  • Запуск последовательности клавиш (через интерфейс telnet эмулятора), который откроет приложение настроек и изменит локаль
  • Вручную запуск эмулятора для каждой версии платформы, изменение языкового стандарта вручную, сохранение и архивирование изображений для последующего развертывания

Любые идеи, можно ли это сделать, либо с помощью вышеуказанных методов, либо иначе?

Знаете ли вы, где языковые настройки сохраняются/читаются системой?


Решение:
Благодаря информации dtmilano о соответствующих свойствах и некоторым дополнительным исследованиям с моей стороны, я придумал решение еще лучше и проще, чем все вышеизложенные идеи!

Я обновил его ответ ниже с подробностями.

Ответ 1

Лично я считаю, что самый простой способ - запустить эмулятор, возможно, чистый экземпляр, если вы не используете интеграционные тесты, которые зависят от других приложений, а затем меняют язык с помощью 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

Таким образом, вы можете создать простой старый эмулятор любого типа, а затем запустить его немедленно, используя локаль по вашему выбору, без, сначала сделав какие-либо изменения в изображениях эмулятора.

Этот язык сохранится для будущих прогонов эмулятора, хотя, конечно, вы всегда можете изменить его снова при запуске или во время выполнения.

Ответ 2

Принятый ответ больше не работает. persist.sys.language и persist.sys.country исчезли из свойств эмулятора.

Мое решение состоит в том, чтобы использовать предустановленное приложение android-эмулятор "Custom locale". Просто отправьте намерение с дополнительным параметром языка, как показано ниже:

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

Дополнительная информация здесь подготовить эмулятор Android для автоматизации тестирования пользовательского интерфейса.