Android エミュレータのロケールを自動的に変更する
-
19-09-2019 - |
質問
自動テスト (Hudson を使用) のために、Android OS バージョン、画面解像度、画面密度、言語のさまざまな組み合わせに対応する多数のエミュレーターを生成するスクリプトがあります。
これは言語部分を除いて正常に動作します。
Android システムのロケールを自動的に変更する方法を見つける必要があります。私が考えることができるいくつかのアプローチを優先順に示します。
- エミュレータを起動する前に QEMU イメージを直接抽出/編集/再パックする
- 起動後にエミュレータ上で何らかのシステムロケールを変更する APK を実行する
- 起動後のエミュレータ ファイルシステムのロケール設定の変更
- 起動後にエミュレータ上の一部の SQLite DB のロケール設定を変更する
- 設定アプリを開いてロケールを変更するキー シーケンスを (エミュレーターの Telnet インターフェイス経由で) 実行します。
- 手動で 各プラットフォーム バージョンのエミュレータを起動し、設定でロケールを手動で変更し、保存して、後で展開するためにイメージをアーカイブします。
上記の方法またはその他の方法でこれを実行できるかどうか何かアイデアはありますか?
ロケール設定がシステムによってどこに保存され、どこから読み取られるか知っていますか?
解決:
関連するプロパティに関する 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
ここで詳細情報 - 。 UIテストの自動化のためのAndroidエミュレータを準備する
UPDATE:ジョナス・アウベスからのコメントAPIで以下のコマンドの動作に基づいて28 +ます:
adb shell am broadcast -a com.android.intent.action.SET_LOCALE --es com.android.intent.extra.LOCALE "en_US" com.android.customlocale2