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