Ant打包生成apk

由于项目中需要根据不同的渠道来进行打包,通过Eclipse打包过程非常繁琐,并且因为Eclipse打包对内存要求比较高,经常会出现打包过程中Eclipse内存溢出的问题。后面了解到Ant是一个非常不错的工具,于是翻阅了很多文章来进行了解。不断尝试下终于打包成功。

环境:Eclipse


   apache-ant-1.9.4-bin   需要将/bin目录添加到path中

   ant-contrib-1.0b3-bin   多渠道循环打包时需要,下载后解压,将ant-contrib-1.0b3.jar复制到/ant/lib下


1.对于没有引用第三方库的项目

首先,在项目的根目录下,使用命令行键入命令:android update project --name your_project_name -p ./,项目的根目录下会多出build.xml和local.properties两个文件。

build.xml是ant打包的重要文件,打开后可以发现,大部分语句都有注释,还是比较容易懂的。

local.properties 文件中只有一句话:sdk.dir=E:\\adt-bundle-windows-x86_64-20140624\\sdk

接下来就可以利用命令来生成apk了。

 ant debug : 生成一个测试版apk,默认使用 debug key 进行签名,在bin目录下会生成your_project_name-debug.apk

ant release : 生成一个未签名和未aligned的apk包,在bin目录下生成your_project_name-release-unsigned.apk和                             your_project_name-release-unaligned.apk

如果自己有签名文件(keystore文件),需要打包生成一个签名的apk,需要在项目的根目录下面新建一个ant.properties文件,然后添加内容:key.alias=*****
  key.alias.password=*****
  key.store=*****
    key.store.password=*****

然后在执行ant release命令,就可以生成对应签名的release包了


对于多渠道的打包:

由于对ant语法不是很熟,直接贴文件吧。主要就是local.properties和custom_rules.xml的修改

local.properties:

sdk.dir=E:\\adt-bundle-windows-x86_64-20140624\\sdk
market_channels=Gfan,AnZhi,MuMayi,360,baidu
version=1.2.1

custom_rules.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules" >
    <taskdef resource="net/sf/antcontrib/antcontrib.properties" >
        <classpath>
            <pathelement location="lib/ant-contrib-1.0b3.jar" />
        </classpath>
    </taskdef>
    
    <!-- ${market_channels} 要在local.properties里声明,并用,来分隔你要打包的channel名 -->
	<!-- 比如local.properties里可以这样写   market_channels=Google,Gfan,AnZhi,MuMayi -->
    <target name="deploy" >
        <foreach
            delimiter=","
            list="${market_channels}"
            param="channel"
            target="modify_manifest" >
        </foreach>
    </target>

    <!-- 修改manifest.xml里的渠道名-->
	<!-- regexp pattern是正则匹配,"代表双引号>
	<!-- substitution expression 是你要替换的的channel名-->
    <target name="modify_manifest" >
       <replaceregexp flags="g" byline="false">  
        <regexp pattern="android:name="UMENG_CHANNEL" android:value="(.*)"" />  
            <substitution expression="android:name="UMENG_CHANNEL" android:value="${channel}"" />  
           	<fileset
                dir=""
                includes="AndroidManifest.xml" />
        </replaceregexp>
        <property
            name="out.release.file"
            location="${out.absolute.dir}/${ant.project.name}_${channel}.apk" />
        <!-- 
        <antcall target="clean" />
         -->
        <antcall target="release" />
        <!--输出渠道包到bin/out目录下 --> 
   		<copy tofile="${out.absolute.dir}/out/${ant.project.name}-${channel}-v${version}.apk" file="bin/${ant.project.name}-release.apk"/> 
    </target>
</project>



2.对于引用了第三方库的项目

           被引用的项目中也需要添加build.xml,用命令 android update lib-project -p ./或者直接拷贝一个自动生成的都可以。然后在主项目中,利用 android update project --name MenudrawSample -p ./ --subprojects 来更新或者生成build.xml和local.properties。然后就可以执行ant release或者ant deploy来进行打包了。

打包过程中可能会出现 \sdk\ant\build.xml 698 :null returned 1 的错误,只需要在主项目以及引用的库项目的build.xml中添加一行:

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



3.对于第三方库项目中还有.so的情况
暂时还没有涉及到,稍后补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值