1 问题背景

车机助手供应商提供的源码编译出来的apk,因为需要安装到/system/app目录下,所以采用的是直接push的方式将安装包打入系统。但是通过这样的方式重启之后,应用修改无法生效。

2 调查过程

2.1 确认包安装目录

push路径.png

安装目录不对,应该push到/system/app/<模块名>/目录下。

push正确了,重启还是没有生效

2.2 确认包是否push进来

因为当前车机默认取消了root权限,默认system分区是只读的。可能没有adb root;adb remount;导致push失败。

确认push进去的包md5值。

md5.png

确认了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

找不到启动界面.png

找不到启动界面,初步怀疑是不是包没有扫描到。

2.6 确认PMKS是否扫描到包

1
pm path com.gaci.ivi.ids

发现没有找到包。问题初步定位为PKMS没有找到apk包。

2.7 确认应用包是正常的

因为有一些应用是资源包,可能没有dex文件,之前出现过此类情况,就是apk里面没有dex文件,导致PKMS扫描包无法执行。

apk包.png

分析问题

PKMS在构造方法中会对system/app目录下的所有apk文件进行扫描,上面7步都已经确认了APK包是正常的。因为我相信PKMS一定对该包进行了扫描,但是为什么没有生成Package对象呢。

怀疑车机助手使用了android:sharedUserId="android.uid.system"是系统应用,是否是签名问题,导致系统认为该APK是非法apk,没有加载。

查看车机助手签名如下:

签名.png

总结:问题终于发现了,就是签名问题!!!重新对应用签名,再验证就通过了