Android Ant 批量多渠道打包实例

Android Ant 批量多渠道打包实例



关于批量打包,无需多言,这是每个国内Android开发者必须面对的一个问题。

下面,我就以开源项目「知乎小报」为例,详细说明如何使用ANT实现批量打渠道包。

1 Ant 安装

  • 下载ANT

请前往 http://ant.apache.org 下载。

  • 配置环境变量

设置环境变量后,在命令行下测试ant命令,如果出现以下内容,则说明配置成功:

cundongdeMacBook-Pro:~ cundong$ ant Buildfile: build.xml does not exist! Build failed
  • ant-contrib-1.0b3.jar下载

由于ant本身不支持迭代,因此我们需要用到一个第三方的库 ant-contrib来实现迭代功能。

下载ant-contrib,并将ant-contrib-1.0b3.jar文件拷贝至ANT安装目录。

下载地址:http://ant-contrib.sourceforge.net/

2 生成local.properties、build.xml文件

先介绍一下iZhihuPaper的工程依赖情况。

  • iZhihuPaper 依赖 actionbarpulltorefresh.extras.actionbarsherlock、Crouton、PhotoView
  • actionbarpulltorefresh.extras.actionbarsherlock 依赖 ActionBarPullToRefresh
  • ActionBarPullToRefresh 依赖 actionbarsherlock、SmoothProgressBar
  • Crouton、actionbarsherlock 依赖 SupportLib
  • PhotoView、SmoothProgressBar、SupportLib 无任何依赖

生成方式

我们需要为iZhihuPaper工程和他直接或者间接引用的所有工程(一共7个)都生成local.properties、build.xml文件。

命令格式:

android update project --target {target版本} --name {工程名字} --path {工程目录}

依次执行以下命令:

1.

android update project --target android-20 --name SupportLib --path /Users/cundong/Documents/github/SupportLib

2.

android update project --target android-20 --name PhotoView --path /Users/cundong/Documents/github/PhotoView

3.

android update project --target android-20 --name SmoothProgressBar --path /Users/cundong/Documents/github/SmoothProgressBar

4.

android update project --target android-20 --name Crouton --path /Users/cundong/Documents/github/Crouton

5.

android update project --target android-20 --name actionbarsherlock --path /Users/cundong/Documents/github/actionbarsherlock

6.

android update project --target android-20 --name ActionBarPullToRefresh --path /Users/cundong/Documents/github/ActionBarPullToRefresh

7.

android update project --target android-20 --name actionbarpulltorefresh.extras.actionbarsherlock --path /Users/cundong/Documents/github/actionbarpulltorefresh.extras.actionbarsherlock

8.

android update project --target android-20 --name iZhihuPaper --path /Users/cundong/Documents/github/iZhihuPaper

注意事项

  • BUILD SCUUCESS 如果执行命令后,出现如下所示:
cundongdeMacBook-Pro:~ cundong$ android update project --target android-20 --name SupportLib --path /Users/cundong/Documents/github/SupportLib Updated project.properties Updated project.properties Added file /Users/cundong/Documents/github/SupportLib/build.xml Updated file /Users/cundong/Documents/github/SupportLib/proguard-project.txt It seems that there are sub-projects. If you want to update them please use the --subprojects parameter.

则说明执行成功。

  • 常见BUILD FAILED问题

如果执行后,出现如下提示:

BUILD FAILED /Users/cundong/Documents/github/iZhihuPaper/build.xml:44: The following error occurred while executing this line: /Users/cundong/Documents/github/iZhihuPaper/build.xml:59: The following error occurred while executing this line: /Applications/adt-bundle-mac-x86_64/sdk/tools/ant/build.xml:470: Invalid file: /Users/cundong/Documents/github/SmoothProgressBar/build.xml

则说明它所依赖的工程缺少project.properties、project.properties文件,请先参照步骤1,为其依赖的工程生成project.properties、project.properties文件。

如果遇到以下问题:

BUILD FAILED /Applications/adt-bundle-mac-x86_64-20140624/sdk/tools/ant/build.xml:601: The following error occurred while executing this line: /Applications/adt-bundle-mac-x86_64-20140624/sdk/tools/ant/build.xml:653: The following error occurred while executing this line: /Applications/adt-bundle-mac-x86_64-20140624/sdk/tools/ant/build.xml:698: null returned: 1

则需要手动删除该工程的gen、bin目录。

配置 local.properties

配置local.properties文件,增加ant.dir、target.dir:

sdk.dir=/Applications/adt-bundle-mac-x86_64/sdk ant.dir=/Applications/apache-ant-1.9.4 target.dir=/Users/cundong/Documents/ZhihuPaperRelease

ant.dir为ant安装目录,target.dir为批量打包的apk存储目录。

详细例子可参考:ZhihuPaper/local.properties

3 添加 ant.properties文件

1.将签名文件(*.keystore)拷贝到工程的目录。

2.在根目录下新建ant.properties文件。

key.store=android.keystore key.alias=android [email protected]# [email protected]# market_channels=Wandoujia,360 app_name=ZhihuPaper app_version=2.1

说明: key.store为签名文件; key.alias为签名文件别名; key.store.password、key.alias.password为密码; market_channels为我们需要生成的所有渠道列表,使用“,”分开;app_name为生成apk的文件名; app_version为生成apk的版本号;

