安卓/aosp14上userdebug版本无法进行as调试debug问题
千里马学框架
编辑于 2024年03月21日 17:13

背景:

有学员反馈在aosp14上面发现as的debug展示进程是空的,但是在之前的aosp13是好的,具体如下图所示: 

自己实体机刷aosp14的

因为马哥这边暂时没有拿实体机去进行测试,一直也没有注意是否有这个问题,但是在模拟器上测试确实是好的,是可以展示出来的相关的java进程。

即总结一下相关问题情况: 

as展示的debug进程列表显示

aosp13手机上          正常展示 

aosp13模拟器          正常展示

aosp14手机上          无法展示

aosp14模拟器       正常展示

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

解决方法:

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

方法1

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

重启后查看:

方法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是啥?

可以参考这里:https://baike.baidu.com/item/JDWP/8858707?fr=ge_ala

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

本文章更多详细代码和资料需要购买课程获取 hal+perfetto+surfaceflingerhttps://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg

私聊作者+v(androidframework007)

其他课程七件套专题:

点击这里 https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw

视频试看:网页链接​