ant批量打包android_apk(一步一艰辛)

首先声明,android开发小白一枚,一直保持成长的“猩猩”,ant自己也不是很懂,扒啦了网上很多资料才实现了android使用ant的批量打包工作(大神勿笑,我很羞涩,我很腼腆);言归正传:
1.准备工作。
ant的下载,配置(为实现自动批量打包,就要使用for循环,ant不支持for,就要引入ant-contrib-1.0b3.jar,让ant能使用foreach)
ant下载官网网址:http://ant.apache.org/bindownload.cgi
http://download.csdn.net/detail/qq_21945825/9514071
ant-contrib-1.03b.jar 下载网址:http://download.csdn.net/detail/qq_21945825/9514064
配置工作:
ant环境配置,将文件解压后(这是我的解压路径D:\ant\apache-ant-1.9.7-bin\apache-ant-1.9.7),在环境变量中新建:ANT_HOME 对应 解压文件路径,在Path中添加%ANT_HOME%\lib(就这么简单),在cmd中输入ant -version 显示ant版本号说明配置没问题。过程如下图:
ANT_HOME配置
Path配置
ant成功后的描述
到这里,你的ant已经能跑起来了(以下的操作会在cmd命令框中进行),将命令框转入项目根目录,输入android update project -n (项目名) -p ./
这里写图片描述
(注:这里如果报android不是内部活着外部命令,请注意查看android的环境配置是否正确百度android环境配置一大堆,这里不再说)
配置最后一步,将ant-contrib-1.03b.jar 拷贝到解压后的ant文件夹下的lib中,这里都是ant的jar包,到这里配置工作全部做完。

2、正式开始打包前准备工作
打开工程根目录文件,可以发现多了几个文件build.xml、local.properties、project.properties
一个一个解释:
build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="LP" default="help">
    <property file="local.properties" />

    <property file="ant.properties" />


    <property environment="env" />
    <condition property="sdk.dir" value="${env.ANDROID_HOME}">
        <isset property="env.ANDROID_HOME" />
    </condition>

    <loadproperties srcFile="project.properties" />

    <!-- quick check on sdk.dir -->
    <fail
            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
            unless="sdk.dir"
    />

    <import file="custom_rules.xml" optional="true" />

    <import file="${sdk.dir}/tools/ant/build.xml" />

    <taskdef resource="net/sf/antcontrib/antcontrib.properties">  
    <classpath>  
        <pathelement location="lib/ant-contrib-1.0b3.jar"/>  
    </classpath>  
    </taskdef>  

    <target name="deploy">  
    <foreach target="modify_manifest" list="${market_channels}" param="channel" delimiter=",">  
    </foreach>  
    </target>  

    <target name="modify_manifest">  
    <replaceregexp flags="g" byline="false">  
        <!-- 匹配的内容是 android:value="*****" android:name="BILLING_CHANNEL" -->  
        <regexp pattern='android:value="(.*)" android:name="BILLING_CHANNEL"' />  
        <!-- 匹配之后将其替换为 android:value="渠道名" android:name="BILLING_CHANNEL" -->  
        <substitution expression='android:value="${channel}" android:name="BILLING_CHANNEL"' />    
        <!-- 正则表达式需要匹配的文件为AndroidManifest.xml -->  
        <fileset dir="" includes="AndroidManifest.xml" />  
    </replaceregexp>  
    <property name="out.release.file" location="${out.absolute.dir}/${ant.project.name}_${channel}.apk" />  
    <!--包 -->  
    <antcall target="release" />  
    <!--输出渠道包到bin/out目录下 -->  
    <copy tofile="${out.absolute.dir}/out/${ant.project.name}v${version}-${channel}.apk" file="bin/${ant.project.name}-release.apk"/>  
    </target>  


</project>

我也是ant小白,就是把自己理解的简单说一下:
1、project name 自己项目的名称,需要改;
2、下面这段代码就是引入jar包使ant支持for

<taskdef resource="net/sf/antcontrib/antcontrib.properties">  
    <classpath>  
        <pathelement location="lib/ant-contrib-1.0b3.jar"/>  
    </classpath>  
    </taskdef> 

3、实现循环、根据正则表达式去匹配

<foreach target="modify_manifest" list="${market_channels}" param="channel" delimiter=",">  
    </foreach>  

4、最后输入。

其他文件编写:
build.xml文件是ant生成的,文件中引入了几个其他文件,ant.properties、local.properties、project.properties

local.properties文件中是我们sdk的信息,注意这里 不要写成单“\”了
这里写图片描述
自建文件ant.properties
我们整个打包的中的参数基本都在这个文件中

#keystore的路径,必须使用正斜杠  
key.store=D:/lp.keystore
#keystore的密码  
key.store.password=123456789
#alias名  
key.alias=lp
#alias密码  
key.alias.password=123456789
#渠道市场列表  
market_channels=BILLING_CHANNEL,baidu
#版本号  
#version=1.2.1 

到这里,我们的整个工作基本已经做完了,然后还是在原来的cmd命令框中输入,ant deploy

注:这里并没有对作为引用libary的支持,可以到网上搜索,相信很容易实现,作为lib下的第三方jar是自动打包进apk的这个无需担心。

碰到的错误总结一下:
在这里先声明一下,刚进行业的小白,碰到的问题千奇百怪的,很多常识性的错误,在此仅纪念自己的蠢萌!
1、ant打包时报错null returned 1;
D:\Android\sdk\tools\ant\build.xml:698: null returned: 1

<property name="aapt.ignore.assets" value="!.svn:!.git:\x3Cdir\x3E_*:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~:crunch" />

2、if doesn’t support the “condition”attribute
两个解决办法:1、依次打开ant-contrib-1.03b.jar—> net/sf/antcontrib/antcontrib.properties,看到以下这一行:用#号注释掉if=net.sf.antcontrib.logic.IfTask这一行,这是因为ant本身自带的if会与android的if冲突,只用ant的foreach语句
2、比较简单,将build.xml中的<import file="${sdk.dir}/tools/ant/build.xml" />放到下面,让最后执行这个操作就可以了

3、最后一个比较蠢:java.io.EOFException:这个错误真是折磨死我了,心疼自己是个小白,首先检查你keystore文件是否存在,配置中的信息和keystore是否一致即可。

4、出现编码格式错误,例如包清单文件编码格式UFT-8错误,首先确定编码格式和保存格式是否一致,还错就去掉清单文件中中文。

路漫漫其修远兮,修学。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值