2010-03-10 7 views
26

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, Bildschirmauflösung, Bildschirmdichte und Sprache erzeugt.
Das funktioniert gut, außer für den Sprachteil.Ändern des Android-Emulator locale automatisch

Ich muss eine Möglichkeit finden, das Android-Systemgebietsschema automatisch zu ändern. Hier einige Ansätze, die ich denken kann, in der Reihenfolge ihrer Präferenz:

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

Irgendwelche Ideen, ob dies getan werden kann, entweder über die über Methoden oder sonst?

Wissen Sie, wo locale-Einstellungen beibehalten werden/lesen von durch das System?


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

Ich habe seine Antwort unten mit den Details aktualisiert.

+1

Sie haben eine Art von Veröffentlichung (Blog, Forum Post usw.), wo Sie Ihre automatisierten Tests beschreiben einrichten? Ich würde gerne automatisierte Tests für meine Apps machen und ich liebe Hudson, aber bis jetzt habe ich noch nie eine gute Einführung in dieses Thema gefunden. – Janusz

+0

Es gibt eine Möglichkeit, dass ich es zusammen mit einigen zusätzlichen Hudson-bezogenen Verbesserungen schreibe, an denen ich arbeite, aber wahrscheinlich nicht für mehrere Wochen. Wenn ich das tue, werde ich hier ein Update posten. –

+0

Das wäre großartig danke – Janusz

Antwort

54

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 adb verwenden ändern:

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

oder was auch immer locale Sie wollen einstellen. Um überprüfen, ob Ihre Änderung

$ adb shell 'getprop persist.sys.language' 

verwenden nur erfolgreich war, können Sie wollen auch Emulatoren auf Know-Ports laufen, überprüfen my answer in this thread.


Beachten Sie, dass Sie auch Eigenschaften System einstellen können direkt bei den Emulator Start:

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 starten sofort die Verwendung von Gebietsschema Ihrer Wahl, ohne zuerst Änderungen an den Emulatorbildern vornehmen müssen.

Dieses Gebietsschema wird für zukünftige Ausführungen des Emulators beibehalten, obwohl Sie es natürlich jederzeit beim Start oder zur Laufzeit ändern können.

+0

Das ist wirklich interessant zu mir ging ich also um es auszuprobieren, ich habe es über ADB Shell auf einem G1 und einem HTC Hero ausprobiert, ich kann mit getprop kein Problem machen und bekomme Informationen zurück. Aber ich möchte setprop verwenden, aber wenn ich nichts tue, scheint sich tatsächlich etwas zu ändern. –

+2

Wir haben über Emulatoren gesprochen, nicht sicher, ob das auf einem echten Gerät funktionieren könnte. –

+1

Cool .. Ich wusste nicht über diese Eigenschaften oder 'stop' /' start'. Funktioniert bei mir. Habe auch an meinem HTC Hero gearbeitet, oder zumindest "stop" und "start" gerne neu gestartet (wenn es als root läuft). :) –

3

Akzeptierte Antwort funktioniert nicht mehr. persist.sys.language und persist.sys.country sind aus Emulatoreigenschaften verschwunden.

Meine Lösung ist vorinstalliert auf Android-Emulator "Custom locale" -Anwendung zu verwenden. 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 

Mehr Informationen hier - prepare android emulator for UI test automation.