Bescottee苦しいときは伸びてるとき、楽なときは伸びていないとき

5 Android 4.2の「開発者向けオプション」を削除する方法

admin to Android SDK, development — Tags: ,  

android 4.2 hot to remove developer_options

Android 4.2から以下の記事のように「開発者向けオプション」が最初から表示されなくなり、ある手順を実行しないと選択することができなくなりました。

公式サイトにも以下のような記載があります。

http://developer.android.com/about/versions/jelly-bean.html

On devices running Android 4.2, developer options are hidden by default, helping to create a better experience for users. You can reveal the developer options at any time by tapping 7 times on Settings > About phone > Build number on any compatible Android device.



基本的には選択できる状態のままでよいのですが、他の人(特に開発者じゃない方)に貸す場合に、最初の表示されていない状態にしたくなりました。但し、これを戻す方法がありません(泣)。ということで、これを戻す方法を検討します。

現状把握

設定アプリのソースコード

上記の記事からどういう操作を行えば、表示できるようになるかがわかるため、そこから該当するソースコードを検索します。「設定アプリ」->「端末情報」->「ビルド番号」が該当するので、この「端末情報」に該当するソースコードを探します。「設定アプリ」のパッケージ名は、com.android.settings.Settings なので、これで検索して、src ディレクトリの中を探して、「端末情報」を担当しているFragmentは、DeviceInfoSettings.java だとわかりました。

http://tools.oesf.biz/android-4.2.0_r1.0/xref/packages/apps/Settings/src/com/android/settings/DeviceInfoSettings.java

ビルド番号を押す回数

以下のソースコード中のTAPS_TO_BE_A_DEVELOPER という定義が 7 なのでこれがビルド番号をタップする回数に一致するのでこれが定義のようです。

http://tools.oesf.biz/android-4.2.0_r1.0/xref/packages/apps/Settings/src/com/android/settings/DeviceInfoSettings.java#TAPS_TO_BE_A_DEVELOPER

    static final int TAPS_TO_BE_A_DEVELOPER = 7;

では、この変数の使われ方を見てみます。

@Override
public void onResume() {
    super.onResume();
    mDevHitCountdown = getActivity().getSharedPreferences(DevelopmentSettings.PREF_FILE,
            Context.MODE_PRIVATE).getBoolean(DevelopmentSettings.PREF_SHOW,
                    android.os.Build.TYPE.equals("eng")) ? -1 : TAPS_TO_BE_A_DEVELOPER;
    mDevHitToast = null;
}

上記のように onResume() で mDevHitCountdown 変数を初期化しています。
初期値は、DevelopmentSettings.PREF_FILEの設定ファイルにDevelopmentSettings.PREF_SHOWのキーのvalueが true なら -1 になります。
DevelopmentSettings.PREF_SHOWのキーのvalueがない場合は、user or eng の ビルドタイプが eng の場合に true になり、同じく-1になります。
valueがある場合 trueなら、-1が入って、それ以外の場合、TAPS_TO_BE_A_DEVELOPER(=7)が入ります。

ビルド番号がタップされると以下のコードが実行されます。
mDevHitCountdown の初期値が7の場合、タップされるたびにこれが減らされていきます。

設定の保存先

以下のコードのように mDevHitCountdown が 0 になると、Preferenceへの保存が発生します。

 } else if (preference.getKey().equals(KEY_BUILD_NUMBER)) {
             if (mDevHitCountdown > 0) {
                 mDevHitCountdown--;
                 if (mDevHitCountdown == 0) {
                     getActivity().getSharedPreferences(DevelopmentSettings.PREF_FILE,
                             Context.MODE_PRIVATE).edit().putBoolean(
                                     DevelopmentSettings.PREF_SHOW, true).apply();

DevelopmentSettings.PREF_FILE と DevelopmentSettings.PREF_SHOW は、

http://tools.oesf.biz/android-4.2.0_r1.0/xref/packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java

で定義されています。ということは、以下の情報から development.xml の中に show のname属性で true が保存されるということです。

public static final String PREF_FILE = "development";
public static final String PREF_SHOW = "show";

具体的に見てみると、「設定アプリ」の設定値として
/data/data/com.android.settings/shared_prefs/development.xml
のファイルに作成されています。中身は以下です。
(注意)上記の操作は、rooted なデバイスでしか権限的に見ることができませんのでご注意ください。





開発者オプションの削除方法の検討

設定ファイルの編集

DevelopmentSettings.PREF_FILE は以下の検索から、他で設定の保存に利用されていないようです。

http://tools.oesf.biz/android-4.2.0_r1.0/search?q=DevelopmentSettings.PREF_FILE&defs=&refs=&path=&hist=

ということで、このvalueをfalseなどのtrue 以外に変更するか、development.xml ファイル自体を削除すれば当初の目的の
「開発者向けオプション」の削除をできることがわかりました。
実際に rooted なデバイスで以下の手順で削除を行い、「開発者向けオプション」の項目を削除することができました。
再度表示したい場合は、同じ手順で「端末情報」の「ビルド情報」を7回タップすれば表示されるようになります。

C:\>adb shell
shell@android:/ $ su
su
root@android:/ # cd /data/data/com.android.settings/shared_prefs
cd /data/data/com.android.settings/shared_prefs
root@android:/data/data/com.android.settings/shared_prefs # ls -la
ls -la
-rw-rw---- system   system       1172 2013-06-23 10:36 com.android.settings_pref
erences.xml
-rw-rw---- system   system        107 2013-06-22 20:50 development.xml
root@android:/data/data/com.android.settings/shared_prefs # cat development.xml
opment.xml





root@android:/data/data/com.android.settings/shared_prefs # rm development.xml
pment.xml

私の手元にある rooted な Nexus 7 では上記の方法で削除することができました。再度、「ビルド番号」を7回タップすると復活することも確認できました。

まとめ

  • 「開発者向けオプション」の表示の削除は可能(但し、要rooted)
  • 設定値は /data/data/com.android.settings/shared_prefs/development.xml の boolean name=”show” の値
  • 起動一発でこの処理を実施してくれるアプリ作ってくれないかなぁ(要望)

5件のコメント »

  1. kurosuke77777 より:

    標準機能として対応してほしいなぁ。

  2. typex2 より:

    要root。なぜ開発者オプションを出したら引っ込められないようにしてないのか凄く疑問。時には表面的にでも一般人に戻りたい時もある。。

  3. [...] Android 4.2の「開発者向けオプション」を削除する方法 [...]

このコメント欄の RSS フィード トラックバック URL

コメントをどうぞ