您的位置:首页 > 移动开发 > Android开发

Android ant自动打包APK

2015-07-16 09:43 405 查看
这有篇帖子详细介绍了ant打包:http://www.eoeandroid.com/thread-557178-1-1.html



一、 到apache官网下载apache-ant,截止2014年12月10日最新版本是1.9.4.
下载地址:http://ant.apache.org/
file:///C:/Users/xinyuli/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
选择上图所示项
二、 配置环境变量(如果已经配置过ANT、Android、J***A环境变量,可略过此步骤):
1、 配置ANT环境变量
(1)在系统环境变量中增加ANT_HOME,我的ANT解压后放在F:\apache-ant-1.9.4,环境变量值也就是这个地址,根据你放的地方不同而不同;
(2)在path环境变量中加入
%ANT_HOME%\bin;%ANT_HOME%\lib;
注意用与之前的内容用英文分号分割;
配置完成后在命令行下输入ant回车,看到以下内容就表示ANT环境变量配置成功了:
file:///C:/Users/xinyuli/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg

2、 配置Android-SDK环境变量
(1) 在系统环境变量中增加ANDROID_HOME,值是你的Android-SDK存放的地址,我的在
F:\ Android-SDK;
(2) 在path环境变量中增加
%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;
以便我们可以正常使用adt工具和SDK的ant工具。梗塞完成后在命令行输入adt,出现Android相关提示信息说明android环境变量配置成功;
3、 配置J***A环境变量
(1) 在系统环境变量中增加J***A_HOME,值是你安装JDK的路径,我的JDK安装在
D:\Program Files\Java\jdk1.7.0_15;
(2) 创建CLASSPATH系统变量,值为.;%J***A_HOME%\lib\dt.jar;%J***A_HOME%\lib\tools.jar,注意开头是英文的点和分号;
(3) 在path中增加
%J***A_HOME%\bin;%J***A_HOME%\jre\bin;
配置完成后在命令行输入java,出现J***A相关提示说明J***A环境变量配置成功。
三、 添加ant-contrib第三方jar包
因为要实现自动循环打包,而ant本身不支持foreach循环,需要引入第三方jar包,下载ant-contrib-1.0b3.jar之后把它放到ant所在目录的lib目录下,例如我的在F:\ apache-ant-1.9.4\lib,然后要进行关键的一步:右键点击该jar文件à选择“打开方式”àWinRAR压缩文件管理器,依次打开net/sf/antcontrib/antcontrib.properties,看到以下这一行:
file:///C:/Users/xinyuli/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg
然后用#注释掉if=net.sf.antcontrib.logic.IfTask这一行,这是因为ant-contrib中的if语句会与Android-SDK自带的if语句冲突,导致报错if doesn't support the "condition"attribute,所以我们这里要注释掉ant-contrib中的if语句,只使用它的foreach语句。至此ant工具就已经全部配置完成。
四、 修改AndroidManefest.xml文件
打开我们要打包的工程的AndroidManifest.xml文件,去掉里面的中文注释,可以用英文注释,但是不要使用中文,否则会报错,把<meta-data android:value="15"android:name="UMENG_CHANNEL" />放到一行上显示,不要换行。至此AndroidManifest.xml文件修改完毕。
五、 生成build.xml文件与local.properties文件
如果项目关联了Library,必须首先在Library项目中生成build.xml文件和local.properties文件,方法是:打开cmd à cd到项目所在目录 à 运行androidupdate lib-project -p ./
运行完成后会提示生成相应的文件,这时打开local.properties文件可以看到sdk.dir=安卓SDK所在目录,如果为空说明Android环境变量配置不正确,可以手动填入SDK所在目录,如F:\\Android-SDK,注意用两个反斜杠,以实现转义字符。
如果关联了多个Library,请在每个Library中运行相应命令;
最后cd到主工程所在目录,运行
android update project --name 工程名称 -p ./--subprojects
同样提示生成build.xml和local.properties文件,如果没有关联Library则只需运行
android update project --name 工程名称
即可,至此自动生成文件步骤结束。
六、 创建ant.properties文件
在主工程所在目录新建ant.properties文件,里边填入:
#keystore所在路径,注意路径用正斜杠,不要加双引号
key.store=F:/kugou.keystore
#keystore密码
key.store.password=xxxxx
#keystore别名
key.alias=myalias
#别名密码
key.alias.password=xxxxx
#项目版本号
app_version=1.3.2
#UMENG渠道名称,有些项目渠道名称用英文字母,有些用数字,用英文逗号隔开
market_channels=2,3,4,5,6
这里注意:keystore别名必须是英文,不能是中文,否则会报错,如果已经写成了中文,请在cmd中使用
keytool-changealias -keystore keystore名称 -alias 原来的别名 -destalias 新的别名
命令修改keystore别名。至此ant.properties文件创建成功。
七、 修改build.xml文件
这里所说的build.xml文件指的主项目中我们用命令行生成的那个build.xml,在里边加入以下内容:
<!-- 渠道包打包脚本 antdeploy -->
<!-- 引入第三方jar包 -->
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="lib/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
<!—定义deploy命令 -->
<target name="deploy">
<!—调用foreach循环 -->
<foreachtarget="modify_manifest"list="${market_channels}"param="channel"delimiter=",">

