android 点击5次打开开发者模式

本文解析了安卓系统中开发者模式的开启机制,详细说明了通过连续点击版本号7次来显示开发者选项的过程,并探讨了如何在特定情况下阻止ADB功能的激活。同时,介绍了Settings.Global.DEVELOPMENT_SETTINGS_ENABLED和Settings.Global.ADB_ENABLED两个全局设置项的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)Q之前的版本,关于开发这模式是否显示

默认user版本不显示开发者选项这一栏,需要通过连续点击版本号7次来显示.
packages\apps\Settings\src\com\android\settings\DeviceInfoSettings.java
static final int TAPS_TO_BE_A_DEVELOPER = 7;
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;
}
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
......
if (mDevHitCountdown > 0) {
mDevHitCountdown--;
if (mDevHitCountdown == 0) {
getActivity().getSharedPreferences(DevelopmentSettings.PREF_FILE,
Context.MODE_PRIVATE).edit().putBoolean(
DevelopmentSettings.PREF_SHOW, true).apply();
if (mDevHitToast != null) {
mDevHitToast.cancel();
}
mDevHitToast = Toast.makeText(getActivity(), R.string.show_dev_on,
Toast.LENGTH_LONG);
mDevHitToast.show();
// This is good time to index the Developer Options
Index.getInstance(
getActivity().getApplicationContext()).updateFromClassNameResource(
DevelopmentSettings.class.getName(), true, true);
} else if (mDevHitCountdown > 0
&& mDevHitCountdown < (TAPS_TO_BE_A_DEVELOPER-2)) {
if (mDevHitToast != null) {
mDevHitToast.cancel();
}
mDevHitToast = Toast.makeText(getActivity(), getResources().getQuantityString(
R.plurals.show_dev_countdown, mDevHitCountdown, mDevHitCountdown),
Toast.LENGTH_SHORT);
mDevHitToast.show();
}
} else if (mDevHitCountdown < 0) { //点击完7次之后显示
if (mDevHitToast != null) {
mDevHitToast.cancel();
}
mDevHitToast = Toast.makeText(getActivity(), R.string.show_dev_already,
Toast.LENGTH_LONG);
mDevHitToast.show();
}
}
......
}

而默认开机是否显示由变量showDev控制
packages\apps\Settings\src\com\android\settings\SettingsActivity.java
private void updateTilesList(List target) {
final boolean showDev = mDevelopmentPreferences.getBoolean(
DevelopmentSettings.PREF_SHOW,
android.os.Build.TYPE.equals("eng"));    //因此eng才返回true
......
} else if (id == R.id.development_settings) {
if (!showDev || um.hasUserRestriction(
UserManager.DISALLOW_DEBUGGING_FEATURES)) {
removeTile = true;    //showDev为false则不显示
}
}
}

解决方法:
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 645add3..11a9c55 100755
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -1236,9 +1236,11 @@ public class SettingsActivity extends Activity
}
private void updateTilesList(List target) {
-        final boolean showDev = mDevelopmentPreferences.getBoolean(
-                DevelopmentSettings.PREF_SHOW,
-                android.os.Build.TYPE.equals("eng"));
+       
+      //  final boolean showDev = mDevelopmentPreferences.getBoolean(
+           //     DevelopmentSettings.PREF_SHOW,
+                //android.os.Build.TYPE.equals("eng"));
+         final boolean showDev = true;

(二)2.1 Q版本想不让adb功能,让点击5次时点击无效

packages\apps\Settings\src\com\android\settings\deviceinfo\BuildNumberPreferenceController.java

  @Override
    public boolean handlePreferenceTreeClick(Preference preference) {
        if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
            return false;
        }
        if (Utils.isMonkeyRunning()) {
            return false;
        }
        // Don't enable developer options for secondary non-demo users.
        if (!(mUm.isAdminUser() || mUm.isDemoUser())) {
            mMetricsFeatureProvider.action(
                    mContext, SettingsEnums.ACTION_SETTINGS_BUILD_NUMBER_PREF);
            return false;
        }

        // Don't enable developer options until device has been provisioned
        if (!Utils.isDeviceProvisioned(mContext)) {
            mMetricsFeatureProvider.action(
                    mContext, SettingsEnums.ACTION_SETTINGS_BUILD_NUMBER_PREF);
            return false;
        }
		
		 //add for CAP-64 HMD enterprise API by wangdonghai start
		  //block ADB添加自己的判断
		  if (SystemProperties.getInt("persist.sys.hmd.block_adb", 0) == 1) {
				if(isDebug)Log.i(TAG,"wdh   block_adb==   "+SystemProperties.getInt("persist.sys.hmd.block_adb", 0));
			  return false;
		  }
		  //add for CAP-64 HMD enterprise API by wangdonghai end
		
        if (mUm.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES)) {
            if (mUm.isDemoUser()) {

2.2,如果开发者模式已经打开,但是不想让菜单显示Settings.Global.DEVELOPMENT_SETTINGS_ENABLED这个值是控制设置里面是否显示开发这模式菜单的

	Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, isBlocked ? 0 : 1);

2.3,如果禁用adb功能的话,Settings.Global.ADB_ENABLED这个值是控制设置adb功能的

Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.ADB_ENABLED, 0);

