威盛平台的PackageInstaller问题总结

来源:互联网 发布:古希腊风化史淘宝 编辑:程序博客网 时间:2024/04/28 23:33

最近产品测试需要安装一个录音app,自带本地底层库。由于客户的要求,不希望修改system的东西,所以要做成一个第三方程序。

使用NDK编译了libs,将这些库打包进APK里有两种方法Android.mk和eclipse(接下来会转载相关文章),使用压缩文件管理器可以看见APK里已经打包了lib/armeabi/libxxx.so.


然后我很不好的习惯将它放入了/system/app下,程序运行时总是出错找不到so库,一查看 /data/data/包名/lib 下没有发现打包好的so库!

看了PackageManagerService.java才知道:

/* Note: We don't want to unpack the native binaries for
         *        system applications, unless they have been updated
         *        (the binaries are already under /system/lib).
         *        Also, don't unpack libs for apps on the external card
         *        since they should have their libraries in the ASEC
         *        container already.
         *
         *        In other words, we're going to unpack the binaries
         *        only for non-system apps and system app upgrades.
         */


还有几点tips:

1、在Manifest文件里面添加android:sharedUserId="android.uid.system"以及Android.mk里添加LOCAL_CERTIFICATE := platform。这样编译出来的apk和系统应用同一个进程ID,可以共享系统应用数据。

威盛平台签名:java -Xmx2048m -jar out/host/linux-x86/framework/signapk.jar -w build/target/product/security/testkey.x509.pem build/target/product/security/testkey.pk8  old.apk   new.apk

2、PackageManagerService.java的内部类AppDirObserver实现了监听app目录的功能:当把某个APK拖到app目录下时,可以直接调用scanPackageLI完成安装。 我们都是直接将app放到/system/app或/data/app下即可,系统会自动安装。使用adb install默认都是装到/data/app下的,SD卡里面的程序手动安装也是如此。

3、手机数据区目录“data/system/packages.xml”文件中,包含了手机上所有已安装应用的基本信息,如安装路径,申请的permission等信息。