继 Google I/O 宣布新系统 Android L 带来 64 位支持后,Android NDK 日前正式推出 Revision 10 更新,添加 ARM、x86 和 MISP 架构芯片的 64 位 ABI 支持。 架构
于是,所有ABI个数至少达到了8个.若是每一个平台的连接库大小达到10M,加起来就达到了80兆,若是直接安装进手机,则会浪费手机的宝贵的存储空间.固然,在云时代,又有了一种方案,安装后在从云端下载,问题又来了,云端下载下来须要流量或宽带,同时还要对云端进行维护,问题也不小.还有一种方案是,各平台独立打包,独立打包能够减小安装包的体积,可是又会引起一个问题,发布的时候显得混乱,管理上麻烦不断. 工具
有没有更好的办法?答案是有的,众所周知,apk就是一个zip文件,zip文件能够包含一切文件.就利用这点来解决. spa
在apk中,lib存成的各平台的动态连接库,每一个平台需且仅需一种.所以,lib中存成各平台的连接库.咱们仅须要多制做几份签名就能够了,这样去签名,有多少种类型的连接库就制做多少份签名,签名时忽略其余平台的连接库,而后生成META-INF文件(.MF,.SF,.RAS).用连接库所属的目录名命名其目录,如armeabi.再将该目录放在assets目录下的META-INFS目录里.这样和以往的APK相比,就多了这个目录. ip
assets目录 io
|--META-INFS 后台
| |-- armeabi 打包
| |--armeabi-v7a 下载
| |--x86 命名
....... 文件
-----------------------------------------------
armeabi目录
| |--MANIFEST.MF
| |--CERT.SF
| |--CERT.RSA
--------------------------
最后再使用签名工具,对该安装包签名.
这样,发布到渠道后,渠道能够将这个多平台的安装包拆解,当用户下载APK的某个平台时,后台能够直接将该平台的提取出来,抛弃没必要要的,而后打包给用户下载.固然这须要渠道,应用分发平台的支持才行.
若是用户把全平台的都下载下来,也能够直接安装全平台的安装包,若是安装器能识别出能够部分安装的话,能够将该平台的提取出来,打包后安装便可.
固然,里面还有一个zip对齐问题,其实这个问题很容易解决的.