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

[原] Android自动打包之命令行打包的更多相关文章

  1. android 7.0 多渠道打包 - 美团开源工具Walle 命令行打包

    在Android 7.0(Nougat)推出了新的应用签名方案APK Signature Scheme v2后,之前快速生成渠道包的方式(美团Android自动化之旅-生成渠道包)已经行不通了,对此美 ...

  2. mac下使用命令行打包出现bash gradle command not found的解决方案

    命令行打包的时候出现 bash gradle command not found这个问题,主要是因为gradle环境丢失.需要重新配置gradle的环境变量. 1. gradle路径的查找 然后gra ...

  3. Android 使用Android Studio + Gradle 或 命令行 进行apk签名打包

    官方文档:https://developer.Android.com/tools/publishing/app-signing.html 1. 默认为debug mode,使用的签名文件在: $HOM ...

  4. Android 命令行打包和签名

    使用命令行方式进行签名需要JDK中的两个命令行工具:keytool.exe和jarsigner.exe.可按如下两步对apk文件进行签名: 1. # keytool -genkey -v -keyst ...

  5. 两分钟学会Android平台NDK编程(无须Eclipse和cygwin,可使用命令行打包多个so)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wangbin_jxust/article/details/37389383 之前在进行cocos2d ...

  6. 【ASP.NET】利用Nuget打包package——命令行方式

    通过命令行 官方说明,可以参考:creating-and-publishing-a-package 如果你希望可以使用图形界面的方式,请参考这篇文章   打包dll   使用如下的命令: nuget  ...

  7. Unity命令行打包

    http://www.66acg.com/?post=137 补充 unity编辑器端获取打包命令行自定义参数,这个可以获取到所有打包时的参数 string[] runArgs = System.En ...

  8. xcodebuild命令行打包发布ipa

    配置好证书,然后在命令行转到项目目录 1.清除 EthantekiiMac:CTest ethan$ xcodebuild clean 2.编译 EthantekiiMac:CTest ethan$ ...

  9. 使用命令行打包 nuget 包

    对于那些不打算涉及这么复杂而又想制作自己的 nuget 包的园友们,我是推荐使用 Nuget Package Explorer 来制作的.关于这个图形化的 nuget 包管理软件的使用,博客园内有相关 ...

随机推荐

  1. 关于抓取js加载出来的内容抓取

    一.抓取页面 url=https://www.xuexi.cn/f997e76a890b0e5a053c57b19f468436/018d244441062d8916dd472a4c6a0a0b.ht ...

  2. 联想g400怎么进bios设置u盘启动图文教程

    联想g400怎么进bios设置u盘启动图文教程 转自http://www.kqidong.com/bios/3940.html 虽然成功学会u盘装系统的人很多,但是设置u盘启动在小白们的眼中却没有那么 ...

  3. 第四次 Scrum Meeting

    第四次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/4/8 22:00 30min 大运村1号楼3F 附Github仓库:WEDO 例会照片 工作情况总结(4.8) ...

  4. Excel自定义函数开发手记

    目录 本文使用的版本:Excel 2013 1.打开脚本编辑框 2.插入模块,编写代码 3.测试所写代码是否正确 4.给Excel单元插入自定义函数 5.给函数增加自定义说明 6.设置该自定义函数在E ...

  5. Js简易代码生成工具

    代码 javascript:(function(){ document.body.innerHTML = '<textarea id="txtTemplate" style= ...

  6. TOJ 3184 Mine sweeping

    描述 I think most of you are using system named of xp or vista or win7.And these system is consist of ...

  7. hrb——开锁魔法I——————【规律】

    解题思路:从1到n的倒数之和. #include<stdio.h> #include<string.h> #include<algorithm> using nam ...

  8. 《Python编程从入门到实践》_第二章_变量和简单数据类型

    什么是变量 举例: >>> message = "Hello,Python!" >>> print (message) Hello,Python ...

  9. python之高阶函数map/reduce

    L = [] for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]: L.append(f(n)) print(L) Python内建了map()和reduce()函数. 我们先看 ...

  10. python30题

    1.执行Python 脚本的两种方式 使用python解释器(python aa.py)或在unix系统下赋值成777,执行(./aa.py) 2.简述位.字节的关系 1个byte = 8bit,在A ...