安卓/aosp14上userdebug版本无法进行as调试debug问题

356 阅读2分钟

背景:

有学员反馈在aosp14上面发现as的debug展示进程是空的,但是在之前的aosp13是好的,具体如下图所示: 自己实体机刷aosp14的 在这里插入图片描述

因为马哥这边暂时没有拿实体机去进行测试,一直也没有注意是否有这个问题,但是在模拟器上测试确实是好的,是可以展示出来的相关的java进程。 在这里插入图片描述 即总结一下相关问题情况: as展示的debug进程列表显示 aosp13手机上 正常展示 aosp13模拟器 正常展示 aosp14手机上 无法展示

aosp14模拟器 正常展示

那么其实疑问就有两个就是13升级14以后手机为啥没有了,还有就是为啥模拟器就可以有。

解决方法:

先直接上解决方法后面再解释原理:

方法1

执行setprop persist.debug.dalvik.vm.jdwp.enabled 1

test@test:~/disk2/aosp14$ adb shell setprop persist.debug.dalvik.vm.jdwp.enabled 1
test@test:~/disk2/aosp14$ adb reboot

重启后查看: 在这里插入图片描述

方法2

直接修改ENABLE_JDWP变量一直为true,这样就不需要考虑对应属性的值,恢复成和aosp13一样

在这里插入图片描述

原理解释疑问解答:

为啥aosp13上面可以,aosp14不可以,还有为啥aosp14的模拟器可以?下面对这些问题一一会进行解释。 在aosp14上面多了一个变量ENABLE_JDWP(稍后解释JDWP啥意思) 这个变量就是靠属性persist.debug.dalvik.vm.jdwp.enabled来控制true or false 在这里插入图片描述注意啦,这个就是为啥aosp13上没有问题,14有问题原因,疑问这个ENABLE_JDWP变量属于新加入的,在13代码上并没有

确实属于google新加入的: 在这里插入图片描述

那么为啥14的模拟器又可以呢? 这个就需要进一步看看,难道是14模拟器目标默认编译persist.debug.dalvik.vm.jdwp.enabled就是为1? 模拟器其实并不是persist.debug.dalvik.vm.jdwp.enabled控制的,哪怕模拟器上这个属性设置0,也一样是可以见到debug的所有进程。

在这里插入图片描述

那这个是为啥?哈哈这个答案需要继续看源码如下:

在这里插入图片描述

可以看到有两个条件判断而且是或关系 ,Build.IS_ENG 或者(Build.IS_USERDEBUG && ENABLE_JDWP)任意为true都可以进入 在这里插入图片描述 那这里其实就比较明白了,模拟器如果是eng版本,那么就肯定可以进入,手机一般是userdebug版本 验证一下是否模拟器为eng版本: 在这里插入图片描述 确实看到是eng 再看看手机是不是userdebug: 在这里插入图片描述

好的上面就解释了为啥aosp14上模拟器和手机不同差异 补充一点jdwq是啥? 可以参考这里: baike.baidu.com/item/JDWP/8…

其实就是Java 调试线协议(JDWP)

本文章更多详细代码和资料 hal+perfetto+surfaceflinger mp.weixin.qq.com/s/LbVLnu1ud… 在这里插入图片描述

私聊作者+v(androidframework007)

其他课程七件套专题:在这里插入图片描述 点击这里 mp.weixin.qq.com/s/Qv8zjgQ0C…

视频试看: www.bilibili.com/video/BV1wc…