Frage

Für automatisierte Tests (unter Verwendung von Hudson) Ich habe ein Skript, das eine Reihe von Emulatoren für viele Kombinationen von Android OS-Version erzeugt, Bildschirmauflösung, Bildschirmdichte und Sprache.
Dies funktioniert gut, mit Ausnahme der Sprache Teil.

Ich muss einen Weg finden, um die Android-System locale automatisch zu ändern. Hier einige Ansätze, die ich mir vorstellen kann, in der Reihenfolge ihrer Präferenz:

  • Extrahieren / Bearbeiten / Umpacken ein QEMU Bild direkt vor dem Emulator starten
  • Laufen eine Art von System-locale-Wechsel APK auf dem Emulator nach dem Start
  • Ändern der Ländereinstellungen auf dem Emulator-Dateisystem nach dem Start
  • Ändern der Ländereinstellungen in einiger SQLite DB auf dem Emulator nach dem Start
  • eine Tastenfolge Laufen (über den Telnet-Schnittstelle des Emulators), die die Einstellungen App öffnen würde und das Gebietsschema ändern
  • manuell den Emulator für jede Plattform-Version starten, das Gebietsschema von Hand in den Einstellungen ändern, es zu speichern und Archivierung der Bilder für die spätere Bereitstellung

Alle Ideen, ob dies getan werden kann, entweder über die oben genannten Methoden oder sonst?

Möchten Sie wissen, wo locale-Einstellungen werden beibehalten zu / lesen von durch das System?


Lösung:
Dank dtmilano die Informationen über die relevanten Eigenschaften, und einige weitere Untersuchungen auf meinen Teil, ich kam mit einer Lösung oben noch besser und einfacher als alle Ideen oben!

Ich habe seine Antwort unten mit den Details aktualisiert.

War es hilfreich?

Lösung

Ich persönlich denke, der einfachste Weg ist, den Emulator zu starten, wahrscheinlich eine saubere Instanz, wenn Sie Integrationstests ausgeführt werden, die auf anderen Anwendungen abhängig und dann locale mit adb ändern:

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

oder was auch immer locale Sie festlegen möchten. Um sicherzustellen, dass Ihre Änderung war erfolgreich verwendet nur

$ adb shell 'getprop persist.sys.language'

Sie können auch Emulatoren auf Know-Ports laufen, überprüfen Sie meine Antwort in diesem Thread .


Beachten Sie, dass Sie auch direkt Systemeigenschaften können Sie beim Starten des Emulators :

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

Auf diese Weise können Sie eine einfache alte Emulator jeglicher Art erstellen sie dann sofort das Gebietsschema Ihrer Wahl starten, ohne mit ersten irgendwelche Änderungen an den Emulator Bilder zu machen.

Dieses locale für zukünftige Läufe des Emulators bestehen bleiben, obwohl natürlich kann man immer es beim Start wieder ändern oder während der Laufzeit.

Andere Tipps

akzeptierte Antwort funktioniert nicht mehr. persist.sys.language und persist.sys.country aus Emulator Eigenschaften gegangen.

Meine Lösung ist auf Android-Emulator „Custom locale“ Anwendung verwenden vorinstalliert. Senden Sie einfach Absicht mit zusätzlichen Sprachparametern, um es wie folgt:

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

Weitere Informationen finden Sie hier -. android Emulator für UI-Testautomatisierung vorbereiten

UPDATE: basierend auf Kommentar von Jonas Alves folgendem Befehl funktioniert auf API 28 +:

adb shell am broadcast -a com.android.intent.action.SET_LOCALE --es com.android.intent.extra.LOCALE "en_US" com.android.customlocale2
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top