Domanda

Per i test automatizzati (utilizzando Hudson) Ho uno script che genera una serie di emulatori per molte combinazioni di versione del sistema operativo Android, la risoluzione dello schermo, la densità dello schermo e la lingua.
Questo funziona bene, tranne che per la parte di lingua.

Ho bisogno di trovare un modo per cambiare automaticamente la lingua del sistema Android. Ecco alcuni approcci mi vengono in mente, in ordine di preferenza:

  • Estrazione / editing / reimballaggio un'immagine QEMU direttamente prima di avviare l'emulatore
  • Esecuzione una sorta di sistema-locale-cambiando APK sull'emulatore dopo l'avvio
  • Modifica le impostazioni internazionali sul filesystem emulatore dopo l'avvio
  • Modifica le impostazioni internazionali in alcuni SQLite DB sull'emulatore dopo l'avvio
  • Esecuzione di una sequenza di tasti (attraverso l'interfaccia telnet dell'emulatore) che aprire l'applicazione Impostazioni e modificare le impostazioni internazionali
  • manualmente di avviare l'emulatore per ogni versione della piattaforma, cambiando le impostazioni internazionali a mano nelle impostazioni, il salvataggio e l'archiviazione delle immagini per una successiva distribuzione

Tutte le idee se questo può essere fatto, sia tramite i metodi di cui sopra o in altro modo?

Sai dove impostazioni internazionali vengono mantenute a / leggere da parte del sistema?


Soluzione:
Grazie al di dtmilano informazioni sulle proprietà rilevanti, e alcuni ulteriori indagini da parte mia, mi si avvicinò con una soluzione ancora migliore e più semplice di tutte le idee di cui sopra!

Ho aggiornato la sua risposta al di sotto con i dettagli.

È stato utile?

Soluzione

Personalmente penso che il modo più semplice è quello di avviare l'emulatore, probabilmente un esempio pulito a meno che non si esegue test di integrazione che dipende da altre applicazioni e quindi modificare locale utilizzando adb:

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

o quello locale che si desidera impostare. Per verificare che il cambiamento era successo basta usare

$ adb shell 'getprop persist.sys.language'

Si consiglia inoltre di eseguire emulatori sulle porte so, controllare la mia risposta a questa discussione .

-corre-emulatore dopo-it

Si noti che è anche possibile impostare direttamente le proprietà del sistema quando si avvia l'emulatore :

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

In questo modo, è possibile creare una pianura vecchio emulatore di qualsiasi tipo poi avviarlo immediatamente utilizzando il locale di vostra scelta, senza prima di dover apportare modifiche alle immagini dell'emulatore.

Questo locale persisterà per i futuri funzionamenti dell'emulatore, anche se naturalmente si può sempre cambiare nuovamente all'avvio o durante il runtime.

Altri suggerimenti

risposta accettata non funziona più. persist.sys.language e persist.sys.country sono spariti dalle proprietà emulatore.

La mia soluzione è quella di utilizzare preinstallato su Android emulatore applicazione "locale personalizzato". Inviate intenti con il parametro di lingua in più per come qui sotto:

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

Maggiori informazioni qui -. preparare emulatore di Android per l'automazione di test dell'interfaccia utente

UPDATE: sulla base di commento da Jonas Alves seguenti comando funziona su API 28 +:

adb shell am broadcast -a com.android.intent.action.SET_LOCALE --es com.android.intent.extra.LOCALE "en_US" com.android.customlocale2
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top