2010-03-10 3 views
26

Pour les tests automatisés (en utilisant Hudson), j'ai un script qui génère un tas d'émulateurs pour de nombreuses combinaisons de versions d'OS Android, résolution d'écran, densité d'écran et langue.
Cela fonctionne très bien, sauf pour la partie langue.Modification automatique des paramètres régionaux de l'émulateur Android

Je dois trouver un moyen de changer les paramètres régionaux du système Android automatiquement. Voici quelques approches que je peux penser, par ordre de préférence:

  • Extracting/édition/remballage une image QEMU directement avant de lancer l'émulateur
  • Courir une sorte de système locale changeant APK sur l'émulateur après le démarrage
  • Modification des paramètres régionaux sur le système de fichiers de l'émulateur après le démarrage
  • Modification des paramètres régionaux dans certains SQLite DB sur l'émulateur après le démarrage
  • Exécution d'une séquence de touches (via l'interface telnet de l'émulateur) qui ouvrirait l'application des paramètres et changer la locale
  • manuellement à partir de l'émulateur pour chaque version de la plate-forme, en changeant les paramètres régionaux manuellement dans les paramètres, l'enregistrer et d'archiver les images pour un déploiement ultérieur

Toute idée si cela peut se faire, soit par le ci-dessus méthodes ou autrement?

Savez-vous où les paramètres régionaux sont conservés ou lus par le système?


Solution:
Merci à dtmilano est d'info sur les propriétés pertinentes, et une enquête plus poussée de ma part, je suis venu avec une solution encore mieux et plus simple que toutes les idées ci-dessus!

J'ai mis à jour sa réponse ci-dessous avec les détails.

+1

vous avez une sorte de publication (blog, forum post etc) où vous votre test automatisé mis en place? J'aimerais faire des tests automatisés pour mes applications et j'adore hudson mais jusqu'à présent je n'ai jamais trouvé une bonne introduction dans ce sujet. – Janusz

+0

Il y a une possibilité que je puisse l'écrire avec d'autres améliorations liées à Hudson sur lesquelles je travaille, mais probablement pas pendant plusieurs semaines. Si je le fais, je posterai une mise à jour ici. –

+0

Ce serait génial merci – Janusz

Répondre

54

Personnellement, je pense que la façon la plus simple est de commencer l'émulateur, probablement une instance propre à moins que vous exécutez des tests d'intégration qui dépend d'autres applications, puis modifier les paramètres linguistiques en utilisant adb:

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

ou tout autre lieu que vous voulez mettre en place. Pour vérifier que votre changement a réussi il suffit d'utiliser

$ adb shell 'getprop persist.sys.language' 

Vous pouvez également exécuter des émulateurs sur les ports connaissent, vérifier my answer in this thread.


Notez que vous pouvez également définir les propriétés du système directement lors du démarrage de l'émulateur:

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

De cette façon, vous pouvez créer une plaine ancienne émulateur de tout type, puis démarrer à l'aide immédiatement les paramètres régionaux de votre choix, sans doivent d'abord apporter des modifications aux images de l'émulateur.Cet environnement persistera pour les prochaines exécutions de l'émulateur, bien que vous puissiez toujours le modifier au démarrage ou pendant l'exécution.

+0

Ceci est vraiment intéressant pour moi donc je suis allé l'essayer, je l'ai essayé via le shell ADB sur un G1 et un HTC Hero, je peux utiliser getprop sans problème et récupérer des informations. Mais je veux utiliser setprop mais quand je fais rien ne semble vraiment changé? –

+2

Nous parlions d'émulateurs, je ne sais pas si cela pourrait fonctionner sur un périphérique réel. –

+1

Cool .. Je ne connaissais pas ces propriétés ou 'stop' /' start'. Travaille pour moi. Aussi travaillé sur mon HTC Hero, ou au moins 'stop' et' start' heureusement redémarré les choses (lorsqu'il est exécuté en tant que root). :) –

3

La réponse acceptée ne fonctionne plus. persist.sys.language et persist.sys.country ont disparu des propriétés de l'émulateur.

Ma solution est d'utiliser préinstallé sur l'application "Custom locale" de l'émulateur android. Envoyez simplement l'intention avec le paramètre de langue supplémentaire pour comme ci-dessous:

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

Plus d'informations ici - prepare android emulator for UI test automation.

Questions connexes