banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

Android開發之使用Ant命令行編譯和APK簽名

最近在做 Android 開發時,需要引用第三方的代碼進項目,一般情況下,直接在 Eclipse 下設置需要導入的代碼的編譯輸出為 library 即可,但是很多代碼在 Eclipse 下編譯會出現很多莫名其妙的錯誤。因而只能使用命令行方式對代碼進行編譯。具體方法如下:

1. 安裝編譯用的 Java,安裝 Android Platform-tools,安裝 Ant,設置好各種環境變量。部分 Linux 下 Ant 已經默認集成,Windows 下需要自行安裝。 2. 使用 Android 工具更新代碼的編譯配置。 3. 使用 Ant 工具進行編譯,可編譯 Debug 版和 Release 版本。 4. 生成代碼簽名用的私鑰,並對 APK 進行簽名。 5. 對 APK 文件進行對齊,對大文件 APK 有不錯的效果。

以下是參考 Bash 代碼,可自己需要更改,執行時,sudo bash XXX.sh 即可

# 設置 Java Home
JAVA_HOME = "/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home"

設置 android Home#

ANDROID_HOME="~/android-sdk-macosx"

設置 path#

PATH = "$ANDROID_HOME/tools:$JAVA_HOME/bin:$PATH"

更新當前項目#

android update project --path .
#android update project --path ./Library/lib1
#android update project --path ./Library/lib2

刪除 keystore#

rm -f product.keystore

生成 keystone#

keytool -genkey -alias product.keystore -keyalg RSA -validity 40000 \
-keystore product.keystore -storepass password -keypass password \
-dname "CN=Product OU=Android Team O=Organization L=Hongkong ST=Hongkong C=China"

清理#

ant clean

刪除 ant.properties#

rm -f ant.properties

生成 ant.properties#

echo "key.store=product.keystore" > ant.properties
echo "key.alias=product.keystore" >> ant.properties

構建 apk#

ant release

簽名 APK#

jarsigner -verbose -keystore product.keystore -signedjar \#

bin/product_signed.apk bin/product-release-unsigned.apk product.keystore#

對 APK 文件進行對齊#

zipalign -v 4 bin/product_signed.apk bin/product_final.apk#

說明: 更新 Android 的 ant 編譯配置,如果代碼的結構變更,請執行,如果代碼中包含引用的第三方庫代碼,需要分別對這些代碼進行更新。

# 更新當前項目
android update project --path .
#android update project --path ./Library/lib1
#android update project --path ./Library/lib2

生成簽名用的 Keystore 文件,幾個參數的說明 -genkey 生成秘鑰證書 -alias 別名 -keyalg 秘鑰的計算算法 -validity 有效期 -keystore 秘鑰庫文件路徑 -storepass 秘鑰庫密碼 -keypass 秘鑰證書密碼 -dname 發行者信息 CN= 發行者姓名 (個人姓名或產品名) OU= 組織單元名 (團隊名) O= 組織機構名 (公司名) L= 城市 / 地區 ST= 州 / 省 C= 國家代碼

# 生成 keystone
keytool -genkey -alias product.keystore -keyalg RSA -validity 40000 \
-keystore product.keystore -storepass password -keypass password \
-dname "CN=Product OU=Android Team O=Organization L=Hongkong ST=Hongkong C=cn"

生成 ant 自動編譯用的 ant.properties 文件,設置 key.store 和 key.alias 兩個變量後,ant release 時會自動對生成的 APK 簽名和對齊

echo "key.store=product.keystore" > ant.properties
echo "key.alias=product.keystore" >> ant.properties

手動對代碼簽名,幾個參數的說明 -verbose 顯示輸出 -keystore keystore 別名 -signedjar 簽名 apk 文件,第一個參數為目標文件,第二個為未簽名 apk

# 簽名 APK
jarsigner -verbose -keystore product.keystore -signedjar bin/product_signed.apk bin/product-release-unsigned.apk product.keystore

手動對 APK 進行對齊

# 對 APK 文件進行對齊
zipalign -v 4 bin/product_signed.apk bin/product_final.apk

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。