Pregunta

Para las pruebas automatizadas (usando Hudson) Tengo un script que genera un montón de emuladores para muchas combinaciones de versión de Android OS, resolución de pantalla, la densidad de la pantalla y el lenguaje.
Esto funciona bien, excepto por la parte del lenguaje.

Tengo que encontrar una manera de cambiar la configuración regional del sistema Android de forma automática. He aquí algunos enfoques que se me ocurre, por orden de preferencia:

  • Extracción / edición / volver a empaquetar una imagen de QEMU directamente antes de iniciar el emulador
  • Ejecución de algún tipo de sistema de configuración regional cambiante APK en el emulador después del inicio
  • Cambiar la configuración regional del sistema de archivos emulador después del inicio
  • Cambiar la configuración regional en algunos SQLite DB en el emulador después del inicio
  • La ejecución de una secuencia de teclas (a través de la interfaz del emulador telnet) que abriría la aplicación de configuración y cambiar la configuración regional
  • manualmente de iniciar el emulador para cada versión de la plataforma, cambiar la configuración regional a mano en la configuración, guardarlo y archivo de las imágenes para el despliegue posterior

¿Alguna idea de si esto se puede hacer, ya sea a través de los métodos anteriores o de otro tipo?

¿Sabe usted dónde se conservan las opciones de localización / leyendo de por el sistema?


Solución:
Gracias a dtmilano de información sobre las propiedades relevantes, y un poco de investigación adicional de mi parte, me dieron con una solución aún mejor y más simple que todas las ideas anteriores!

He actualizado su respuesta a continuación con los detalles.

¿Fue útil?

Solución

En lo personal creo que la forma más sencilla consiste en iniciar el emulador, probablemente, una instancia limpia menos que esté ejecutando pruebas de integración que depende de otras aplicaciones y luego cambiar la configuración regional usando adb:

$ adb shell '
setprop persist.sys.language en;
setprop persist.sys.country GB;
stop;
sleep 5;
start'

o lo que sea la configuración regional que desea establecer. Para comprobar que el cambio fue exitoso sólo tiene que utilizar

$ adb shell 'getprop persist.sys.language'

También es posible que desee ejecutar emuladores en los puertos sé, comprobar mi respuesta en este hilo .


Tenga en cuenta que también se puede establecer directamente las propiedades del sistema cuando se inicia el emulador

emulator -avd my_avd -prop persist.sys.language=en -prop persist.sys.country=GB

De esta manera, se puede crear un emulador simple y llano de cualquier tipo y luego ponerlo en marcha inmediatamente el uso de la configuración regional de su elección, sin primero tener que hacer ninguna modificación en las imágenes del emulador.

Este local se mantendrá para futuras ejecuciones del emulador, aunque por supuesto siempre se puede cambiar de nuevo al inicio o durante el tiempo de ejecución.

Otros consejos

respuesta aceptada ya no funciona. persist.sys.language y persist.sys.country se han ido de las propiedades del emulador.

Mi solución es utilizar preinstalado en emulador de Android aplicación "locale personalizado". Basta con enviar intención con parámetro de idioma adicional a ella como a continuación:

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

Más información aquí -. preparar emulador de Android para la automatización de pruebas de interfaz de usuario

ACTUALIZACIÓN: basado en el comentario de Jonas Alves los siguientes comando funciona sobre el sistema 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top