Modifica le impostazioni internazionali emulatore di Android automaticamente
-
19-09-2019 - |
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.
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-itSi 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