push系统apk后,找不到新加的Service,手动调用start service后,一直提示找不到对应的service
Intent intent2 = new Intent();
ComponentName componentName2 = new ComponentName(SERVICE_PACKAGE_NAME, CAST_SERVICE_CLASS_NAME);
intent2.setComponent(componentName2);
Log.d(TAG, "start "+CAST_SERVICE_CLASS_NAME);
mContext.startService(intent2);
adb push xxx.apk /system/app/xxx
重启设备后,系统如下提示
2024-01-01 08:00:15.341 950-2206 ActivityManager system_server W Unable to start service Intent { cmp=com.xxx.xxx/.cast.xxx} U=0: not found
然后将apk pull出来,反编译检查在AndroidManifest中是否有新加的service声明,发现都是正常的,并且新修改的代码都是生效的,但是就是新加的service就是找不到,无论是apk内部调用还是外部启动。
怀疑跟缓存没有清理有关,找到了几处缓存,都没有用
adb shell "rm -rf /data/dalvik-cache/arm64/system@app@xxx@xxx.apk@classes.dex"
adb shell "rm -rf /data/dalvik-cache/arm64/system@app@xxx@xxx.apk@classes.vdex"
最终发现,问题原因是在push apk跟install apk的流程区别
adb push
-
安装逻辑:纯粹文件拷贝,把 APK 放到指定目录,比如
/system/app/YourApp/YourApp.apk或/system/priv-app/YourApp/YourApp.apk。 -
生效条件:
-
需要重启或者至少
pm install -r <apk路径>/pm scan触发 PackageManager 重新扫描 system 分区,才能识别出这个APK。 -
或者直接删掉
/data/system/package_cache,再重启。
-
-
常见问题:
-
如果直接 push 覆盖旧的 system APK,不重启是不会立刻生效的。
-
如果 push 进去了,但是
pm扫描时签名和原来不一致,会导致INSTALL_FAILED_UPDATE_INCOMPATIBLE或直接不加载。 -
系统分区一般只读,需要
adb remount才能写。
-
手动删除/data/system/package_cache缓存,重启,Service正常启动了
779

被折叠的 条评论
为什么被折叠?



