環境
1.JDK
2.SDK
3.Gradle
本文主要是不需要通過 AndroidStudio 完整編譯打包簽名生成apk的過程,可以通過sdk中的apksigner工具完成,也在和使用Gradle來完成。
首先使用 keytool 生成一個私鑰,keytool 位於 JDK 中的 bin/ 目錄中,開啟命令列輸入:
keytool -genkey -v -keystore ruomiz-release-key.jks
-keyalg RSA -keysize 2048 -validity 10000 -alias ruomiz
會在當前目錄生成一個ruomiz-release-key.jks的檔案 採用的RSA非對稱加密,標誌名為 my-alias,有效期為10000天。複製程式碼
構建並簽署APK
命令列形式
1.構建apk
開啟命令列,切換到專案根目錄,或者在專案根目錄下開啟命令列
gradlew assembleRelease
//gradlew assembleDebug 構建除錯的APK複製程式碼
執行完成後會在 module 的 build/outputs/apk 中建立一個未簽名的 apk。這個 apk 暫未簽名,需要用私鑰簽名。
2.對齊未簽署的APK
使用 zipalign 對齊 APK,在 sdk 的 build-tools 下面,需要把上面生成的 APK 拷貝進去:
zipalign -v -p 4 app-release-unsigned.apk app-release-unsigned-aligned.apk複製程式碼
為了方便檢視我將 APK 改了名字
執行成功以後會生成一個對齊的 APK
3.使用私鑰簽署 APK
apksigner 和 zipalign 都在 sdk 的 build-tools 目錄下,將 keytools 生成的簽名檔案( jks 檔案)拷貝進來:
apksigner sign --ks ruomiz-release-key.jks --out ruomiz-app-release.apk ziptest-release-unsigned-aligned.apk複製程式碼
最後會生成一個 ruomiz-app-release.apk 檔案
可以驗證apk是否簽署成功:
apksigner verify ruomiz-app-release.apk複製程式碼
按照上述步驟已經生成簽名的APK。
Gradle簽署 APK
首先需要配置jks的簽名檔案,然後將生成的簽名檔案(jks)拷貝到專案 module下
在專案模組 build.gradle 下新增
android {
...
defaultConfig { ... }
signingConfigs {
release {
storeFile file("生成的簽名檔案.jks")
storePassword "金鑰庫密碼"
keyAlias "金鑰標誌名"
keyPassword "金鑰密碼"
}
}
buildTypes {
release {
signingConfig signingConfigs.release
...
}
}
}複製程式碼
簽名檔案需要和build.gradle檔案在同一目錄。
編譯
進入專案所在根目錄shift+滑鼠右鍵 ,以命令列形式開啟,執行:
gradlew assembleRelease複製程式碼
將會在專案 module 的 build/outputs/apk/ 中生成一個 app-release.apk (module_name-release.apk)的 APK。這個 APK 檔案已經使用 build.gradle 檔案中指定的私鑰簽署和對齊。
驗證:
可以將生成的 APK 解壓 然後 META-INF 中 有 CERT.RSA 檔案,命令列切換目錄到解壓目錄,執行:
keytool -printcert -file META-INF/CERT.RSA複製程式碼
會出現jks的簽名資訊