2022年App自动化之使用Ant编译项目多渠道打包[定 .pdf





《2022年App自动化之使用Ant编译项目多渠道打包[定 .pdf》由会员分享,可在线阅读,更多相关《2022年App自动化之使用Ant编译项目多渠道打包[定 .pdf(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、App 自动化之使用Ant 编译项目多渠道打包随着工程越来越复杂,项目越来越多,以及平台的迁移(我最近就迁了2 回), 还有各大市场的发布,自动化编译 android项目的需求越来越强烈,后面如果考虑做持续集成的话,会更加强烈。经过不断的尝试, 在 ubuntu 环境下, 以花界为例, 我将一步一步演示如何使用命令行,使用 ant编译 android项目,打包多渠道APK 。要点: (1). 编译 android的命令使用 (2). ant基本应用 (3). 多项目如何编译 ( 包含 android library) (4). 如何多渠道打包 ps:我将以最原始的方式来实现,而不是使用andr
2、oid自带的 ant 编译方式,并尽量详细解释,这样有益于我们彻底搞懂android打包的基本原理。1. Android编译打包的整体过程使用 ant ,ant 的参考文档: http:/ant.apache.org/manual/index.html首先,假设现在已经有这样的一个项目( 多工程的,简单的单工程就更简单了) :world baseworld /android library,基础类库,共享于其他主应用 floworld /android project,花界应用 healthworld /android project,健康视线应用 speciality /android pr
3、oject,其它应用 starworld /android project,其它应用 build.xml /ant编译脚本 , 可用于整个项目的编译,也可只编译某个工程 code_checks.xml kaiyuanxiangmu_world.keystore /密钥 README.md一个大的项目world ,下面有 1 个基础 Android Library和 4 个 Android Project。我们要做的就是编译这 4 个人 project成对应的一系列各市场APK 。那么我们在来看看baseworld 和 floworld的工程结构 : Android Library,basewo
4、rld: baseworld assets /assets目录,其中文件可能会被主应用覆盖 libs /存放第三方 jar库 res /类库资源,其中文件可能会被主应用覆盖 src /源码,可直接供主名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 15 页 - - - - - - - - - 应用使用 AndroidManifest.xml lint.xml proguard.cfg project.properties README.md和 Android Projec
5、t,floworld: floworld/ assets /assets目录,主应用优先级高 build data libs /存放第三方 jar库 res /主应用资源,主应用优先级高 src /源码,可直接供主应用使用 AndroidManifest.xml build.xml /ant编译脚本 , 可用于整个项目的编译,也可只编译某个工程 default.properties lint.xml proguard.cfg project.properties README.md结构已经出来了,那么android 打包主要是在做什么?说白了,先编译 java 成 class ,再把 clas
6、s和 jar转化成 dex,接着打包 aaset 和 res 等资源文件为 res.zip(以 res.zip示例), 再把 dex 和 res.zip合并为一个未签名apk,再对它签名, 最终是一个带签名的 apk 文件。当然这么说忽略了很多细节。下面我把这些步骤用一句话分别列举如下,脑子里先有一个整体的流程,后续再结合 ant 详细展开: (1). 生成用于主应用的R.java; (2). 生成用于库应用的R.java( 如果有库应用 ); (3). 编译所有 java 文件为 class 文件; (4). 打包 class 文件和 jar 包为 classes.dex; (5). 打包
7、assets 和 res 资源为资源压缩包 ( 如 res.zip,名字可以自己定义 ); (6). 组合 classes.dex和 res.zip生成未签名的 APK; (7). 生成有签名的APK; 针对多项目同步发布和多渠道打包问题,我们需要额外增加三个处理: (1). 各个工程下建立一个build.xml,然后在整个项目的根目录下建立一个build.xml,用于统一编译各个工程的; (2). 各个工程的 build.xml,通过传入市场ID 和应用 Version 参数生成对应的版本名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -
8、 - - 名师精心整理 - - - - - - - 第 2 页,共 15 页 - - - - - - - - - (3). 针对(1),(2)问题,建立一个批处理支持一键生成所有版本大概流程即是如此。2. 建立各个工程的ant 脚本文件 build.xml(位置:floworld/build.xml)因为需要创建一些基本的文件目录和清理上次生成的文件,所以我们简单的定义一下几个目标吧:init,main,clean。代码模板如下 : ?1 2 3 4 5 6 7 8 9 10 11 12 13 14 start initing . finish initing. 3. 初始化在正式打包之前,有
9、必要说明一下可能需要用到的初始化变量和操作。前面已经讲述了打包的大概流程,现在, 第一, 打包需要你使用哪个版本android.jar; 第二 , 生成的 R文件放到 gen 目录下 ; 第三 , 生成的 classes 文件放到 bin 目录下 ; 第四, 生成的打包文件放到 out 目录下; 第五, 生成的各市场版本放到build目录下。目录完全可以自定义。所以,如下的初始化必须先要做好,不然后面会提示找不到目录: ?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 property name=android-jar value=/usr/lib/android
10、-sdk/platforms/android-10 start initing . 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 15 页 - - - - - - - - - 17 18 19 20 21 22 23 24 25 26 27 finish initing. . . 4. 生成 R.java Android Library和 Android Project应用的 R.java是来自不同的 package 的。比如: (1). baseworld中导入的包是
11、 import com.tianxia.lib.baseworld.R; (2). floworld中导入的包是 import com.tianxia.lib.baseworld.R; 但是他们最终是调用统一的资源,所以这两个R.java文件必须一致。下面是主应用的R.java 的生成脚本:?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 generating R.java for project to dir gen (using aapt) . 注意 res 和./baseworld/res两个顺序不能搞反,写在前面具有高优先级,我们当然优先使用主应用的资源了
12、,这样就能正确覆盖库应用的资源,实现重写。库应用的 R.java 的生成脚本差不多,区别是指定库应用的AndroidManifest.xml,以用于生成的是不同的包和目录。另外, aapt 的使用中特别说明了,为了库应用的资源更好的可重用,库应用生成的R.java字段不需要修饰为final,加上参数 -non-constant-id即可。?1 2 generating R.java for library to dir gen (using aapt) . 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -
13、 - - - - 第 4 页,共 15 页 - - - - - - - - - 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 这样的话就可以生成2 个正确的 R.java文件了 ( 如果你引用了两个库, 则需要生成 3个 R.java ,以此类推 ) 。结果如下 : ?1 2 3 4 5 6 7 8 9 gen com tianxia app floworld R.java lib baseworld R.java5. 编译 java 文件为 class 文件使用 javac 命令把 src 目录,baseworld/src目录,gen/*/R.java这些 ja
14、va 编译成 class 文件:命令原型是:?1 2 / 示例javac -bootclasspath -s -s -s -d bin/classes *.jar转化成 ant 脚本为 : ?1 2 3 4 5 6 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 15 页 - - - - - - - - - 7 8 9 10 11 12 13 14 compiling java files to class files (include R.java, library a
15、nd the third- 6. 打包 class 文件为 classes.dex这步简单,用dx 命令把上步生成的classes和第三方 jar包打包成一个 classes.dex。命令原型是 : ?1 2 3 / 示例/ 后面可以接任意个第三方jar 路径dx -dex -output=out/classes.dex bin/classes libs/1.jar libs/2.jar 转化成 ant 脚本为 : ?1 2 3 4 5 6 7 packaging class files (include the third-party jars) to calsses.dex . /ec 7
16、. 打包 res ,assets 为资源压缩包 ( 暂且命名为 res.zip)还是使用 aapt 命令,如生成R.java最大的不同是参数 -F, 意思是生成 res.zip文件。命令原型和 ant 脚本差不多 : ?1 2 3 4 5 6 7 8 9 10 11 12 13 14 packaging resource (include res, assets, AndroidManifest.xml, etc.) to res. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6
17、 页,共 15 页 - - - - - - - - - 15 16 17 18 8. 使用 apkbuilder命令组合 classes.dex,res.zip和 AndroidManifest.xml为未签名的 apk apkbuilder命令能把 class 类, 资源等文件打包成一个未签名的apk, 原型命令和 ant 脚本类似 : ?1 2 3 4 5 6 7 8 9 building unsigned.apk . 这个命令比较简单。9. 签名未签名的 apk使用 jarsigner命令对上步中产生的apk 签名。这是个传统的java 命令,非 android专用。原型命令和 ant
18、脚本差不多 : ?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 signing the unsigned apk to final product apk . arg value=build/$apk-version/$apk-name_$apk-version_$apk-market.apk 至此,完整具有打包功能了,最后的build.xml为:?1 2 3 4 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 15 页 - - - - - -
19、- - - 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 property name=android-jar value=/usr/lib/android-sdk/platforms/android-1 start initing . finish initing. generating R.java for project to dir gen (using aapt) . 名师资料总结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年App自动化之使用Ant编译项目多渠道打包定 2022 App 自动化 使用 Ant 编译 项目 多渠道 打包

限制150内