標籤:android style color 使用 io ar 檔案 問題 sp
繼 Google I/O 宣布新系統 Android L 帶來 64 位元支援後,Android NDK 日前正式推出 Revision 10 更新,添加 ARM、x86 和 MISP 架構晶片的 64 位元 ABI 支援。
因而,全部ABI個數至少達到了8個.如果每個平台的連結庫大小達到10M,加起來就達到了80兆,如果直接安裝進手機,則會浪費手機的寶貴的儲存空間.當然,在雲時代,又有了一種方案,安裝後在從雲端下載,問題又來了,雲端下載下來需要流量或寬頻,同時還要對雲端進行維護,問題也不小.還有一種方案是,各平台獨立打包,獨立打包可以減少安裝包的體積,但是又會引發一個問題,發布的時候顯得混亂,管理上麻煩不斷.
有沒有更好的辦法?答案是有的,眾所周知,apk就是一個zip檔案,zip檔案可以包含一切檔案.就利用這點來解決.
在apk中,lib存成的各平台的動態連結程式庫,每個平台需且僅需一種.因此,lib中存成各平台的連結庫.我們僅需要多製作幾份簽名就可以了,這樣去簽名,有多少種類型的連結庫就製作多少份簽名,簽名時忽略其他平台的連結庫,然後產生META-INF檔案(.MF,.SF,.RAS).用連結庫所屬的目錄名命名其目錄,如armeabi.再將該目錄放在assets目錄下的META-INFS目錄裡.這樣和以往的APK相比,就多了這個目錄.
assets目錄
|--META-INFS
| |-- armeabi
| |--armeabi-v7a
| |--x86
.......
-----------------------------------------------
armeabi目錄
| |--MANIFEST.MF
| |--CERT.SF
| |--CERT.RSA
--------------------------
最後再使用簽名工具,對該安裝包簽名.
這樣,發布到渠道後,渠道可以將這個多平台的安裝包拆解,當使用者下載APK的某個平台時,後台可以直接將該平台的提取出來,拋棄不必要的,然後打包給使用者下載.當然這需要渠道,應用分發平台的支援才行.
如果使用者把全平台的都下載下來,也可以直接安裝全平台的安裝包,如果安裝器能識別出可以部分安裝的話,可以將該平台的提取出來,打包後安裝即可.
當然,裡面還有一個zip對齊問題,其實這個問題很容易解決的.
一種Android的多平台的安裝包打包方法探究