详细例子可参考:ZhihuPaper/ant.properties

配置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,如果这么目录不存在,则会提示报错信息。

详细例子可参考:ZhihuPaper/build.xml

4 配置proguard-project.txt文件

proguard-project.txt,即混淆时的配置文件。

  • 引用的第三方jar包,不要混淆;
  • 自己写的控件,即需要配置在layout文件中的Widget,不要混淆;
  • Android的基础组件,不要混淆。
  • 需要在project.properties中配置:proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

详细例子可参考: ZhihuPaper/proguard-project.txt

5 打包

在iZhihuPaper中创建一个批处理文件,Mac为.sh文件,Window为.bat文件:

 cd /Users/cundong/Documents/github/iZhihuPaper ant deploy pause

调用这个批处理文件,即可进行批量打混淆后的渠道包。

时间: 2024-08-17 12:09:21

Android Ant 批量多渠道打包实例的相关文章

Android Ant 和 Gradle 打包流程和效率对比

一.Ant 打包:(下载ant.配置环境变量就不说了) 1.进入命令行模式,并切换到项目目录,执行如下命令为ADT创建的项目添加ant build支持: android update project -p . -t  "android-17" 2.build脚本默认target是help,所以会显示如上信息,修改target为debug或release就可以像无ant时一样编译.生成以及调试了. 3.使用release时  在local.properties添加签名信息 #keysto

Android快速批量多渠道包的“蛋生”

对于安卓程序猿朋友来说,每当发布新版本的APP,均会分发到各大应用市场,比如腾讯应用宝,豌豆荚和360手机助手等.为了让程序猿同志们更好的区分不同的应用市场,掌握各市场APP发展状况,为了更多体现世界对程序猿的关爱,我们的多渠道包诞生啦.                                                                          一.Android多渠道打包机制 Android多渠道打包机制的原理为:向分发到不同市场的APP中打入对应的市场标

【Android Studio探索之路系列】之十:Gradle项目构建系统(四):Android Studio项目多渠道打包:

作者:郭孝星 微博:郭孝星的新浪微博 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell 由于国内Android市场渠道众多,为了统计每个渠道的下载以及数据统计,需要我们针对每个渠道进行单独打包,而Gradle可以帮助我们完成自动多渠道打包. 一多渠道打包流程 (1) 在AndroidManifest.xml中配置PlaceHolder <meta-data and

借腾讯开源 VasDolly,谈谈 Android 签名和多渠道打包的原理!

一.前言 Hi,大家好,我是承香墨影! 当我们需要发布一款 App 到应用市场的时候,一般需要我们针对不同的市场生产不同的渠道包,它们使用的是同一套代码,只是会包含一些各自的渠道信息,用于我们做数据分析. 前几天,企鹅电竞团队开源了自己的 Android Apk 多渠道打包工具:VasDolly,比美团的 Walle 更全面一些. 正好借这个机会,来讲解一下 Android 的不同版本的签名机制的差异. 二.Android 的签名 2.1 应用签名 通过对 Apk 进行签名,开发者可以证明对 A

Android Studio + gradle多渠道打包

通过工具栏的Build->Build Apk 好像只能打包第一个Module(eclipse里面是Project的概念),怎么多渠道打包呢?目前好像只能一个一个的打 首先在清单文件里设置个变量: 这个变量可以在Application里这样获得,从而app内就知道是哪个渠道了, 然后在build.gradle里设置productFlavors 如yingyongbao就填充到清单文件里面的CHANEL_NAME变量了 找到Gradle任务单元,进入build单元,右键run,就能生产出该渠道的ap

Android Ant批量打包

一.配置Ant环境变量 JAVA_HOME=/software/jdk1.6.0_24 ANT_HOME=/software/apache-ant-1.9.2 Android_Home=/software/android-sdk-linux export JAVA_HOME ANT_HOME Android_Home PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$ANDROID_HOME/tools$Android_Home/tools/proguard/bin:$/so

Android Ant 和 Gradle 打包流程和效率对照

一.Ant 打包:(下载ant.配置环境变量就不说了) 1.进入命令行模式,并切换到项目文件夹.运行例如以下命令为ADT创建的项目加入ant build支持: android update project -p . -t  "android-17" 2.build脚本默认target是help.所以会显示如上信息,改动target为debug或release就能够像无ant时一样编译.生成以及调试了. 3.使用release时  在local.properties加入签名信息 #key

Android 使用 Gradle 多渠道打包

安卓开发完毕.对于一个开放应用而言,我们须要公布到不同的应用市场,同一时候我们也须要统计不同市场的用户下载量. (通过启动应用后获取不同市场apk中的不同值来区分) 以下用一个详细的实例来说明: 1.在AndroidManifest.xml的application内加入meta-data标签 <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:

Android studio Gradle 多渠道打包

为了统计各个渠道的数据,例如下载量等统计,就要针对不同渠道打包.现在是用ant 打包的,觉得是时候换掉了. 开始打包: 1.在AndroidManifest.xml 中写上下面这段PlaceHolder <meta-data android:name="ChannelName" android:value="${ChannelName}" /> 2.在app的 build.gradle 设置productFlavors productFlavors {