Android学习 - ant批量打包

很多的应用中需要加上应用推广的统计,如果一个一个的去生成不同渠道包的应用,效率低不说,还有可能不小心弄错了分发渠道,使用ant可以批量生成应用。

一、添加渠道包信息

为了统计渠道信息,就不得不在程序的某个地方加入渠道的信息,然后针对不同的渠道打不同的包。一般可以在Manifest文件中加入渠道编号,而不直接写在代码中。这样做的好处是,可以针对不同渠道,自动化去修改Manifest文件中的渠道编号,然后自动为该渠道打包。

Manifest文件支持Meta Data标签,建议使用这种自定义标签。例如下面的文件片段。

<meta-data android:value="000000" android:name="CHANNEL"/>

二、渠道包读取

public static String getChanel(Context ctx) {
	String CHANNELID = "000000";
	try {
		ApplicationInfo ai = ctx.getPackageManager().getApplicationInfo(
				ctx.getPackageName(), PackageManager.GET_META_DATA);
		Object value = ai.metaData.get("");
		if (value != null) {
			CHANNELID = value.toString();
		}
	} catch (Exception e) {
		//
	}
	return CHANNELID;
}

三、自动打包实现

这一篇主要做了创建android项目、update已存在项目、ant编译项目。

1、准备ant

ant 官网可下载

http://ant.apache.org/

ant 环境配置:

1)、解压ant的包到本地目录。

2)、在环境变量中设置ANT_HOME,值为你的安装目录。

3)、把ANT_HOME/bin加到你系统环境的path。

2、使用ant

1)、首先需要检查一下android-sdk的环境换量是否添加到了path中。这样可以在任意目录下执行android命令,不然则要切换到 android-sdk\tools目录下。

2)、使用android create创建项目

参数说明:

-k /--package 为命名空间(包名)-a /--name 工程名

-p /--path 项目 -t 为目标平台的版本编号

C:\Documents and Settings\Administrator>android create project -k com.android.Tank -a Tank -t 4  -p F:\tank

列出不同版本平台的对应id编号 android.bat list targets /androidlist

C:\Documents and Settings\Administrator>android.bat list targets

3)、android update更新现有项目

对已经存在的android工程,我们可以update下(修改平台的版本),这样会自动添加build.xml等ant的配置文件。

C:\Documents and Settings\Administrator>android update project --name Tank -t 11 -p F:\tank

4)、ant 参数介绍

* debug:带调试用签名的构建

* release:构建应用程序,生成的apk必须签名才可以发布

* install:安装调试构建的包到运行着的模拟器或者设备;

* reinstall

* uninstall

使用ant命令时可以进入到项目目录中,或者

ant debug Buildfile:E:\MyLiB\Android\AndroidAnt\MyBoardCastReciver\build.xml

简单介绍了使用ant命令打包android程序,实现批量打包需要的加一个类似于for循环的功能即可,在Ant的核心包里没有相关的For循环的Task,要下载相应的扩展包。可以使用开源的Ant-contrib包。下载地址:http://ant-contrib.sourceforge.net/。下载后的解压得到的jar文件放到ant的lib目录。

在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">
    <regexp pattern="android:value="(.*)" android:name="CHANNEL"" />
    <substitution expression="android:value="${channel}" android:name="CHANNEL"" />
    <fileset dir="" includes="AndroidManifest.xml" />
    </replaceregexp>
    <property name="out.release.file"
             location="${out.absolute.dir}/${ant.project.name}_${channel}_${app_version}.apk" />
    <antcall target="release" />
</target>

taskdef:声明需要放到较前位置,因为if condition也会用到此声明。

build.properties:文件增加

market_channels=000000,012345
app_version=1.2.1

market名称用逗号分隔,执行ant deploy即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值