调查PKMS无法扫描系统apk问题
1 问题背景
车机助手供应商提供的源码编译出来的apk,因为需要安装到/system/app目录下,所以采用的是直接push的方式将安装包打入系统。但是通过这样的方式重启之后,应用修改无法生效。
2 调查过程
2.1 确认包安装目录
安装目录不对,应该push到/system/app/<模块名>/目录下。
push正确了,重启还是没有生效
2.2 确认包是否push进来
因为当前车机默认取消了root权限,默认system分区是只读的。可能没有adb root;adb remount;导致push失败。
确认push进去的包md5值。
确认了md5是正确的,是最新打包的apk。
重启之后,桌面还是没有图标。
2.3 确认修改的代码是否编入dex
使用dex2jar工具反编译dex文件,使用jd-gui看代码是否已经编入。
经过确认代码是已经编入了。
2.4 确认图标是否被隐藏
SystemUI的All menu功能不会将所有应用图标显示出来。经确认,默认显示的图片已经配置了。
2.5 通过指令拉应用
1 | am start -n com.gaci.ivi.ids/com.gaci.ivi.ids.ui.MainActivity |
找不到启动界面,初步怀疑是不是包没有扫描到。
2.6 确认PMKS是否扫描到包
1 | pm path com.gaci.ivi.ids |
发现没有找到包。问题初步定位为PKMS没有找到apk包。
2.7 确认应用包是正常的
因为有一些应用是资源包,可能没有dex文件,之前出现过此类情况,就是apk里面没有dex文件,导致PKMS扫描包无法执行。
分析问题
PKMS在构造方法中会对system/app
目录下的所有apk文件进行扫描,上面7步都已经确认了APK包是正常的。因为我相信PKMS一定对该包进行了扫描,但是为什么没有生成Package对象呢。
怀疑车机助手使用了android:sharedUserId="android.uid.system"
是系统应用,是否是签名问题,导致系统认为该APK是非法apk,没有加载。
查看车机助手签名如下:
总结:问题终于发现了,就是签名问题!!!重新对应用签名,再验证就通过了
此文章版权归Jack Ou所有,如有转载,请註明来自原作者