Alterar a localidade emulador Android automaticamente
-
19-09-2019 - |
Pergunta
Para o teste automatizado (usando Hudson) Eu tenho um script que gera um monte de emuladores para muitas combinações de versão do sistema operacional Android, resolução de tela, a densidade da tela e da linguagem.
Esta multa funciona, exceto para a parte de língua.
Eu preciso encontrar uma maneira de mudar a região do sistema Android automaticamente. Aqui estão algumas abordagens que posso pensar, por ordem de preferência:
- Extraindo / edição / reembalagem uma imagem QEMU diretamente antes de iniciar o emulador
- Running algum tipo de sistema de mudança de localidade APK no emulador após a inicialização
- Alterar as configurações locais no sistema de arquivos emulador após a inicialização
- Alterar as configurações de localidade em alguns SQLite DB no emulador após a inicialização
- Running uma sequência de teclas (via interface telnet do emulador), que iria abrir o aplicativo configurações e alterar a localidade
- manualmente de iniciar o emulador para cada versão de plataforma, alterar a localidade a mão nas configurações, salvando-o e arquivar as imagens para implantação posterior
Todas as idéias se isso pode ser feito, quer através dos métodos acima ou de outra forma?
Você sabe onde configurações locais são persistentes / lidos pelo sistema?
Solução:
Graças a informações de dtmilano sobre as propriedades relevantes, e alguns mais investigação da minha parte, eu vim com uma solução ainda melhor e mais simples do que todas as idéias acima!
Eu atualizei a resposta abaixo com os detalhes.
Solução
Pessoalmente acho que a maneira mais simples é começar o emulador, provavelmente um exemplo limpa a menos que você estiver executando testes de integração que depende de outras aplicações e, em seguida, mudar de localidade usando adb:
$ adb shell '
setprop persist.sys.language en;
setprop persist.sys.country GB;
stop;
sleep 5;
start'
ou qualquer local que você deseja definir. Para verificar se a mudança foi bem sucedida apenas uso
$ adb shell 'getprop persist.sys.language'
Você também pode querer executar emuladores em portas sabe, verificação minha resposta neste segmento .
Note que você também pode definir as propriedades do sistema diretamente quando se inicia o emulador :
emulator -avd my_avd -prop persist.sys.language=en -prop persist.sys.country=GB
Desta forma, você pode criar uma velha emulador planície de qualquer tipo, em seguida, iniciá-lo imediatamente de usar o idioma de sua escolha, sem primeiro ter que fazer quaisquer modificações às imagens do emulador.
Este local irá persistir para futuras execuções do emulador, embora é claro que você pode sempre alterá-lo novamente na inicialização ou durante o tempo de execução.
Outras dicas
aceitado resposta não funciona mais. persist.sys.language
e persist.sys.country
sumiram das propriedades do emulador.
A minha solução é usar pré-instalado no emulador android "locale personalizado" aplicação. Basta enviar intenções com parâmetro de idioma extra para ele como abaixo:
adb shell am broadcast -a com.android.intent.action.SET_LOCALE --es com.android.intent.extra.LOCALE EN
Mais informação aqui -. preparar emulador Android para automação de teste UI
UPDATE: com base no comentário de Jonas Alves as seguintes obras de comando em API 28 +:
adb shell am broadcast -a com.android.intent.action.SET_LOCALE --es com.android.intent.extra.LOCALE "en_US" com.android.customlocale2