[原] Android自动打包之命令行打包

时间:2024-11-24 11:37:38

Android自动打包流程详细图:[原] Android自动打包之命令行打包

总结为以下几个步骤:

1. 生成R文件
2. Java代码编译成class文件
3. class文件生成dex文件
4. 打包资源
5. 生成apk
6. 创建密匙
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 !@#$%^ -keypass !@#$%^ -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