android app执行shell命令视频课程补充android 10/11适配-千里马android

(https://blog.csdn.net/learnframework/article/details/120103471)
https://blog.csdn.net/learnframework/article/details/120103471
hi,有学员在学习跨进程通信专题课程时候,在实战app执行一个shell命令的项目时候,对课程本身的android 8.1平台没有什么问题,但是学员想要自己适配到android 11上,估计也是目前最新的android版本,因为普遍android S厂商都还没有发布,因为android 的大版本升级适配本身工作也不小,这里就对android app执行shell命令这一部分进行一个升级适配的补充,尽量让买课的学员可以直接用于最新的android版本。
原来课程的项目实现思路等可以看如下blog
Socket让app实现shell命令行执行 https://blog.csdn.net/learnframework/article/details/119965296
具体项目代码和详细视频讲解可以购买我的相关视频
android跨进程通信实战视频课程(一定加群422901085获取优惠)
好了进入正题,主要分为以下几个步骤:

1、编译课程的源码rootServer时候会编译报错,这里的编译报错原因主要是因为android 8.1编译时候不会把定义了但是没有使用的变量认为是错误,但是在android 10/11上就是错误,这个大家直接把提示相关unused变量删除就可以

请添加图片描述

2、adbd中加入了StartSubprocess方法启动rootServer已经不生效了,因为android 10/11上对这个方法进行更新,继续直接使用无法在adbd拉起rootServer,所以这里采用了临时替代方案:
在这里插入图片描述
用截图几句替代原来的StartSubprocess既可以启动rootServer

3.第三方app无法与shell进程进行连接,会报错Permission Denied,这个其实是因为selinux权限的加强,让普通第三方app无法与shell进程进行一个socket通信:
在这里插入图片描述
解决方案:只能使用配置增加selinux权限,在对应的system/sepolicy/private/untrusted_app_27.te修改如下
在这里插入图片描述
4.adbd无法自启动
这个本身就是留给学员自己完成作业,大概思路有以下几个:
1、让用户自己去设置中开启adb调试开关就可以启动adbd
2、在system/core/init/rootdir/init.usb.rc修改启动adbd,同时也要禁止关闭adbd,学员也提出这个,进行验证也可行,但是可能不能关闭adbd
在这里插入图片描述

3、自己去init相应任何地方startService就可以,可以参考:
https://blog.csdn.net/learnframework/article/details/116719986

4、注意stop adbd会导致rootServer停止,因为stop时候会对adbd的所有子进程都进行kill,也就能理解为什么设置中关闭一下调试就会导致电脑的cmd也退出,logcat也无法抓了

csdn在线学习课程,课程咨询答疑和新课信息:QQ交流群:422901085进行课程讨论

[千里马Android Framework实战开发-跨进程通信专题博客总结]

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>