Android app 的打包流程大致分為build,align,sign三部分。
build
build是構建 APK 的過程,分為 debug 和 release 兩種。release 是發布到應用商店的版本。
cordova build android
如果成功的話,你可以在你項目下的 /android/app/build/outputs/apk/debug 目錄下看到一個app-debug.apk的文件。
cordova build android --release
如果成功,你可以在你項目下的 /android/app/build/outputs/apk/release/ 目錄下看到一個android-release-.apk的文件。
align
我們可以使用工具對安裝包進行對齊優化,這樣能夠讓應用程序和整個系統運行得更快。使用了4字節的邊界對齊方式來影射內存,通過空間換時間的方式提高執行效率。
執行命令:
zipalign -f -v 4 app-release-unsigned.apk sunfoundercontroller-align.apk
參數作用
-f
代表覆蓋存在的輸出文件
-v
代表詳細輸出
代表對齊為4個字節
app-release-.apk
需要優化的APK
-align.apk
優化后的APK
zipalign -c -v 4 被檢查的apk文件
注意:可以在V1簽名后執行,但不能在V2簽名后執行,只能在V2簽名之前執行!!!
sign
簽名之前你得有一個數字簽名文件( .),打包升級要用回之前發布的秘鑰,之后借助簽名工具或簽名。
是JDK提供的針對jar包簽名的通用工具,位于JDK/bin/.exe
jarsigner -verbose -keystore D:\stjc\sunfounderControllerPrivatekey\mydemo.keystore -signedjar D:\stjc\sunfounderControllerPrivatekey\apk\sunfoundercontroller-release.apk D:\stjc\sunfounderControllerPrivatekey\apk\app-release-unsigned.apk mydemo.keystore
參數作用
-verbose[:]
簽名/驗證時輸出詳細信息。子選項可以是 all, grouped 或 summary
-
密鑰庫位置
-
已簽名的 JAR 文件的名稱
jarsigner -verify my_application_signed.apk
是Google官方提供的針對Android apk簽名及驗證的專用工具,位于Android SDK/build-tools/SDK版本/.bat
從Android 7.0開始, 谷歌增加新簽名方案 V2 Scheme (APK );但Android 7.0以下版本, 只能用舊簽名方案 V1 scheme (JAR signing)。
V2簽名:來自Google(), 對zip壓縮包的整個文件驗證, 簽名后不能修改壓縮包(包括),對V2簽名的apk解壓,沒有發現簽名文件,重新壓縮后V2簽名就失效, 由此可知: V2簽名是對整個APK簽名驗證。
V2簽名優點很明顯:
①簽名更安全(不能修改壓縮包)
②簽名驗證時間更短(不需要解壓驗證),因而安裝速度加快
注意: 工具默認同時使用V1和V2簽名,以兼容Android 7.0以下版本
apksigner sign --ks mydemo.keystore --ks-key-alias mydemo.keystore --v1-signing-enabled true --v2-signing-enabled true sunfoundercontroller-align.apk
參數作用
--ks
簽名者的私鑰和證書鏈包含在給定的基于 Java 的密鑰庫文件中。如果文件名設為"NONE",則包含密鑰和證書的密鑰庫不需要指定文件,某些 PKCS#11 密鑰庫就是這種情況。
--ks-key-alias alias
表示簽名者在密鑰庫中的私鑰和證書數據的別名的名稱。如果與簽名者關聯的密鑰庫包含多個密鑰,則必須指定此選項。
--v1-signing-enabled true/false
表示簽名者在密鑰庫中的私鑰和證書數據的別名的名稱。如果與簽名者關聯的密鑰庫包含多個密鑰,則必須指定此選項。
--v2-signing-enabled true/false
確定是否會使用 為給定的 APK 軟件包簽名。默認情況下,該工具會使用--min-sdk-version和--max-sdk-version的值來決定何時采用此簽名方案。
更多參數請參考:/studio/comm…
一些錯誤解析包時出現錯誤
(1)安卓apk程序解析包出現問題的話,可能是由于你下載的apk程序本身就有問題,程序的壓縮包可能在下載過程中被損壞了,建議請重新下載一次。
(2)如果重新下載也解決不了安卓解析包出現問題的話,很大一個可能就是在于你的手機的配置參數不支持這款軟件,舉個例子吧,如果一款apk程序的系統版本要求在安卓2.2以上,而你的手機則是安卓2.1系統,就會出現“解析包時出現問題”這樣的解析錯誤。
(3)apk版本不兼容。一般情況下當從網上下載的apk程序版本比當前設備的版本高時,就會在安裝程序時出現“解析包時出現錯誤”的警告。
(4)apk程序不完整。有些設備自帶的下載工具不具有斷點續傳功能,因而下載的程序可能發生下載不完全、程序部分先失等情況。對于這類問題,建議重新下載正版完整的安裝包文件。
(5)當前設備不支持中文名稱或路徑,不支持長文件名。解決辦法是將文件重命名,名稱只包含英文字母(但要注意".apk"的后輟名是要保留的),如更名為“abc.apk”等,更改完成后再次運動安裝程序。
如果是apk版本太高的話,修改一下/android/build.gradle文件下的