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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top