`
lxfgrace
  • 浏览: 74361 次
  • 性别: Icon_minigender_2
  • 来自: 重庆
社区版块
存档分类
最新评论

ant 打不同渠道包

    博客分类:
  • ant
 
阅读更多
由于公司内置的需要,我们的程序要针对不同的厂商打不同的apk,而且不同厂商之间还有一些差别,所以我在原来打包的基础上进行了扩展,支持不同厂商。

  为了便于扩展和维护,我把特殊厂商的代码与原来正常打包的代码进行分离,同时让打包者可以自动选择当前要打包的厂商。



改动的几个地方:

  1. 把不同厂商要改动的地方写在宏(就相当于java里的方法)里面,而这些所有的宏,都放在一个当独的special_company.xml文件里:
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=&quot;(.*?)&quot;" 
                    replace=" package=&quot;xxxx&quot; " 
                    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文件里使用这些宏之前,要先引入这个文件:
Xml代码  收藏代码

    <!--引用特殊包的宏--> 
        <import file="special_company.xml" /> 

    *. 其次就根据当前的厂商,来选择执行不同的宏,这段代码是在svn标签后
Xml代码  收藏代码

    <!-- 打特殊包 --> 
            <switch value="${which_company}"> 
                <case value="a"> 
                    <echo message="a特殊渠道" /> 
                    <aPack /> 
                </case> 
                <case value="b"> 
                    <echo message="b特殊渠道" /> 
                    <bPack /> 
                </case> 
    </switch> 

    *. 最后就是在build.properties文件里进行选择
Xml代码  收藏代码

    #是哪个特殊厂商 a, b 
    which_company=a 

    *. 同时为把打好后的包,便于区分,我就把生成的文件夹的后面加上了which_company后缀。



其他的打包流程和以前的一样,没有变化。
分享到:
评论

相关推荐

    ant 多渠道自动打包

    多渠道打包是指为不同的应用市场或设备创建具有不同渠道标识的APK,如Google Play、华为应用市场等,每个渠道可能需要不同的配置参数。 在描述中提到的"appt没找到"问题,通常是因为Ant在执行打包过程时找不到特定...

    Ant打多渠道包

    在Android应用开发中,"Ant打多渠道包"是一个关键步骤,它允许开发者为不同的应用市场或设备制造商创建定制的APK文件。Ant是Apache开源组织的一个Java构建工具,它提供了一种自动化编译、测试和部署应用的方式。在...

    使用Ant批量多渠道打包Android

    在Android应用开发中,发布应用到不同的市场时,通常需要为每个市场创建具有特定标识(如渠道ID)的单独APK,以便跟踪不同渠道的下载数据。Ant作为Apache的一个构建工具,可以有效地帮助开发者实现这一目标。本资源...

    Android中使用Ant方式友盟多渠道打包

    在Android开发过程中,为了针对不同的应用分发平台或者合作渠道,开发者通常需要生成多个具有不同渠道标识的APK。友盟作为一个提供统计分析、社会化分享等服务的平台,也支持多渠道打包。在这个场景下,我们可以利用...

    ant多渠道打包配置示例

    当我们谈论"ant多渠道打包配置示例"时,我们指的是使用Apache Ant工具来自动化Android或Java应用的构建过程,并为不同的发布渠道(如Google Play、第三方应用市场或特定的企业内部分发)生成定制的APK文件。Ant是一...

    Ant多渠道 多项目引用 打包Android项目

    本主题将深入探讨如何利用Ant进行多渠道打包和管理多个项目引用,这对于大型复杂项目或者需要针对不同市场发布不同版本的应用至关重要。 首先,Ant是Apache组织开源的一款Java构建工具,它基于XML文件定义构建过程...

    ant 多渠道包混淆 签名

    多渠道包是指同一个应用根据不同的分发渠道(如应用商店、企业内部分发等)进行定制的APK包。每个渠道包通常需要包含特定的渠道标识,以便在运行时识别渠道来源。在Ant构建脚本中,可以通过参数化构建或者替换资源...

    android ant多渠道打包

    在Android应用开发中,为了发布到不同的应用市场,通常需要为每个市场创建一个特定的APK,这被称为“多渠道打包”。Ant是Android的一种构建工具,它可以自动化编译、测试和打包过程,使得多渠道打包变得更为高效。...

    关于Ant多渠道批量打包总结

    本篇文章将深入探讨Ant如何实现多渠道批量打包,以及相关知识点。 **Ant简介** Apache Ant是一个基于Java的构建工具,其设计灵感来源于Make,但使用XML来描述构建过程。Ant通过任务(task)来执行不同的操作,如编译...

    ant分渠道批量打包测试工程

    首先,"ant分渠道批量打包测试工程"意味着我们需要为不同的发布渠道(如iOS的AdHoc、AppStore,Android的Alpha、Beta、Production等)创建单独的打包。这通常涉及到修改配置文件(如Android的build.gradle或iOS的...

    mac下ant打包android

    总之,Mac下使用Ant对Android App进行多渠道打包是一种常见的做法,它允许开发者灵活地定制APK,以满足不同市场的特定需求。通过理解和配置Ant脚本,你可以有效地管理和自动化整个打包过程,提高开发效率。

    移动开发:Android Ant一键自动打多渠道包(xmltask)

    在博文《移动开发:Android Ant一键自动打多渠道包(xmltask)》中,作者详细介绍了如何配置和使用这些工具,包括具体的Ant脚本示例和可能遇到的问题解决方法。对于大型项目或者需要频繁发布不同渠道的团队来说,...

    移动开发:Android Ant一键自动打多渠道包

    Android Ant一键自动打多渠道包是一个高效的方法,它可以帮助开发者节省手动创建每个渠道包的时间和精力。本文将详细介绍如何利用Ant构建工具实现这一目标。 首先,Ant是Apache软件基金会的项目,它是一个Java编写...

    ant批量打包工具

    1. **多渠道支持**:Ant批量打包工具允许开发者为不同渠道创建定制的APK或应用包。例如,在Android开发中,可能需要针对Google Play、华为应用市场、小米商店等不同渠道进行不同的配置,如添加特定的渠道标识符或者...

    最新的Android Sdk 使用Ant多渠道批量打包的实现工程

    在Android开发过程中,为了适应不同的市场环境,我们通常需要对应用进行多渠道打包。这涉及到在APK包中替换特定的渠道标识,以便追踪不同来源的安装数据。Ant作为经典的构建工具,在Android SDK早期阶段被广泛用于...

    android ant 多渠道批量打包,利用ant 可实现多渠道,批量打包。

    你还可以扩展Ant脚本来自动化更多任务,如版本号管理、资源文件替换等,以满足不同渠道的需求。 通过上述步骤,你可以利用Ant实现Android应用的多渠道批量打包,极大地提高了工作效率。在实际开发中,还可以结合...

    Ant脚本打包Android程序的demo 多渠道及第三方JAR打包

    build_mulity_channel是多渠道打包脚本。该脚本需要ant-contrib-1.0b3.jar的支持。包中已包含,需要将其放到ant的lib文件夹下。"&gt;build_with_bat是基于bat脚本实现的。 build是在build_with_bat的基础上实现的,...

    android ant 多渠道混淆打包

    而当需要针对多个渠道(如不同的应用市场)进行打包时,手动操作不仅繁琐且容易出错。这时,我们可以利用Ant构建工具来实现自动化、多渠道混淆打包。下面将详细介绍如何使用Ant进行多渠道打包,并结合混淆策略进行...

    android ant 多渠道批量打包Demo

    在Android开发过程中,为了适应不同的市场推广需求,如Google Play、第三方应用市场或者企业内部分发,往往需要创建多个带有不同渠道标识的APK。"android ant 多渠道批量打包Demo"就是一个解决此类问题的实践案例,...

    android自动化批量打渠道包

    总的来说,Android自动化批量打渠道包是通过配置构建系统(如Gradle或Ant)来实现的,它允许开发者定义多渠道,然后通过脚本或命令行一次性完成所有渠道的打包,极大地提高了工作效率,减少了手动操作的错误。...

Global site tag (gtag.js) - Google Analytics