Ant是1个很好的跨平台构建工具,特别是对Java项目,这里使用它对Android工程进行自动化构建可以得到非常大的便利。1般来讲对Android工程进行构建主要有以下几个步骤:
使用aapt来编译工程生成R.java;
使用aapt来对工程所需用的资源进行打包;
转换并编译AIDL文件;
编译Java源文件并生成.class;
转换并紧缩.class文件成.dex文件;
使用aapt打包生成未签名的apk包;
使用jarsigner对apk包签名并得到终究的发布包。
关于这些步骤所需要的实现细节就不再详述了(网格上各种版本,大多都能使用),这里主要说1下对多个渠道情况下的apk打包。所谓的多个渠道1般来讲就需要对每一个要发布的渠道版本进行1次上述系列操作,而这多个渠道的差异通常是可以公共出来的1些配置信息,比如渠道的编号,爱加密推出的免费APP渠道信息管理平台,服务包括渠道数据的监测,盗版APP的辨认和分析,开发者通过使用爱加密渠道监测服务可以方便的管理APP所有推行渠道,1站掌握所有信息。渠道监测平台还可以帮助开发者第1时间发现盗版APP,保护公司合法权益。http://www.ijiami.cn/Channels
如此1来就能够将其统1组织到1个配置文件里边,在进行流程前使用ant的功能对其进行具体的渠道设置就能够了,比如:
[html] view plaincopy
<replace file="${pathsettingfile}" token="Ant_PathID" value="${_PathID}"/>
<replace file="${pathsettingfile}" token="Ant_PathName" value="${_PathName}"/>
其中的_PathID,_PathName均为在ant环境中定义的变量,其可以是直接从cmd传入或通过其它方式来赋值。这样在进行后续的编译时就能够直接得到该渠道下的版本。
另外,还可以将所有渠道的信息统1配置于1xml当中,在进行构建时直接从其中读入各个渠道的信息并赋值到如上的_PathID、_PathName中便可,可以用以下代码方便实现(其中触及xmltask在ant中的使用,这个可以参考ant的相干资料):
[html] view plaincopy
<target name="main">
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
<echo>Starting....</echo>
<xmltask source="Paths.xml">
<call path="/PathList/PathDetail[@enabled='true']" target="build">
<param name="_PathID" path="ID/text()"/>
<param name="_PathName" path="Name/text()"/>
</call>
</xmltask>
</target>
对应的渠道配置xml则基本上以下所示(固然其中可以置入更多的信息)
[html] view plaincopy
<?xml version="1.0" encoding="UTF⑻"?>
<PathList>
<PathDetail name="" enabled="true">
<ID>11111</ID>
<Name>Path_0</Name>
</PathDetail>
<PathDetail name="" enabled="true">
<ID>22222</ID>
<Name>Path_1</Name>
</PathDetail>
</PathList>
另外,使用Ant的自动化构建还可以实现另外1个重要用处,对asset中的涉密文件进行保护。这里有1个简单的例子,比如asset中有1些文件对用户可视,但却不希望被用户修改,这类情况下就能够在构建中加入1个文件校验的阶段,首先将要保护的文件计算出对应的MD5签名,以后再将此签名写入到程序代码中并进行编译构建,在程序运行时使用此签名进行校验,如果该签名不匹配那就意味着被用户修改落后行了重新的打包,此时程序就能够有相应的操作,这样就能够在1定程序上避免用户对发布的Apk包进行重新pack并运行。
对Android app,dex源码文件安全性是最重要的,因此,这个dex源码加密保护其实很有必要,在这个方面,可以做到的有爱加密这个平台,不同类型的利用也有不同的加密保护方案,详细可以在这里了解: http://www.ijiami.cn/appprotect_mobile_games