由於是先寫的word文檔,所以排版不好,看不清的朋友可以直接下載附件裏的doc。
有些網上的流程寫的不全,所以做的時候出現許多問題,最後總結出了一套比較全面的流程,希望對大家有幫助!
Android命令行打包流程
流程圖:
---------------------------------------------------------------------------
說明:
1.$AndroidSDK對應sdk路徑
2.$AndroidProject對應 需打包的項目路徑
3.android-X,X爲sdk版本號,如2.2對應8,可在default.properties中查到當前版本號
注意:所有命令均在$AndroidProject路徑下執行
參考:
http://www.189works.com/article-38119-1.html
http://www.cnblogs.com/jk1001/archive/2010/08/05/1793216.html
<!--[if !supportLists]-->1. <!--[endif]-->使用aapt生成R.java類文件
$AndroidSDK\platform-tools\aapt package -f -m -J gen -S res -I $AndroidSDK\platforms\android-X\android.jar -M AndroidManifest.xml
注:需要進入$AndroidProject應用程序目錄執行,否則會 找不到文件的錯誤(ERROR: resource directory 'res' does not exist)!
<!--[if !supportLists]-->2. <!--[endif]-->編譯.java類文件生成class文件
javac -encoding UTF-8 -target 1.5 -bootclasspath $AndroidSDK\platforms\android-X\android.jar -d bin src\*.java gen\cn\talico\ereader\R.java gen\org\geometerplus\android\fbreader\api\ApiInterface.java gen\org\geometerplus\android\fbreader\network\BookDownloaderInterface.java -classpath $AndroidProject\libs\$JarName.jar
注:src\*.java要替換爲取所有子目錄java文件的命令
-classpath後接引用的jar包 注意多個jar包用;分割
<!--[if !supportLists]-->3. <!--[endif]-->使用Android SDK提供的dx.bat命令行腳本生成classes.dex文件
$AndroidSDK\platform-tools\dx --dex --output=$AndroidProject\bin\classes.dex $AndroidProject\bin
<!--[if !supportLists]-->4. <!--[endif]-->再次使用Android SDK提供的aapt.exe生成資源包文件(包括res、assets、androidmanifest.xml等)輸出到bin目錄下的temp.ap_
$AndroidSDK\platform-tools\aapt package -f -M AndroidManifest.xml -S res -A assets -I $AndroidSDK\platforms\android-X\android.jar -F bin\temp.ap_
注:temp.ap_爲生成的臨時資源文件,名字與下一步一致
<!--[if !supportLists]-->5. <!--[endif]-->利用AndroidSDK提供的apkbuilder工具生成未簽名的APK文件
$AndroidSDK\tools\apkbuilder $AndroidProject\bin\$ProjectName.apk -v -u -z $AndroidProject\bin\temp.ap_ -f $AndroidProject\bin\classes.dex -rf $AndroidProject\src -nf $AndroidProject\libs -rj $AndroidProject\libs -d
注:$ProjectName.apk爲生成的apk的名字
<!--[if !supportLists]-->6. <!--[endif]-->利用JAVASDK提供的keytools工具生成證書文件
keytool -genkey -alias ${alias}-keyalg RSA -validity ${validity} -keystore ${keystore} –dname "CN=${CN},OU=${OU},O=${O},L=${L},ST=${ST},C=${C}" -keypass ${ keypass } -storepass ${storepass}
注:
${alias}生成的keystore別名
${validity}證書文件有效時間,單位年
${keystore}生成證書的名稱,一般等於${alias}即可
${CN}爲名字 姓氏
${OU}爲單位
${O}爲組織
${L}城市 區域
${ST}省 洲
${C}兩字母國家代碼
${ keypass }密碼
${storepass}證書密碼 一般等於${ keypass }即可
例如:keytool -genkey -alias HelloWorld.keystore -keyalg RSA -validity 1000 -keystore HelloWorld.keystore -dname "CN=w,OU=w,O=localhost,L=w,ST=w,C=CN" -keypass 123456 -storepass 123456
<!--[if !supportLists]-->7. <!--[endif]-->最後一步,通過jarsigner命令用證書文件對未簽名的APK文件進行簽名
jarsigner -keystore ${keystore} -storepass ${storepass} -keypass ${keypass} -signedjar ${signed.apkfile} ${unsigned.apkfile} ${keyalias}
注:
${signed.apkfile}爲簽名後生成的apk
${unsigned.apkfile}爲之前生成的未簽名的apk路徑
例如:
jarsigner -keystore HelloWorld.keystore -storepass 123456 -keypass 123456 -signedjar b2.apk bin\a1.apk HelloWorld.keystore
-----------------------------------------------------------------------------------------------------------------