Appiumが提供するAndroid設定ヘルパーアプリを使ってコマンドラインでエミュレータを日本語設定にする方法。
ビジュアルリグレッションテストなどで日本語化されたスクリーンショットを自動で取得したい場合などに役立つ。
準備
Appium Settings APK をインストールする
Appium Settings は、ロケール・GPS・ネットワークなどのAndroidのシステム設定をコマンドから変更できるヘルパーアプリ。
まずAPKをダウンロードしてエミュレータにインストールする。
curl -s -O -L https://github.com/appium/io.appium.settings/releases/latest/download/settings_apk-debug.apk
adb install settings_apk-debug.apk
設定変更の権限を付与する
インストール後、設定変更に必要な権限を付与する。
adb shell pm grant io.appium.settings android.permission.CHANGE_CONFIGURATION
pm grant は指定したアプリにAndroidの権限を付与するコマンド。android.permission.CHANGE_CONFIGURATION はデバイスのロケールや言語などのシステム設定を変更する権限で、通常のアプリには付与されていない。
日本語に設定する
以下のコマンドでロケールを日本語(日本)に設定する。
adb shell am broadcast -a io.appium.settings.locale \
-n io.appium.settings/.receivers.LocaleSettingReceiver \
--es lang ja --es country JP
Android のバージョン別の追加設定
Android 9(APIレベル28)以降はNon-SDKインターフェースへのアクセス制限が導入されており、バージョンによって追加の設定が必要になる。
参考: Restrictions on non-SDK interfaces | Android Developers
Android 10(API レベル 29)以降
pm grant の前に以下を実行してNon-SDKインターフェースへのアクセスを有効にする。
adb shell settings put global hidden_api_policy 1
Android 9(API レベル 28)
Android 9では hidden_api_policy が存在しない代わりに、対象アプリのAPIレベルに応じた設定キーが使われる。
adb shell settings put global hidden_api_policy_pre_p_apps 1
adb shell settings put global hidden_api_policy_p_apps 1
hidden_api_policy_pre_p_apps: Android 9未満をターゲットとするアプリへのポリシーhidden_api_policy_p_apps: Android 9以降をターゲットとするアプリへのポリシー
値 1 を指定するとすべてのNon-SDKインターフェースへのアクセスを許可する(警告ログあり)。
設定をデフォルトに戻すには put を delete に置き換えて実行する。
adb shell settings delete global hidden_api_policy_pre_p_apps
adb shell settings delete global hidden_api_policy_p_apps
\確かな知識を身に着けたい、Androidアプリ開発を学びたい人にオススメ!/
