標籤:android blog http java 使用 os strong 檔案
Android自動打包流程詳細圖:
總結為以下幾個步驟:
1. 產生R檔案2. Java代碼編譯成class檔案3. class檔案產生dex檔案4. 打包資源5. 產生apk6. 建立密匙7. 簽名apk 下面用Ubuntu命令列來打包,流程如下:1. 產生R檔案,命令如下:aapt package -f -m -J $BUILD_SOURCE_PATH/$ANDROID_GEN \-A $BUILD_SOURCE_PATH/$PACKAGE_RESOURCE_FILE \-S $BUILD_SOURCE_PATH/$ANDROID_RESOURCE_DIRECTORY \-I $BUILD_API_LEVEL_JAR \-M $BUILD_SOURCE_PATH/$MANIFEST_FILE -f 如果編譯產生的檔案已經存在,強制覆蓋。
-m 使產生的包的目錄存放在-J參數指定的目錄
-J 指定產生的R.java 的輸出目錄路徑
-S 指定res檔案夾的路徑-I 指定某個版本平台的android.jar檔案的路徑-A 指定assert檔案夾的路徑 2.將Java代碼編譯成class檔案,命令列如下:javac -encoding UTF-8 \-target 1.7 \-bootclasspath $BUILD_API_LEVEL_JAR \-d $BUILD_SOURCE_PATH/$ANDROID_BIN/$ANDROID_BIN_CLASSES \$BUILD_SOURCE_PATH/$ANDROID_GEN/com/clarck/httpclientnew/R.java \$BUILD_SOURCE_PATH/src/com/clarck/httpclientnew/*.java -encoding <編碼> 指定編碼格式-target <版本> 產生特定 VM 版本的類檔案
-bootclasspath <路徑> 覆蓋引導類檔案的位置
-d <目錄> 指定存放產生的類檔案的位置
-sourcepath <路徑> 指定尋找輸入源檔案的位置 3. class檔案產生dex檔案,命令列如下:dx --dex --output=$BUILD_SOURCE_PATH/$ANDROID_BIN/$ANDROID_CLASSES_DEX \$BUILD_SOURCE_PATH/$ANDROID_BIN/$ANDROID_BIN_CLASSES --output=<要產生的classes.dex路徑> <要處理的class檔案的路徑> 4. 打包資源,命令列如下:aapt package -f -M $BUILD_SOURCE_PATH/$MANIFEST_FILE \-S $BUILD_SOURCE_PATH/$ANDROID_RESOURCE_DIRECTORY \-A $BUILD_SOURCE_PATH/$PACKAGE_RESOURCE_FILE \-I $BUILD_API_LEVEL_JAR \-F $BUILD_SOURCE_PATH/$ANDROID_BIN/byreadreader -f 如果編譯產生的檔案已經存在,強制覆蓋
-M 指定AndroidManifest.xml的路徑
-S 指定res檔案夾路徑-I 指定某個版本平台的android.jar的路徑-F 指定輸出檔案完整路徑 5. 產生apk,命令列如下:apkbuilder $BUILD_APK_PATH/$BUILD_APK_NAME \-v -u -z $BUILD_SOURCE_PATH/$ANDROID_BIN/byreadreader \-f $BUILD_SOURCE_PATH/$ANDROID_BIN/$ANDROID_CLASSES_DEX \-rf $BUILD_SOURCE_PATH/$ANDROID_SRC -v Verbose 顯示過程資訊
-u 建立一個無簽名的包
-z 指定apk資源路徑
-f 指定dex檔案路徑-rf 指定源碼路徑 6. 建立密匙,命令列如下:keytool -genkey -alias release -keyalg RSA -validity 20000 -keystore release.keystore -genkey 在使用者主目錄中建立一個預設檔案".keystore",還會產生一個mykey的別名,mykey中包含使用者的公開金鑰、私密金鑰和認證
-alias 產生別名
-keyalg 指定密鑰的演算法
-validity 指定建立的認證有效期間多少天
-keystore 指定密鑰庫的名稱(產生的各類資訊將不在.keystore檔案中) 7. 簽名apk,命令列如下:jarsigner -verbose -keystore release.keystore -storepass [email protected]#$%^ -keypass [email protected]#$%^ -signedjar $BUILD_APK_PATH/$BUILD_RELEASE_APK_NAME $BUILD_APK_PATH/$BUILD_APK_NAME release -verbose 簽名/驗證時輸出詳細資料
-keystore 密鑰庫位置
-storepass 用於密鑰庫完整性的口令
-keypass 專用密鑰的口令(如果不同)
-signedjar 已簽名的 JAR 檔案的名稱 (第一個apk是簽名之後的檔案, 第二個apk是需要簽名的檔案) 註:關於混淆代碼,只需要在project.properties中指定用來混淆的.pro檔案即可。
以上命令可以綜合使用一個shell指令碼來執行,具體demo詳見:https://github.com/clarck/CommandAutoBuild