Android Ant 批量多渠道打包实例

2024-04-06 04:08

本文主要是介绍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
key.store.password=Cundong123456!@#
key.alias.password=Cundong123456!@#
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>  <replaceregexpencoding="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

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

原文地址:https://github.com/cundong/blog/blob/master/Android%20Ant%20%E6%89%B9%E9%87%8F%E5%A4%9A%E6%B8%A0%E9%81%93%E6%89%93%E5%8C%85%E5%AE%9E%E4%BE%8B.md

这篇关于Android Ant 批量多渠道打包实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/878959

相关文章

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

java String.join()方法实例详解

《javaString.join()方法实例详解》String.join()是Java提供的一个实用方法,用于将多个字符串按照指定的分隔符连接成一个字符串,这一方法是Java8中引入的,极大地简化了... 目录bVARxMJava String.join() 方法详解1. 方法定义2. 基本用法2.1 拼接

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

Java如何从Redis中批量读取数据

《Java如何从Redis中批量读取数据》:本文主要介绍Java如何从Redis中批量读取数据的情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一.背景概述二.分析与实现三.发现问题与屡次改进3.1.QPS过高而且波动很大3.2.程序中断,抛异常3.3.内存消

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

Maven项目打包时添加本地Jar包的操作步骤

《Maven项目打包时添加本地Jar包的操作步骤》在Maven项目开发中,我们经常会遇到需要引入本地Jar包的场景,比如使用未发布到中央仓库的第三方库或者处理版本冲突的依赖项,本文将详细介绍如何通过M... 目录一、适用场景说明​二、核心操作命令​1. 命令格式解析​2. 实战案例演示​三、项目配置步骤​1

MySQL数据库实现批量表分区完整示例

《MySQL数据库实现批量表分区完整示例》通俗地讲表分区是将一大表,根据条件分割成若干个小表,:本文主要介绍MySQL数据库实现批量表分区的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录一、表分区条件二、常规表和分区表的区别三、表分区的创建四、将既有表转换分区表脚本五、批量转换表为分区

Java List排序实例代码详解

《JavaList排序实例代码详解》:本文主要介绍JavaList排序的相关资料,Java排序方法包括自然排序、自定义排序、Lambda简化及多条件排序,实现灵活且代码简洁,文中通过代码介绍的... 目录一、自然排序二、自定义排序规则三、使用 Lambda 表达式简化 Comparator四、多条件排序五、