繼 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對齊問題,其實這個問題很容易解決的.