Question

Pour les tests automatisés (à l'aide d'Hudson) J'ai un script qui génère un tas d'émulateurs pour de nombreuses combinaisons de la version Android OS, résolution d'écran, la densité de l'écran et la langue.
Cela fonctionne très bien, sauf pour la partie de la langue.

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

  • Extraction / édition / remballage une image QEMU directement avant de lancer l'émulateur
  • Course à pied 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 modifier les paramètres régionaux
  • manuellement à partir de l'émulateur pour chaque version de la plate-forme, modification des paramètres régionaux manuellement dans les paramètres, l'enregistrer et d'archiver les images pour un déploiement ultérieur

Toutes les idées que cela peut être fait, soit par les méthodes ci-dessus ou autrement?

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


Solution: Merci à l'info dtmilano 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!

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

Était-ce utile?

La solution

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 souhaitez définir. Pour vérifier que votre changement a réussi utiliser simplement

$ adb shell 'getprop persist.sys.language'

Vous pouvez également exécuter des émulateurs sur les ports connaissent, vérifier ma réponse dans ce fil .


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 immédiatement en utilisant les paramètres régionaux de votre choix, sans avoir à apporter des modifications aux images de l'émulateur.

Ce lieu persistera pour les futures pistes de l'émulateur, mais vous pouvez bien sûr toujours changer à nouveau au démarrage ou lors de l'exécution.

Autres conseils

Acceptée réponse ne fonctionne plus. persist.sys.language et persist.sys.country sont partis des propriétés de l'émulateur.

Ma solution est d'utiliser pré-installé sur l'émulateur Android application « locale personnalisée ». 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 -. préparer émulateur Android pour l'automatisation des tests de l'interface utilisateur

Mise à jour: basé sur le commentaire de Jonas Alves Les œuvres de commande suivantes sur API 28 +:

adb shell am broadcast -a com.android.intent.action.SET_LOCALE --es com.android.intent.extra.LOCALE "en_US" com.android.customlocale2
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top