</foreach>
</target>
<!—定义修改manifest的target -->
<target name="modify_manifest">
<replaceregexp flags="g" byline="false">
<regexp pattern='android:value="(.*)" android:name="UMENG_CHANNEL"'/>
<substitution expression='android:value="${channel}" android:name="UMENG_CHANNEL"'/>
<filesetdir=""includes="AndroidManifest.xml"/>

</replaceregexp>
<property name="out.release.file" location="${out.absolute.dir}/${ant.project.name}_${channel}.apk"/>
<!—调用ant release命令 -->
<antcall target="release" />
<!—定义apk文件保存路径及文件名 -->
<copy tofile="${out.absolute.dir}/out/${ant.project.name}v${app_version}-${channel}.apk"file="bin/${ant.project.name}-release.apk"/>
</target>
其中用***背景标出来的最终生成的apk文件的文件名格式,可以按照需要修改,至此build.xml文件修改完成。
八、 批量打包
进入cmd窗口,cd到项目所以目录,运行ant deploy就可以实现批量打包,生成的apk文件放在工程目录下bin下的out目录中。
九、 常见错误:
1、 if doesn't support the "condition"attribute错误:没有修改ant-contrib-1.0b3.jar文件,请按第三步修改ant-contrib-1.0b3.jar文件;
2、 找不到?。???? keystroe文件:keystore文件名称或路径包含中文,或者别名包含中文,请按第六步修改keystore文件别名;
3、找不到src目录:所有Library与主程序的源码都要写在srcSource Folder中
其余错误可以试运行ant clean命令或者ant release、ant debug生成单个apk文件,然后观察报错信息进行解决。
参考文献:http://www.cnblogs.com/tt_mc/p/3891546.html

注:以上是打的渠道包,如果你只需要打一个报 直接执行:ant modify_manifest就可以。

另一种配置build.xml的方法:

配置build.xml

为了实现批量打出多个渠道包,我们必须手动对刚刚生成的build.xml文件进行修改。

引入ant.properties文件。
<property file="ant.properties" />


支持循环执行

<!-- 支持循环执行 -->       
    <taskdef resource="net/sf/antcontrib/antcontrib.properties" >           
        <classpath>              
            <pathelement location="${ant.dir}/lib/ant-contrib-1.0b3.jar" />           
        </classpath>       
    </taskdef>       
    
    <echo>Run ant-contrib-1.0b3.jar ok</echo>


配置循环打包代码

<target name="deploy">   
        <foreach target="edit_and_build" list="${market_channels}" param="channel" delimiter=",">   
        </foreach>   
    </target>  
    
    <target name="edit_and_build">   
        <echo>Run '${channel}' apk</echo>  
        
		<replaceregexp
		    encoding="utf-8"
		    file="AndroidManifest.xml"
		    flags="s"
		    match='android:name="UMENG_CHANNEL".+android:value="([^"]+)"'
		    replace='android:name="UMENG_CHANNEL" android:value="${channel}"'/>
			
      	<property name="out.final.file"  location="${target.dir}/${app_version}/${app_name} V${app_version}(${channel}).apk" /> 
	    <antcall target="clean" />  
	    <antcall target="release" />  
    </target>


配置后,会读取ant.properties中market_channels中配置项,得到一个渠道号数组,对这个数据进行迭代,替换AndroidMainfext.xml文件中的android:name="UMENG_CHANNEL"。

每替换好一个,将输出到"out.final.file"。

${target.dir},即为local.properties文件中配置的target.dir=/Users/cundong/Documents/ZhihuPaperRelease ${app_name},即为ant.properties文件中配置的app_name=ZhihuPaper ${app_version},即为ant.properties文件中配置的app_version=2.1 ${channel},即为当前循环的渠道号

请务必保证${target.dir}/${app_version}目录真是存在并且有写权限。

当前例子中为:/Users/cundong/Documents/ZhihuPaperRelease/2.1,如果这么目录不存在,则会提示报错信息。

ant脚本生成.bat(批处理文件)

E:

cd E:\code\easylife

call ant edit_and_build

pause

”E:“和”cd E:\code\easylife“要改成你工程所在的盘符和工程根目录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: