Intereting Posts
Привязка данных Android: невозможно разрешить символ Диалоговый фрагмент getView, возвращающий null на onDismiss Как сделать снимок экрана и поделиться им программно Использовать широковещательный приемник для улавливания входящего вызова, onReceive не срабатывает? В чем разница между GCMNetworkManager и JobScheduler в Android? ScrollView не прокручивает Прочитать контакты без разрешения? Android – Как мне разрешить показ только одного экземпляра MediaPlayer? При выходе из системы очистите стек истории событий, не позволяя кнопке «Назад» открывать только активированные активации. Как ссылаться на файл, хранящийся во внутреннем хранилище, из WebView? Андроидные фрагменты и их влияние на производительность SpeechToText и запуск намерения ACTION_CHECK_TTS_DATA Есть ли способ проверить, определена ли переменная в Java? Две панели действий (снизу и вверх) одновременно? Поддерживает ли Android виджет, такой как iPhone UIPickerView

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

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

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

  • Извлечение / редактирование / переупаковка изображения QEMU непосредственно перед запуском эмулятора
  • Запуск какой-то APK-адаптера, изменяющего систему, на эмуляторе после запуска
  • Изменение настроек языкового стандарта в файловой системе эмулятора после запуска
  • Изменение настроек языкового стандарта в некоторых SQLite DB на эмуляторе после запуска
  • Выполнение последовательности клавиш (через интерфейс 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». Просто отправьте намерение с дополнительным параметром языка, как показано ниже:

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

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