30

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

Androidシステムのロケールを自動的に変更する方法を見つける必要があります。好みの順に、私が考えることができるいくつかのアプローチがあります:

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

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

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


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

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

4

3 に答える 3

57

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

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

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

于 2010-03-10T16:43:40.703 に答える
11

受け入れられた回答はもう機能しません。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エミュレーターを準備します。

更新: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
于 2017-01-14T19:51:22.347 に答える
3

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

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

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

于 2020-02-05T11:39:53.180 に答える