自動テスト(Hudsonを使用)用に、Android OSバージョン、画面解像度、画面密度、言語のさまざまな組み合わせに対して一連のエミュレーターを生成するスクリプトがあります。
これは、言語部分を除いて、正常に機能します。
Androidシステムロケールを自動的に変更する方法を見つける必要があります。次に、優先順に考えられるいくつかのアプローチを示します。
上記の方法またはその他の方法でこれを実行できるかどうかについてのアイデアはありますか?
ロケール設定がシステムによって永続化/読み取りされる場所を知っていますか?
解決策:
関連するプロパティに関するdtmilanoの情報と、私の側でのさらなる調査のおかげで、上記のすべてのアイデアよりもさらに優れたシンプルなソリューションを思いつきました。
私は彼の答えを以下の詳細で更新しました。
個人的には、エミュレーターを起動するのが最も簡単な方法だと思います。他のアプリケーションに依存する統合テストを実行してから、adbを使用してロケールを変更しない限り、おそらくクリーンなインスタンスです。
$ adb Shell '
setprop persist.sys.language en;
setprop persist.sys.country GB;
stop;
sleep 5;
start'
または設定したいロケール。変更が成功したことを確認するには、
$ adb Shell 'getprop persist.sys.language'
既知のポートでエミュレーターを実行することもできます。チェックしてください このスレッドでの私の答え 。
エミュレーターの起動時にシステムプロパティを直接設定することもできることに注意してください:
emulator -avd my_avd -prop persist.sys.language=en -prop persist.sys.country=GB
このようにして、任意のタイプの単純な古いエミュレーターを作成し、選択したロケールを使用してすぐに起動できます。最初に変更を加える必要はありませんエミュレータイメージに。
このロケールは、エミュレーターの将来の実行のために保持されますが、もちろん、起動時または実行時にいつでも再度変更できます。
受け入れられた回答はもう機能しません。 persist.sys.language
およびpersist.sys.country
エミュレータのプロパティから削除されました。
私の解決策は、Androidエミュレーターの「カスタムロケール」アプリケーションにプリインストールされているものを使用することです。以下のように、追加の言語パラメーターを指定してインテントを送信するだけです。
adb Shell am broadcast -a com.Android.intent.action.SET_LOCALE --es com.Android.intent.extra.LOCALE EN
詳細はこちら- prepare Android UIテスト自動化用エミュレーター
更新:Jonas Alvesからのコメントに基づいて、次のコマンドはAPI28以降で機能します。
adb Shell am broadcast -a com.Android.intent.action.SET_LOCALE --es com.Android.intent.extra.LOCALE "en_US" com.Android.customlocale2
Androidエミュレーターは、起動時にロケールの設定をサポートするようになりました。
emulator -avd <avd-name> -change-locale fr-CA
ソース- https://androidstudio.googleblog.com/2019/09/emulator-29112-stable.html