web-dev-qa-db-ja.com

Androidエミュレータロケールを自動的に変更する

自動テスト(Hudsonを使用)用に、Android OSバージョン、画面解像度、画面密度、言語のさまざまな組み合わせに対して一連のエミュレーターを生成するスクリプトがあります。
これは、言語部分を除いて、正常に機能します。

Androidシステムロケールを自動的に変更する方法を見つける必要があります。次に、優先順に考えられるいくつかのアプローチを示します。

  • エミュレーターを開始する直前にQEMUイメージを抽出/編集/再パックする
  • 起動後にエミュレーターでシステムロケールを変更するAPKを実行する
  • 起動後のエミュレータファイルシステムのロケール設定の変更
  • 起動後にエミュレーター上の一部のSQLiteDBのロケール設定を変更する
  • 設定アプリを開いてロケールを変更するキーシーケンスを(エミュレーターのtelnetインターフェイスを介して)実行する
  • 手動各プラットフォームバージョンのエミュレーターを起動し、設定でロケールを手動で変更し、保存して、後で展開するためにイメージをアーカイブします

上記の方法またはその他の方法でこれを実行できるかどうかについてのアイデアはありますか?

ロケール設定がシステムによって永続化/読み取りされる場所を知っていますか?


解決策:
関連するプロパティに関するdtmilanoの情報と、私の側でのさらなる調査のおかげで、上記のすべてのアイデアよりもさらに優れたシンプルなソリューションを思いつきました。

私は彼の答えを以下の詳細で更新しました。

27
Christopher Orr

個人的には、エミュレーターを起動するのが最も簡単な方法だと思います。他のアプリケーションに依存する統合テストを実行してから、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

このようにして、任意のタイプの単純な古いエミュレーターを作成し、選択したロケールを使用してすぐに起動できます。最初に変更を加える必要はありませんエミュレータイメージに。

このロケールは、エミュレーターの将来の実行のために保持されますが、もちろん、起動時または実行時にいつでも再度変更できます。

55

受け入れられた回答はもう機能しません。 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
7
denys

Androidエミュレーターは、起動時にロケールの設定をサポートするようになりました。

emulator -avd <avd-name> -change-locale fr-CA

ソース- https://androidstudio.googleblog.com/2019/09/emulator-29112-stable.html

0
Amit Kotlovski