zoukankan      html  css  js  c++  java
  • [原] 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
  • 相关阅读:
    PHP 去除HTML标签 HTML实体转字符 br转
    PHP while使用
    js滚动条滚动到某个元素位置
    js按键监听
    用onerror处理图片获取失败问题
    windows 查看端口占用以及关闭该进程
    js获取当前时间戳 不需毫秒数
    escape,encodeURI,encodeURIComponent的区别
    php 获取中文长度 截取中文字符串
    将时间转换为xxx天前 xxx..前
  • 原文地址:https://www.cnblogs.com/tanlon/p/3866327.html
Copyright © 2011-2022 走看看