总结下这个默认开启开发者模式问题就是,
Settings.Global.putInt(getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
+ Settings.Global.putInt(context.getContentResolver(), Settings.Global.ADB_ENABLED, 1);
这两句放在一个随便哪个能接受开机广播的就成,然后默认确认弹窗,最后把开发者模式的activity一开始就存在好可以开机就可以调用
最好的方式是加在开机完之后就直接执行,不需要接广播,下面systemui要慢一些,
在override/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
final void finishBooting() {方法最后加上
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/SystemUIApplication.java
这个文件就是systemui刚起来,需要接受一个广播,就相当于全局了,所以一定接到,因为开机就是加载systemui了,但是!有些低内存或者低版本的机器,开机之后加载系统太慢,所以会导致迟迟接不到广播,高版本或高性能的手机更新的就很快,所以看不出来,onCreate方法里面有个注册了个广播接受者
registerReceiver(new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
//*/tyd.yantao 20220817 default usbDebug
Settings.Global.putInt(context.getContentResolver(), Settings.Global.ADB_ENABLED, 1);
Settings.Global.putInt(getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
//*/
Settings.Global.putInt(context.getContentResolver(), Settings.Global.ADB_ENABLED, 1);就加这句,就是全局设置,
这个广播的意图过滤是bootCompletedFilter
IntentFilter bootCompletedFilter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED);
bootCompletedFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
这个开机广播系统最高优先级
每次不需要弹窗显示确认
./override/frameworks/base/services/core/java/com/android/server/adb/AdbDebuggingManager.java在
case MESSAGE_ADB_CONFIRM: {
这里面源码有startConfirmationForKey(key, mFingerprints);这句就是弹窗的,但这方法里没有写到我认知的Dialog,或许是吧字符串传到外服务用了。
把这句注释掉,直接用这个类里面已经定义好的方法allowDebugging(true,key);
开发者选项这个preference默认显示开启只需改下面,但下面的只是表面上把这个菜单显示出来了而已,实际上还是得按五下版本号开启开发者,而且点进开发者选项后其实这个开关是关的,所以不能在这改,而且插上数据线后点状态栏通知也会提示先进入开发者模式
这个提示是一个activity就是在MtkSettings / src/com/android/settings/development/DevelopmentSettingsDisabledActivity.java
要想把这个提示去掉,在vendor/mediatek/proprietary/packages/apps/MtkSettings/ AndroidManifest.xml 里面Settings$DevelopmentSettingsDashboardActivity这个activty就是开发者选项的activity,这边源码android:enabled="false",改成true就成。就是刚开始压根就没这activity,所以自然就会进入DevelopmentSettingsDisabledActivity。这个activity就一个toast提示。所以需要进入设置里面动态唤醒那个开发模式的activity才可以。
MtkSettings / src/com/android/settings/SettingsActivity.java
里面
somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
Settings.DevelopmentSettingsDashboardActivity.class.getName()),
- showDev, isAdmin)
showDev变成true就行
另外一种开启开发者选项菜单的,需要在framework层改,不过这样刚开始点击通知提示请先开启开发者模式,到了设置里面的系统看到开发者模式了,或者是到关于手机里面看到版本号了,就可以点击通知进入usb调试模式了。所以也不能在这改,这也只是改了开发者选项菜单,且不需要按版本号了而已
最简单的方法是vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/SystemUIApplication.java还是在这,
多加一个
Settings.Global.putInt(getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
这句话就是下面这个方法的意思,效果一样
override/frameworks/base/packages/SettingsLib/src/com/android/settingslib/development/DevelopmentSettingsEnabler.java
里面有个静态方法public static boolean isDevelopmentSettingsEnabled(Context context) {
源码是返回return isAdmin && !hasRestriction && settingEnabled;
现在直接让他返回true就行。
源码主要是settingEnabled这个因素控制的,另外俩都是true
final boolean settingEnabled = Settings.Global.getInt(context.getContentResolver(),
Settings.Global.DEVELOPMENT_SETTINGS_ENABLED,
Build.TYPE.equals("eng") ? 1 : 0) != 0;
意思是如果是debug版本那就打开为true,不是就是false
所以debug版本是默认开启的