separador - Cambiar la configuración regional del emulador de Android automáticamente
multilenguaje android studio (2)
Para las pruebas automatizadas (usando Hudson) tengo un script que genera un montón de emuladores para muchas combinaciones de versión del sistema operativo Android, resolución de pantalla, densidad de pantalla e idioma.
Esto funciona bien, excepto por la parte del lenguaje.
Necesito encontrar una manera de cambiar la configuración regional del sistema Android automáticamente. Aquí hay algunos enfoques que puedo pensar, en orden de preferencia:
- Extraer / editar / reenvasar una imagen QEMU directamente antes de iniciar el emulador
- Ejecutar algún tipo de APK de cambio de configuración del sistema en el emulador después del inicio
- Cambio de la configuración regional en el sistema de archivos del emulador después del inicio
- Cambio de la configuración regional en algunas bases de datos SQLite en el emulador después del inicio
- Ejecutar una secuencia de teclas (a través de la interfaz de telnet del emulador) que abriría la aplicación de configuración y cambiaría la configuración regional
- Iniciar manualmente el emulador para cada versión de la plataforma, cambiar la configuración regional a mano en la configuración, guardarla y archivar las imágenes para su posterior despliegue
¿Alguna idea de si esto se puede hacer, ya sea a través de los métodos anteriores o de otra manera?
¿Sabe dónde el sistema conserva / lee la configuración regional?
Solución:
Gracias a la información de dtmilano sobre las propiedades relevantes, y algunas investigaciones adicionales de mi parte, se me ocurrió 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.
La respuesta aceptada ya no funciona. persist.sys.language
y persist.sys.country
han desaparecido de las propiedades del emulador.
Mi solución es usar la aplicación preinstalada en el emulador de Android "Localidad personalizada". Simplemente envíe la intención con un parámetro de idioma adicional como se muestra 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 el emulador de Android para la automatización de la prueba de UI.
ACTUALIZACIÓN: según el comentario de Jonas Alves, el siguiente comando funciona en API 28+:
adb shell am broadcast -a com.android.intent.action.SET_LOCALE --es com.android.intent.extra.LOCALE "en_US" com.android.customlocale2
Personalmente, creo que la forma más sencilla es iniciar el emulador, probablemente una instancia limpia a menos que esté ejecutando pruebas de integración que dependen de otras aplicaciones y luego cambie la configuración regional utilizando adb:
$ adb shell ''
setprop persist.sys.language en;
setprop persist.sys.country GB;
stop;
sleep 5;
start''
o cualquier configuración regional que desee establecer. Para verificar que su cambio fue exitoso solo use
$ adb shell ''getprop persist.sys.language''
También puede querer ejecutar emuladores en puertos conocidos, verifique mi respuesta en este hilo .
Tenga en cuenta que también puede establecer las propiedades del sistema directamente al iniciar el emulador :
emulator -avd my_avd -prop persist.sys.language=en -prop persist.sys.country=GB
De esta manera, puede crear un emulador simple anterior de cualquier tipo y luego iniciarlo inmediatamente usando la configuración regional que elija, sin tener que realizar modificaciones en las imágenes del emulador.
Esta configuración regional persistirá para futuras ejecuciones del emulador, aunque, por supuesto, siempre puede cambiarla de nuevo al inicio o durante el tiempo de ejecución.