• ant 打不同渠道包


    引用:http://handsomeliuyang.iteye.com/blog/1283997

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

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

    改动的几个地方:

      1. 把不同厂商要改动的地方写在宏(就相当于java里的方法)里面,而这些所有的宏,都放在一个当独的special_company.xml文件里:

    Xml代码  收藏代码
    1. <?xml version="1.0" encoding="gbk"?>  
    2.   
    3. <project>  
    4.     <!-- 宏:打A厂商的包 -->  
    5.     <macrodef name="aPack">  
    6.        <sequential>  
    7.             <!-- 改manifest文件里的包名(直接改) -->  
    8.             <echo>改manifest文件里的包名(直接改)</echo>  
    9.             <replaceregexp file="${project.58Client}/AndroidManifest.xml"  
    10.                 encoding="utf-8"  
    11.                 match="package=&quot;(.*?)&quot;"  
    12.                 replace=" package=&quot;xxxx&quot; "  
    13.                 byline="true"/>  
    14.                   
    15.             <!-- 隐式意思的action字符串(要用搜索来改) -->  
    16.             <echo>隐式意思的action字符串(要用搜索来改)</echo>  
    17.             <replaceregexp encoding="utf-8" flags="g"  
    18.                 match="xxxx.intent.action.DOWNAPK"  
    19.                 replace="xxxx.intent.action.DOWNAPK">  
    20.                 <fileset dir="${project.58Client}">  
    21.                     <include name="**/*.java"/>  
    22.                     <include name="**/*.xml"/>  
    23.                 </fileset>  
    24.             </replaceregexp>  
    25.               
    26.             <!-- 改xml文件里使用自定义属性的命名空间(搜索http://schemas.android.com/apk/res/xxxx来改) -->  
    27.             <echo>改xml文件里使用自定义属性的命名空间(搜索http://schemas.android.com/apk/res/xxxx来改)</echo>  
    28.             <replaceregexp encoding="utf-8" flags="g"  
    29.                 match="http://schemas.android.com/apk/res/xxxx"  
    30.                 replace="http://schemas.android.com/apk/res/xxxx">  
    31.                 <fileset dir="${project.58Client}">  
    32.                     <include name="**/*.xml"/>  
    33.                 </fileset>  
    34.             </replaceregexp>  
    35.               
    36.             <!-- 改java文件里的import xxxx.R的引用(搜索import xxxx.R来改,不要搜索import xxxx.R;来改,还有import xxxx.R.color等等)-->  
    37.             <echo>改java文件里的import xxxx.R的引用(搜索import xxxx.R来改,不要搜索import xxxx.R;来改,还有import xxxx.R.color等等)</echo>  
    38.             <replaceregexp encoding="utf-8" flags="g"  
    39.                 match="import xxxx.R"  
    40.                 replace="import xxxx.R">  
    41.                 <fileset dir="${project.58Client}">  
    42.                     <include name="**/*.java"/>  
    43.                 </fileset>  
    44.             </replaceregexp>  
    45.               
    46.             <!-- 给在xxxx包下的java文件添加import xxxx.R;-->  
    47.             <echo>给在xxxx包下的java文件添加import xxxx.R;</echo>  
    48.             <replaceregexp file="${project.58Client}/src/xxxx/AppHttpApiV1.java"  
    49.                 encoding="utf-8"  
    50.                 match="package xxxx;"  
    51.                 replace="package xxxx;import xxxx.R;"  
    52.                 byline="true"/>  
    53.        </sequential>  
    54.     </macrodef>  
    55.       
    56.     <!-- 宏:打B厂商的包 -->  
    57.     <macrodef name="bPack">  
    58.        <sequential>  
    59.             <!-- 换图标 -->  
    60.             <copyfile src="resource/b/icon.png" dest="${project.58Client}/res/drawable/icon.png" forceoverwrite="true"/>  
    61.        </sequential>  
    62.     </macrodef>  
    63. </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代码  收藏代码
    1. <!--引用特殊包的宏-->  
    2.     <import file="special_company.xml" />  

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

    Xml代码  收藏代码
    1. <!-- 打特殊包 -->  
    2.         <switch value="${which_company}">  
    3.             <case value="a">  
    4.                 <echo message="a特殊渠道" />  
    5.                 <aPack />  
    6.             </case>  
    7.             <case value="b">  
    8.                 <echo message="b特殊渠道" />  
    9.                 <bPack />  
    10.             </case>  
    11. </switch>  

        *. 最后就是在build.properties文件里进行选择

    Xml代码  收藏代码
    1. #是哪个特殊厂商 a, b  
    2. which_company=a  

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

    其他的打包流程和以前的一样,没有变化。

  • 相关阅读:
    WebApi开启CORS支持跨域POST
    VueJs生产环境部署
    VueJs开发笔记—IDE选择和优化、框架特性、数据调用、路由选项及使用
    微信分享JSSDK-invalid signature签名错误的解决方案
    关于后台系统自动生成的一点思考
    编写高质量代码改善C#程序的157个建议[为类型输出格式化字符串、实现浅拷贝和深拷贝、用dynamic来优化反射]
    编写高质量代码改善C#程序的157个建议[10-12]
    编写高质量代码改善C#程序的157个建议[4-9]
    编写高质量代码改善C#程序的157个建议[正确操作字符串、使用默认转型方法、却别对待强制转换与as和is]
    Oracle初级索引学习总结
  • 原文地址:https://www.cnblogs.com/sode/p/2596892.html
Copyright © 2020-2023  润新知