Android自动打包器原理及使用

Download Report

Transcript Android自动打包器原理及使用

Android自动打包器原理
及使用
Android自动打包器做些什么?



.编译前的准备工作,如准备引用
lib环境,初始化工程信息,修改
一些配置文件。 (打包器每次编
译都会自增AndroidManifest中的
versionCode)
编译、签名工程。本步通过
android的命令行工具完成。
后续的输出,命名apk。
自动打包器的最小配置






尽管自动打包器在第一步会为你准备好所需
编译的一切必要信息,但是在此之前有些信
息是必须提供的。
下面列出准备编译必须配置的属性:
path 引用环境变量。此处需配置
jdk;ant/bin;android/tools的实际路径。
projectPath:引用的项目工程路径。(工程名
称将默认使用路径的文件夹名)
keystore:引用的签名信息文件。该签名信息
文件(还是xml文件),需要配置
keyAlias,storePass,keyPass,keyPath这些
信息。
有了这三个变量。编译环境就准备好了,此
时就可以完成某个具体工程的编译工作了。
自动打包器的最小配置(二)



前面的配置只能足够完成打包器
的编译工作。以下配置可完成打
包器的编译前修改,以及编译后
的命名工作。
modifyTemplate:修改模板,编译
前某个特定文件进行修改。
nameTemplate:命名模板,编译
后依照该模板进行命名。
模板技术



模板变量引用,即指${templateVar}
这类。其中templateVar是在运行时期
生成的。
举个例子,若在配置中引用
${projectName}。则当你的
projectPath配置为C:\...\Helloworld时,
此处的projectName将被等价替换为
HelloWorld。而当你的projectPath配
置为C:\...\AndGame时,此处的
projectName是AndGame。
注意:模板中的变量全是String类型。
模板变量






打包器在准备项目阶段会生成一些模板变量。
这些变量可以在后续的修改或命名阶段使用。
以下是生成的可以引用的模板变量:
projectName:项目名称。若未在配置文件中
配置,则使用路径的末尾工程名。
targetVersion:编译目标android系统的版本
号。如1.6
targetAndroidID:编译目标android系统的ID
号。如android1.6,其ID号为4
projectVersion:从AndroidManifest中读取到
的工程版本号。
模板技术(二)


模板变量插入,这可以通过。
${templateVar:value}来实现。
templateVar表示插入运行变量名
称,value是实际插入的值。
举个例子。当配置
${pubID:lenovo}时。读取该配置
文件后,会插入模板变量pubID,
其运行值为lenovo。
插入模板变量的用途


结合打包器的三个步骤来看。编
译前修改时,可能针对某个具体
文件修改。此时希望插入具体的
模板变量,可以在命名模板中使
用它。
因此你可以在修改模板中使用模
板变量插入来配置自定义的模板
变量。这些自定义的模板变量可
以在命名模板中使用到。
模板技术(三)




宏变量。#Var的形式是用来定义宏变
量。宏变量的宏替换十分类似引用模
板变量,但是不同之处在于宏变量是
自定义的,它只用于宏替换,不被写
入运行时模板变量。
宏替换的好处是可以通过它实现配置
文件的变化。
宏变量在此处一般与修改模板结合使
用。以便封装修改内容的动态变化。
自动打包器会读取配置文件中的宏变
量,通过每次替换宏变量来实现批处
理打包。
配置文件结构和优先级





Config.xml:全局配置文件。自动打包器会预
先加载Config.xml,可将项目配置中常用的配
置写在此处。
keystores/*.keystore:签名配置文件。
projects/*.project:项目配置文件。
冲突解决方案:
当载入这些配置文件产生冲突时,将会按照
如下的优先顺序做覆盖处理。
Config.xml<project<keystore。当然,若您
没有配置Keystore属性,则可以将keystore
配置文件中的所有需要的属性
(keyPath,keyAlias…)写在project中。
配置文件的其它





关于路径:可以使用相对路径,所有相对路
径的起始目录均为打包器的主目录。
关于修改默认模板变量:
projectName:默认是projectPath的末尾目录
名。我们可以在project配置文件中自定义修
改它。
targetAndroidID:默认是读取android工程下
的default.properties得到的。但是可以自定
义其编译目标android平台的版本。(通过
android list命令查看)
outDir:默认时,编译文件都将输出到打包器
的apks目录下。配置outDir可自定义编译后
的输出目录。
自动打包器的不足之处




打包器依赖环境较多:ant、android sdk、jdk。
打包器尚未实现定制插件目标平台。(一个
是本人懒,目前不用AddOn平台。另外一个
原因是工程中默认的default.propertis文件,
通常会将本来单纯的平台目标配置为google
的AddOn)。
使用ant进行编译生成时,有一个比较奇怪
的bug。那就是AndroidManifest.xml中不允
许有中文注释。否则会出现奇怪的错误
打包器的ui比较烂。批量添加功能懒得实现
了。另外打包器不包含命令行工具。