第三方apk、so库集成方法及常见问题

作为Android设备厂商,最常见的需求就是集成客户提供的各种软件。
最常见的软件就是apk。
集成apk的作用:放在system分区,普通用户无法卸载,核心应用如launcher、setting等,必须保证用户无法更改。
集成apk的步骤:
一般Android SDK源码都会有一个路径专门存放内置应用、so库及二进制可执行文件等。不同的芯片SDK,存放路径不一样。但原理大同小异,在编译时都会拷贝到out/target/product/****/system目录下,最后打包到固件中。
针对客户要求集成的某个apk,我们首先将apk放置在system/app路径下,此system/app路径为自定义路径或芯片商定义路径(如海思Hi3798MV100的内置应用路径在device/hisilicon/Hi3798MV100),非out/target/product/*****/system目录的路径。这一步完成后,我们再用解压工具看一下apk里面是否有lib文件夹,如果有,需要将lib文件夹里的so库提取出来,放置到system/lib里面,否则会出现apk运行时无法加载so的情况,常见现象有黑屏、无法播放视频等。放置完成后,编译时系统会自动将apk和so拷贝到out下并打包。但也有特殊情况,如mstar9380的sdk结构,不会自动拷贝,需要自己编辑mk文件,针对新加入的apk和so单独加入拷贝命令,才算完工。
我的建议是如果SDK本身没有自动拷贝的功能的话,可以自己另外建一个system文件夹,里面再新建app、lib、bin、media文件夹,并在编译脚本中加入将这个system文件夹拷贝到out目录的操作,方便维护。
以上为普通apk的集成步骤。
工作中还遇到某些apk,需要集成可执行文件如无后缀二进制文件或.sh脚本等,可执行文件一般由apk作者提供,这种情况再多一步放置可执行文件的步骤即可,一般集成路径为system/bin。

集成时的常见问题:
1.不同apk内的so文件名有冲突。这种情况,最好的办法是让冲突apk的提供方协议解决(但我工作中没遇到过能协调apk作者解决的)。从系统研发的角度,目前我是这么处理:将冲突应用放置到system/preinstall文件夹,第一次开机时通过install的方式安装这些应用到data/app分区。这样就不会冲突了。
具体的原理应该是apk加载so时,可能优先加载的system/lib里的so,如果没找到so则会去data下面找。
2.apk内的lib文件分为arm-v7a、arm-v8、x86等等,这种情况根据你的硬件型号,提取对应的so即可。
3.某些apk需要系统权限,一般由ROM作者经过系统签名后再集成。否则会出现apk无法运行的情况。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值