この問題はATOバージョンに存在し、非ATOバージョンは正常です。
Settings / src / com / android / settings / deviceinfo / BuildNumberPreferenceController.javaでログを印刷し、次を見つけます:
@オーバーライド
public boolean handlePreferenceTreeClick(Preference preference){
if(!TextUtils.equals(preference.getKey()、KEY_BUILD_NUMBER)){
falseを返します。
}
if(Utils.isMonkeyRunning()){
falseを返します。
}
//デモ以外のセカンダリユーザーに対して開発者向けオプションを有効にしないでください。
if(!(mUm.isAdminUser()|| mUm.isDemoUser())){
mMetricsFeatureProvider.action(
mContext、MetricsEvent.ACTION_SETTINGS_BUILD_NUMBER_PREF);
falseを返します。
}
//デバイスがプロビジョニングされるまで開発者オプションを有効にしないでください
if(!Utils.isDeviceProvisioned(mContext)){
mMetricsFeatureProvider.action(
mContext、MetricsEvent.ACTION_SETTINGS_BUILD_NUMBER_PREF);
falseを返します。
}
……
注など:デバイスがプロビジョニングされるまで開発者オプションを有効にしないでください。これはUtilsです。IsDeviceProvisioned()の値はfalseであり、返されるだけなので、開発者オプションを開くことができません。
/frameworks/base/core/java/android/provider/Settings.java
public static boolean isDeviceProvisioned(Context context){
戻り値Settings.Global.getInt(context.getContentResolver()、
Settings.Global.DEVICE_PROVISIONED、0)!= 0;
}
Settings.Global.DEVICE_PROVISIONEDの値に問題があります。
ATOバージョンget device_provisionedは0、
非ATOバージョンget device_provisionedは1です。
device_provisionedのデフォルト値を表示します。
/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
loadBooleanSetting(stmt、Settings.Global.DEVICE_PROVISIONED、
R.bool.def_device_provisioned);
frameworks / base / packages / SettingsProvider / res / values / defaults.xml
<bool name = "def_device_provisioned"> false </ bool>
値のデフォルトはfalse、つまり0であることがわかります。
全世界を検索して、変更が加えられた場所を確認します。
/packages/apps/Provision/src/com/android/provision/DefaultActivity.java
/ **
* SetupWizardと同様に、プロビジョニングされたビットを設定するアプリケーション。
* /
パブリッククラスDefaultActivityはActivity {
@オーバーライド
protected void onCreate(Bundle icicle){
super.onCreate(icicle);
//永続的な設定を追加して、デバイスがプロビジョニングされたことを他のアプリが認識できるようにします。
Settings.Global.putInt(getContentResolver()、Settings.Global.DEVICE_PROVISIONED、1);
Settings.Secure.putInt(getContentResolver()、Settings.Secure.USER_SETUP_COMPLETE、1);
//このアクティビティをパッケージマネージャから削除します。
PackageManager pm = getPackageManager();
ComponentName name = new ComponentName(this、DefaultActivity.class);
pm.setComponentEnabledSetting(name、PackageManager.COMPONENT_ENABLED_STATE_DISABLED、
PackageManager.DONT_KILL_APP);
//アクティビティを終了します。
finish();
}
}
このAPKをプロビジョニングすると、多くの人はこのAPKが存在することを知らない可能性があります。Provisionの役割は非常にシンプルです。これはシステム初期化ブートローダーです。ネイティブAndroidでは、ProvisionはDEVICE_PROVISIONEDタグを書き込むという1つのことだけを行います。ただし、このマークは非常に役立ちます。このマークは、システムが完全にアップグレードされたときに(ダブルクリアで)1回だけ書き込まれるため、Androidシステムをアップグレードする準備ができており、正常に動作できます。
これは、ATOバージョンにシステム初期化ブートローダーがないためであることがわかります。カスタマイズされたSetupWizardでもGoogleのSetupWizardでも、Android.mkファイルで宣言してこのAPKをオーバーライドすることがわかっています。DEVICE_PROVISIONEDタグを書き込むアクションも、独自のapkで実行されます。
カスタマイズされたSetupWizard Android.mkファイルを確認してください。
LOCAL_OVERRIDES_PACKAGES:=プロビジョニング
SetupWizardはATOバージョンでコンパイルされていないため、LOCAL_OVERRIDES_PACKAGESの後でProvisionは有効にならず、この値が書き込まれないため、コメントアウトしてください。