2010-03-10 16 views
26

Para pruebas automatizadas (usando Hudson) tengo una secuencia de comandos que genera un conjunto de emuladores para muchas combinaciones de versión del sistema operativo Android, resolución de pantalla, densidad de pantalla e idioma.
Esto funciona bien, a excepción de la parte de idioma.Cambiar la configuración regional del emulador Android automáticamente

Necesito encontrar una manera de cambiar la configuración regional del sistema de Android automáticamente. 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 telnet del emulador) que abriría la aplicación de configuración y cambiar el locale
  • manualmente 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 la métodos anteriores o de lo contrario?

¿Sabe dónde el sistema conserva o lee la configuración regional?


Solución:
Gracias a dtmilano la información sobre las propiedades relevantes, y un poco de investigación adicional 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 debajo con los detalles.

+1

¿tiene algún tipo de publicación (blog, foro de correos etc) en los que describa configurar su prueba automatizada? Me encantaría hacer pruebas automáticas para mis aplicaciones y me encanta Hudson, pero hasta ahora nunca he encontrado una buena introducción a este tema. – Janusz

+0

Existe la posibilidad de que pueda escribirlo junto con algunas mejoras adicionales relacionadas con Hudson en las que estoy trabajando, pero probablemente no por varias semanas. Si lo hago, publicaré una actualización aquí. –

+0

Eso sería genial gracias – Janusz

Respuesta

54

Personalmente creo que la forma más sencilla es comenzar 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 para establecer para verificar 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 my answer in this thread.


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, 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 teniendo que hacer modificaciones a las imágenes del emulador.

Esta configuración regional persistirá para futuras ejecuciones del emulador, aunque, por supuesto, siempre puede cambiarlo de nuevo al inicio o durante el tiempo de ejecución.

+0

Esto es realmente interesante para mí, así que fui a probarlo, lo probé con un shell de ADB en un G1 y un HTC Hero, no puedo usar getprop y recuperar información. Pero quiero usar setprop pero cuando lo hago, ¿parece realmente cambiarse? –

+2

Estábamos hablando de emuladores, no estoy seguro de si esto podría funcionar en un dispositivo real. –

+1

Genial ... No sabía sobre esas propiedades o 'stop' /' start'. Funciona para mi. También funcionó en mi HTC Hero, o al menos 'stop' y' start' reinicié felizmente cosas (cuando se ejecuta como root). :) –

3

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 preinstalado en la aplicación "Configuración regional personalizada" del emulador de Android. 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í - prepare android emulator for UI test automation.

Cuestiones relacionadas