参考文章:http://blog.sina.com.cn/s/blog_e31a00bc0102zcig.html

 

 

 

<think>好的,我现在需要帮助用户解决如何在Android中取消通过点击版本号进入开发者选项的限制。这个问题看起来需要深入Android系统的设置或开发者选项的相关配置。首先,我需要回忆一下Android系统的常规设置路径。 用户提到的是通过多点击版本号来激活开发者选项,这是Android系统的默认行为,通常在“设置”>“关于手机”>“版本号”处连续点击。但用户希望禁用这个功能,防止其他人随意进入开发者模式。这可能涉及到修改系统设置或者使用ADB命令,甚至可能需要root权限。 首先,我应该考虑是否有系统设置可以直接关闭这个功能。通常,开发者选项一旦激活,用户可以在其中找到开关,但禁用激活步骤本身可能需要更底层的操作。可能需要检查开发者选项中的相关设置,但根据我的知识,标准Android系统并没有提供直接禁用版本号点击激活的选项。 接下来,可能需要使用ADB命令来修改系统设置。例如,通过ADB shell访问设备,并修改特定的全局设置。查找相关的设置键值对,比如`development_settings_enabled`或者`adb_enabled`,但不确定这些是否直接控制激活机制。需要进一步验证。 另外,考虑是否可以通过禁用开发者选项整体来达到目的。但用户可能希望保留开发者选项,只是不希望他人通过点击版本号激活。这种情况下,可能需要更精细的控制,比如修改系统文件或使用设备策略管理器(Device Policy Manager)等企业级功能。 还需要注意,不同Android厂商可能有不同的定制化设置,例如三星的One UI或小米的MIUI可能有自己的实现方式,可能需要针对特定设备进行调整。此外,高版本Android系统可能改变了相关机制,需要确认用户设备的Android版本。 如果系统级的方法不可行,可能需要root权限来直接修改系统文件,例如找到存储开发者选项激活状态的配置文件,并将其设置为不可更改。但这种方法风险较高,且可能因系统更新而失效。 最后,总结可能的解决方案:检查开发者选项中的现有开关,使用ADB命令尝试修改相关设置,或者使用设备管理API限制更改。如果这些都不行,可能需要更深入的系统修改,但普通用户可能难以操作,建议用户谨慎处理,避免系统不稳定。 现在需要将这些思路整理成结构化的回答,确保步骤清晰,并提示用户注意风险和不同设备差异。</think>要在Android设备中禁用通过多点击版本号激活开发者选项的功能,可以尝试以下方法: ### 方法一:重置开发者选项(临时方案) 1. 进入`设置 > 系统 > 开发者选项` 2. 关闭顶部「开发者选项」总开关 3. 返回「关于手机」查看版本号点击数是否重置,但此方法仅临时隐藏开发者选项入口,仍可通过重新点击版本号激活[^1] ### 方法二:ADB命令禁用 需启用USB调试后执行: ```bash adb shell settings put global development_settings_enabled 0 adb shell settings put global adb_enabled 0 adb reboot ``` 该命令会关闭开发者选项和ADB调试,但部分厂商系统可能仍允许通过版本号点击重新激活[^2] ### 方法三:设备策略限制(企业级方案) 通过Android Device Policy Manager配置: 1. 创建设备限制配置文件 2. 禁用「允许开发者选项」策略 3. 部署到目标设备 此方案需要设备加入企业设备管理域[^3] §§注意事项§§ 1. 原生Android系统未开放直接禁用该功能的官方接口 2. 部分定制ROM(如MIUI)在「特殊功能」中提供独立开关 3. 修改系统设置可能导致OTA更新异常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值