开机默认usb debug 调试,且不弹窗自动确认选择。默认开启开发者模式(不是仅仅开启开发者菜单)。

总结下这个默认开启开发者模式问题就是,

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版本是默认开启的

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Youth King

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值