Изменение языка эмулятора Android автоматически - PullRequest
27 голосов
/ 10 марта 2010

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

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

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

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

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


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

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

Ответы [ 2 ]

53 голосов
/ 10 марта 2010

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

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

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

7 голосов
/ 14 января 2017

Принятый ответ больше не работает. 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 для автоматизации тестирования пользовательского интерфейса.

ОБНОВЛЕНИЕ: на основе комментария Джонаса Алвеса следующая команда работает над API 28 +:

adb shell am broadcast -a com.android.intent.action.SET_LOCALE --es com.android.intent.extra.LOCALE "en_US" com.android.customlocale2
...