手机system目录下有两个文件夹:app和priv-app,手机被root后,通过adb push可以把apk推到这两个目录,作为系统apk用户无法删除。
它们的区别在于,priv-app中的service是不能被kill掉的,就算通过adb kill掉后系统会重新拉起:
图片太小,看不清楚,就是:
Line 14879: 09-28 10:07:06.352 1624 2165 W ActivityManager: Scheduling restart of crashed service com.xxx.xxx/.xxx.xxxin 1000ms
Line 14907: 09-28 10:07:06.366 1624 2165 I ActivityManager: Start proc 5588:com.xxx.xxx/u0a96 for restart com.xxx.xxx
好处是app可以保活,并且能拿到最多的权限;坏处就是,无法正常升级,因为一被kill马上又被拉起来,并且升级完成后,再起来的还是旧版本的service。
为这事研究了两天,我们的app要预装到终端手机,需要保活,并且尽量减少终端厂商的工作量,如果能解决升级的问题,对于终端厂商来说就只需要把应用push到priv-app下就可以了。然而,没有找到解决升级的办法,最终采用的方案是push到system/app,系统通过一个service(如phone)来bind我们的service,一旦disconnect之后再来bind,实现保活。