120 likes | 285 Views
Android 自动打包器原理及使用. Android 自动打包器做些什么 ?. . 编译前的准备工作,如准备引用 lib 环境,初始化工程信息,修改一些配置文件。 ( 打包器每次编译都会自增 AndroidManifest 中的 versionCode) 编译、签名工程。本步通过 android 的命令行工具完成。 后续的输出,命名 apk 。. 自动打包器的最小配置. 尽管自动打包器在第一步会为你准备好所需编译的一切必要信息,但是在此之前有些信息是必须提供的。 下面列出准备编译必须配置的属性 :
E N D
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比较烂。批量添加功能懒得实现了。另外打包器不包含命令行工具。