1.屏蔽Settings里面的连续五次点击版本号打开开发者模式功能

开发者模式是在Settings里面

找到对应目录:alps/packages/app/Settings/src/com/android/settings/deviceinfo

对应的Java文件:BuildNumberPreferenceController.java

对应的方法:handlePreferenceTreeClick()

@Overridepublic 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 provisionedif (!Utils.isDeviceProvisioned(mContext)) {mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_SETTINGS_BUILD_NUMBER_PREF);return false;}if (mUm.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES)) {if (mUm.isDemoUser()) {// Route to demo device owner to lift the debugging restriction.final ComponentName componentName = Utils.getDeviceOwnerComponent(mContext);if (componentName != null) {final Intent requestDebugFeatures = new Intent().setPackage(componentName.getPackageName()).setAction("com.android.settings.action.REQUEST_DEBUG_FEATURES");final ResolveInfo resolveInfo = mContext.getPackageManager().resolveActivity(requestDebugFeatures, 0);if (resolveInfo != null) {mContext.startActivity(requestDebugFeatures);return false;}}}if (mDebuggingFeaturesDisallowedAdmin != null &&!mDebuggingFeaturesDisallowedBySystem) {RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mContext,mDebuggingFeaturesDisallowedAdmin);}mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_SETTINGS_BUILD_NUMBER_PREF);return false;}if (mDevHitCountdown > 0) {mDevHitCountdown--;if (mDevHitCountdown == 0 && !mProcessingLastDevHit) {// Add 1 count back, then start password confirmation flow.mDevHitCountdown++;final ChooseLockSettingsHelper helper =new ChooseLockSettingsHelper(mActivity, mFragment);mProcessingLastDevHit = helper.launchConfirmationActivity(REQUEST_CONFIRM_PASSWORD_FOR_DEV_PREF,mContext.getString(R.string.unlock_set_unlock_launch_picker_title));//这个就是连续点击五次之后打开开发者模式的函数,注释掉//enableDevelopmentSettings();mMetricsFeatureProvider.action(mMetricsFeatureProvider.getAttribution(mActivity),MetricsEvent.FIELD_SETTINGS_BUILD_NUMBER_DEVELOPER_MODE_ENABLED,mFragment.getMetricsCategory(),null,mProcessingLastDevHit ? 0 : 1);} else if (mDevHitCountdown > 0&& mDevHitCountdown < (TAPS_TO_BE_A_DEVELOPER - 2)) {if (mDevHitToast != null) {mDevHitToast.cancel();}mDevHitToast = Toast.makeText(mContext,mContext.getResources().getQuantityString(R.plurals.show_dev_countdown, mDevHitCountdown,mDevHitCountdown),Toast.LENGTH_SHORT);//这个是当你点击版本号的时,会弹出来toast提示还要点击多少次,这个也注释掉//mDevHitToast.show();}mMetricsFeatureProvider.action(mMetricsFeatureProvider.getAttribution(mActivity),MetricsEvent.FIELD_SETTINGS_BUILD_NUMBER_DEVELOPER_MODE_ENABLED,mFragment.getMetricsCategory(),null,0);} else if (mDevHitCountdown < 0) {if (mDevHitToast != null) {mDevHitToast.cancel();}mDevHitToast = Toast.makeText(mContext, R.string.show_dev_already,Toast.LENGTH_LONG);mDevHitToast.show();mMetricsFeatureProvider.action(mMetricsFeatureProvider.getAttribution(mActivity),MetricsEvent.FIELD_SETTINGS_BUILD_NUMBER_DEVELOPER_MODE_ENABLED,mFragment.getMetricsCategory(),null,1);}return true;}
/*** Enables development settings. Only call this after confirming password.*/private void enableDevelopmentSettings() {mDevHitCountdown = 0;mProcessingLastDevHit = false;DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(mContext, true);//最终打开开发者模式的地方if (mDevHitToast != null) {mDevHitToast.cancel();}mDevHitToast = Toast.makeText(mContext, R.string.show_dev_on,Toast.LENGTH_LONG);mDevHitToast.show();}

注释掉对应的code之后,就成功屏蔽了点击版本号打开开发者模式的功能了

2.通过计算器暗码来打开开发者模式

2.1添加暗码:

路径:packages/apps/ExactCalculator/src/com/android/calculator2/Calculator.java

网上有很多计算器添加暗码的案例,这里就不细说了,贴上代码:

@@ -999,6 +1000,25 @@ public class Calculator extends ActivitymEvaluator.requireResult(Evaluator.MAIN_INDEX, this, mResultText);}}
+            if (mFormulaText.getText().toString().equals("%147%+")) {
+            Log.i("xyx", "input %147%+  ==============>");
+            Intent intent = new Intent();
+            intent.setAction("action.wiwood.enable_Development_Settings");
+                       sendBroadcast(intent);
+            Log.i("xyx", "start intent com.boll.factorymodetest  ==============>");
+        }
+        //end}private void onDelete() {

这里是通过发送广播的方式来打开开发者模式;

2.2添加广播接收器

路径:alps/packages/app/Settings/src/com/android/settings/deviceinfo

这里用的是静态广播的办法,在这里新建一个DevelopmentEnabledReceiver.java

/** Copyright (C) 2015 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**      http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package com.android.settings.deviceinfo;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;import com.android.settingslib.development.DevelopmentSettingsEnabler;public class DevelopmentEnabledReceiver extends BroadcastReceiver {private final String TAG = "DevelopmentEnabledReceiver";@Overridepublic void onReceive(Context context, Intent intent) {Log.i(TAG, "Receive BroadCast:-----------------> action.wiwood.enable_Development_Settings");DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(context, true);}
}

添加了广播接收器之后还要在AndroidManifest.xml里面声明一下:

--- a/mediatek/proprietary/packages/apps/MtkSettings/AndroidManifest.xml
+++ b/mediatek/proprietary/packages/apps/MtkSettings/AndroidManifest.xml
@@ -1918,6 +1918,16 @@<receiver android:name=".deviceinfo.StorageUnmountReceiver"android:exported="true"android:permission="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
+
+               <!-- xyx: add for development enabled-->
+               <receiver android:name=".deviceinfo.DevelopmentEnabledReceiver"
+                               android:enabled="true"
+                               android:exported="true">
+                       <intent-filter>
+                               <action android:name="action.wiwood.enable_Development_Settings"/>
+                       </intent-filter>
+               </receiver>
+               <!-- end xyx -->

至此,就完成了所有代码的修改,编译Settings.apk和Calculator.apk,push到机器对应的路径下验证就ok了

屏蔽Settings里面连续五次点击版本号打开开发者模式,并且通过计算器暗码来打开开发者模式相关推荐

  1. Button的五种点击事件

    Button的五种点击事件 1.内部类方式 class MyOnClickListener implements View.OnClickListener{ /** * Called when a v ...

  2. php 连续点击事件,javascript设置连续两次点击按钮时间间隔的方法_javascript技巧...

    本文实例讲述了javascript设置连续两次点击按钮时间间隔的方法,分享给大家供大家参考.具体实现方法如下: 很多时候我们在实际应用中,可能并不希望按钮联系被不间断的点击,所以要限定一定的时间间隔才 ...

  3. 安卓java浮层不响应点击事件,Android悬浮窗屏蔽悬浮窗外部所有的点击事件的实例代码...

    Android可以在所有应用上方添加View,就是给WindowManager添加一个View,在创建的View的时候可以给这个View设置LayoutParams(android.view.Wind ...

  4. (株)FAU艾芙优连续五年荣获“韩国消费者评价第一”

    2021年"韩国顾客满足度第一" 12月1日,在韩国首尔 Novotel Ambassador 举办的韩国2021年消费者评价颁奖仪式中,FAU艾芙优旗下产品再生BB霜荣获化妆品( ...

  5. Windows每五秒点击一次键盘保持不锁屏

    模拟键盘每五秒点击一次大写锁定键,保持Windows不锁屏 (一共执行1000次) 使用步骤: 1,桌面新建文本文档 2,将代码复制到文档中 3,文本文档后缀改成.vbs 4,双击运行 Set wsh ...

  6. 中国连续五年成为全球最大工业机器人市场

    据悉,在工业机器人领域,中国工业机器人应用市场,占据全球市场比例将从1/4提升到1/3以上.根据工信部的统计,今年上半年中国工生产5.9万台工业机器人,同比增长了52%. 中国继续保持着在机器人领域的 ...

  7. 2023 亚洲大学排名出炉,95所内地高校上榜,清华大学连续五年,亚洲第一!

    消息来源:泰晤士高等教育 编辑整理:双一流高教 6月22日,2023年泰晤士高等教育(THE)亚洲大学排名在香港中文大学举行的泰晤士高等教育亚洲大学峰会上正式揭晓. 今年共有 669 所亚洲高校上榜泰 ...

  8. 优炫软件连续五年入选“北京软件和信息服务业综合实力前百家企业”

    12月28日,北京软件和信息服务业协会第十届会员代表大会第三次会议在线成功召开,会上发布了<2022北京软件和信息技术服务企业综合实力报告>和<2022北京软件企业核心竞争力评价报告 ...

  9. 微信内点击链接或扫描二维码直接打开手机默认浏览器打开指定网页

    场景分析 当我们在微信内分享链接或二维码的时候,我们会发现我们的网站是可以在浏览器里正常打开的,但就是不能在微信里打开,提示 " 已停止访问该网页 ",无论是聊天框也一样.说是系统 ...

最新文章

  1. 进行直播间搭建时需要注意的小细节
  2. boost::mp11::mp_clear相关用法的测试程序
  3. Ext JS 6开发实例(一)
  4. 苹果通知推送服务(APNS)关键特性摘要
  5. python的输出函数_Python输出函数print()总结(python print())
  6. MDK编译生成bin文件
  7. 洛谷 P1939 【模板】矩阵加速(数列)
  8. 【Codeforces 851D Arpa and a list of numbers】
  9. Nmap 可能引起cisco路由器Crash
  10. Oracle:PL/SQL程序开发
  11. 增长量计算n+1原则_资料分析听课笔记
  12. EXCEL中如何撤销工作表保护
  13. Nginx源码分析之ngx_hash_t
  14. 2021-2027全球与中国轧辊弯曲机市场现状及未来发展趋势
  15. 写点看Harvard CS50 公开课的感受
  16. JavaScript 进阶篇的学习~
  17. RationalDMIS 7.1建立工件坐标系的过程:必须尊守321法则
  18. 2019 杭电 多校第3场 1006 Fansblog (HDU 6608)
  19. Matlab 安装免费提供的 MinGW-w64 C/C++ 编译器
  20. 网络代理(Proxy)

热门文章

  1. 2022-6-27 信物传送,最长特殊序列II,T秒后青蛙的位置
  2. Linux系统多网卡绑定各配置模式详解
  3. uni-app实现一个简易实用物流信息跟踪模板页面
  4. 了解少儿编程和机器人编程的区别
  5. java 17个IDEA最常用的快捷键 介绍及演示
  6. HDP(层次狄利克雷过程)算法代码实现细节梳理(Java)
  7. 像素之间的转换 之 px与rem的转换
  8. 陈进:乘风破浪会有时(8.31)
  9. Vue中,解决在浏览器浏览项目出现空白页的情况
  10. 荣耀x10max鸿蒙系统,大屏党游戏与影音神器,荣耀x10Max值得入手吗?