由于公司内置的需要,我们的程序要针对不同的厂商打不同的apk,而且不同厂商之间还有一些差别,所以我在原来打包的基础上进行了扩展,支持不同厂商。
为了便于扩展和维护,我把特殊厂商的代码与原来正常打包的代码进行分离,同时让打包者可以自动选择当前要打包的厂商。
改动的几个地方:
1. 把不同厂商要改动的地方写在宏(就相当于java里的方法)里面,而这些所有的宏,都放在一个当独的special_company.xml文件里:
<?xml version="1.0" encoding="gbk"?>
<project>
<!-- 宏:打A厂商的包 -->
<macrodef name="aPack">
<sequential>
<!-- 改manifest文件里的包名(直接改) -->
<echo>改manifest文件里的包名(直接改)</echo>
<replaceregexp file="${project.58Client}/AndroidManifest.xml"
encoding="utf-8"
match="package="(.*?)""
replace=" package="xxxx" "
byline="true"/>
<!-- 隐式意思的action字符串(要用搜索来改) -->
<echo>隐式意思的action字符串(要用搜索来改)</echo>
<replaceregexp encoding="utf-8" flags="g"
match="xxxx.intent.action.DOWNAPK"
replace="xxxx.intent.action.DOWNAPK">
<fileset dir="${project.58Client}">
<include name="**/*.java"/>
<include name="**/*.xml"/>
</fileset>
</replaceregexp>
<!-- 改xml文件里使用自定义属性的命名空间(搜索http://schemas.android.com/apk/res/xxxx来改) -->
<echo>改xml文件里使用自定义属性的命名空间(搜索http://schemas.android.com/apk/res/xxxx来改)</echo>
<replaceregexp encoding="utf-8" flags="g"
match="http://schemas.android.com/apk/res/xxxx"
replace="http://schemas.android.com/apk/res/xxxx">
<fileset dir="${project.58Client}">
<include name="**/*.xml"/>
</fileset>
</replaceregexp>
<!-- 改java文件里的import xxxx.R的引用(搜索import xxxx.R来改,不要搜索import xxxx.R;来改,还有import xxxx.R.color等等)-->
<echo>改java文件里的import xxxx.R的引用(搜索import xxxx.R来改,不要搜索import xxxx.R;来改,还有import xxxx.R.color等等)</echo>
<replaceregexp encoding="utf-8" flags="g"
match="import xxxx.R"
replace="import xxxx.R">
<fileset dir="${project.58Client}">
<include name="**/*.java"/>
</fileset>
</replaceregexp>
<!-- 给在xxxx包下的java文件添加import xxxx.R;-->
<echo>给在xxxx包下的java文件添加import xxxx.R;</echo>
<replaceregexp file="${project.58Client}/src/xxxx/AppHttpApiV1.java"
encoding="utf-8"
match="package xxxx;"
replace="package xxxx;import xxxx.R;"
byline="true"/>
</sequential>
</macrodef>
<!-- 宏:打B厂商的包 -->
<macrodef name="bPack">
<sequential>
<!-- 换图标 -->
<copyfile src="resource/b/icon.png" dest="${project.58Client}/res/drawable/icon.png" forceoverwrite="true"/>
</sequential>
</macrodef>
</project>
在这个文件里,有几个要注意的地方:
*. 在这个独立的文件里,一定不要忘了加<project>标签,这个是必需的
*. 在使用ant替换命令replaceregexp时,在我们的查找范围里有很多要进行替换时,默认情况下,只会给我们替换其中的一部分,不会是我们想的那样,把所有查找到的都进行替换,解决办法是:加上属性flags="g",这个属性的意思就是把查找到的,都时行替换。
*. 替换后的文件的编码,默认情况下,是与运行ant命令的系统有关,如果为windows系统,则为gbk编码,如果为linux系统,则为utf-8编码。所以如果你的代码的编码原来就是utf-8,如果还想在windows里运行ant命令,在替换的命令里要加上encoding="utf-8"
2. 把宏写好后,就要把代码链接到原来的build.xml文件上,这个厂商的改动,是在代码从svn上下载下来后,就要执行的。
*. 在build.xml文件里使用这些宏之前,要先引入这个文件:
<!--引用特殊包的宏-->
<import file="special_company.xml" />
*. 其次就根据当前的厂商,来选择执行不同的宏,这段代码是在svn标签后
<!-- 打特殊包 -->
<switch value="${which_company}">
<case value="a">
<echo message="a特殊渠道" />
<aPack />
</case>
<case value="b">
<echo message="b特殊渠道" />
<bPack />
</case>
</switch>
*. 最后就是在build.properties文件里进行选择
#是哪个特殊厂商 a, b
which_company=a
*. 同时为把打好后的包,便于区分,我就把生成的文件夹的后面加上了which_company后缀。
其他的打包流程和以前的一样,没有变化。
分享到:
相关推荐
标题中的"Ant自动打包用的"表明我们将讨论的是Ant在软件打包过程中的应用。在Java开发中,打包通常指的是将源代码、资源文件、配置文件等编译成JAR(Java Archive)或WAR(Web Application Archive)文件,以便于...
ant自动打包流程: 1.生成keystore, 签名时要用到. 可参考http://www.cnblogs.com/feisky/archive/2010/01/17/1650076.html 2.更改localproperties中的sdk.dir, 为你机器上环境的安装路径 3.更改ant下的路径, 可参考...
Ant自动打包SDK脚本是Java开发中常用的一种自动化构建工具,它基于Apache Ant,一个用Java编写的构建工具,能够帮助开发者实现项目的编译、测试、打包和部署等一系列任务的自动化。这个脚本专为SDK开发者设计,可以...
在Android应用开发中,构建和打包过程是必不可少的环节,特别是在多渠道发布时,需要针对不同的市场或平台生成定制的APK。...通过理解和配置Ant脚本,你可以有效地管理和自动化整个打包过程,提高开发效率。
2. **自动化构建**:通过编写XML格式的构建脚本(build.xml),Ant可以自动化处理编译、资源处理、签名、优化和打包等一系列过程。这大大提高了工作效率,减少了人为错误。 3. **灵活的配置**:Ant脚本允许开发者...
本文将详细介绍如何利用Ant来自动化打包Android应用(APK)。 首先,你需要在Android项目中设置Ant环境。确保你已经安装了Java Development Kit (JDK) 和Apache Ant。Ant的配置文件通常位于项目的根目录下,名为`...
Ant是一个基于Java的构建工具,它使用XML来描述项目构建过程,能够自动化执行编译、测试、打包等任务。下面将详细介绍如何使用Ant来批量打包Android应用。 首先,确保你已经安装了以下基本环境: 1. Java ...
本篇文章将详细介绍如何使用Ant进行多渠道自动打包,以及解决"appt没找到"的问题。 首先,`Ant`通过构建脚本(通常是`build.xml`)来定义项目的构建过程。在Android应用开发中,这个脚本会包含编译源代码、生成APK...
ant 涉及第三方包问题 打包第三方包 或者添加第三方包 ant 涉及第三方包问题 打包第三方包 或者添加第三方包 ant 涉及第三方包问题 打包第三方包 或者添加第三方包 ant 涉及第三方包问题 打包第三方包 或者添加第三...
在IT行业中,自动化是提升效率的关键,而"ANT批量打包工具及教程"正是为了实现这一目标。Apache Ant是一个由Java编写的开源构建工具,它基于XML来定义项目构建过程,可以执行编译、测试、打包等多种任务。在这个教程...
Java项目中的Ant打包脚本是开发过程中的一个重要环节,它使得开发者能够自动化构建、测试和部署应用程序。Ant是一个基于XML的构建工具,由Apache软件基金会开发,它在Java社区广泛使用,替代了早期的Makefile,因为...
**Ant编译打包详解** Ant 是 Apache 软件基金会的一个开源项目,它是一个基于Java的构建工具,类似于Make,但更为现代且专为Java设计。Ant使用XML来描述构建过程,包括编译、测试、打包和部署等任务,使得开发者...
3. **定义任务(Tasks)**:Ant通过任务来执行具体的操作,例如`javac`用于编译Java源代码,`copy`用于复制文件,`jar`用于创建JAR包,`war`则用于打包Web应用。 4. **Web应用结构**:在打包Web应用时,理解标准的...
标题中的“ant批量打包脚本”指的是使用Apache Ant工具编写的一段自定义脚本,该脚本能够自动化处理一系列打包操作,而不是手动一个接一个地进行。这种脚本通常会根据不同的配置参数(如渠道标识、版本号等)生成...
一个普通java程序用ant打包的列子,完整的,里面采用的是eclipse自带的编译插件进行的打包,需要结合eclipse中的插件一起使用
在Android开发过程中,"安卓自动打包ant"是一个关键步骤,它涉及到如何利用Apache Ant工具自动化构建和打包Android应用(APK)。Apache Ant是一种基于Java的构建工具,它允许开发者通过XML配置文件定义任务来编译、...
build是在build_with_bat的基础上实现的,主要是在compile和dex部分增加了第三jar的打包。 build_mulity_channel是多渠道打包脚本。该脚本需要ant-contrib-1.0b3.jar的支持。包中已包含,需要将其放到ant的lib...
标题中的“ant打包”指的是使用Apache Ant工具进行软件构建的过程。Apache Ant是一个Java库和命令行工具,其任务是驱动构建过程,它基于XML来定义项目任务,使得构建过程可配置且可重复执行。 在软件开发中,打包是...
Ant是Java开发中的一个构建工具,它以XML格式定义任务,可以自动化编译、测试、打包等流程。在这个过程中,开发者通常会创建一个名为build.xml的配置文件,该文件包含了构建过程的详细步骤。 以下是一些关于Ant和...