Android ant自动打包APK

这有篇帖子详细介绍了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、JAVA环境变量,可略过此步骤):
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、  配置JAVA环境变量
(1)       在系统环境变量中增加JAVA_HOME,值是你安装JDK的路径,我的JDK安装在
D:\Program Files\Java\jdk1.7.0_15;
(2)       创建CLASSPATH系统变量,值为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar,注意开头是英文的点和分号;
(3)       在path中增加
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
                               配置完成后在命令行输入java ,出现JAVA 相关提示说明JAVA 环境变量配置成功。

三、       添加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“要改成你工程所在的盘符和工程根目录。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值