Автоматическое изменение локализации эмулятора Android

StackOverflow https://stackoverflow.com/questions/2417427

  •  19-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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


Решение:
Благодаря информации 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 приложения "Custom locale".Просто отправьте ему intent с дополнительным параметром языка, как показано ниже:

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top