• 简单的ant打包,修改渠道号


    昨天在网上看了ant打包,网上写的乱七八糟,而且build.xml文件那么多东西,看的真心烦,花了两小时重新整理了下,改动的地方不大,步骤也简单,通俗易懂。

    言归正传:

    1.ant支持,要安装什么你懂得,不懂自己搜下,

    a) 配置android和ant的环境变量

    export ANDROID_HOME=/Users/Stay/Desktop/develop/android-sdk-mac_x86/
    export PATH=${PATH}:${ANDROID_HOME}/platform-tools
    export PATH=${PATH}:${ANDROID_HOME}/tools
    export ANT_HOME=/Users/Stay/Desktop/develop/ant/apache-ant-1.8.4
    export PATH=${PATH}:${ANT_HOME}/bin

    2.我用ant自带的ant loop,如果不支持的下载个ant-contrib-1.0b3.jar放sdk的tool/lib包下

    3.生成一个简单的build.xml,本身sdk/tool/ant 下有个完整的build.xml,我们只要基于它创建一个简单的build.xml即可,不需要复制过来,这样你看的麻烦。

    a) android update project -p xxx     (xxx为项目路径)

    mb-zhst:~ Stay$ android update project -p /Users/Stay/Documents/workspace/waterfall
    Updated local.properties
    No project name specified, using Activity name 'MainActivity'.
    If you wish to change it, edit the first line of build.xml.
    Added file /Users/Stay/Documents/workspace/waterfall/build.xml
    Updated file /Users/Stay/Documents/workspace/waterfall/proguard-project.txt
    It seems that there are sub-projects. If you want to update them
    please use the --subprojects parameter.

     现在看你的项目,根目录下自动生成了build.xml和ant.properties

    其实这个时候你就已经可以ant debug或者ant release 进行打包了,只不过还没改渠道号而已

    如果要用ant release,那么你的key的就要准备好

    在ant.properties里对key进行声明

    key.store=/Users/Stay/Desktop/xxx.keystore
    key.store.password=xxx
    key.alias=stay
    key.alias.password=xxx

    b) 打开build.xml看下

    <!--
            Import per project custom build rules if present at the root of the project.
            This is the place to put custom intermediary targets such as:
                -pre-build
                -pre-compile
                -post-compile (This is typically used for code obfuscation.
                               Compiled code location: ${out.classes.absolute.dir}
                               If this is not done in place, override ${out.dex.input.absolute.dir})
                -post-package
                -post-build
                -pre-clean
        -->
        <import file="custom_rules.xml" optional="true" />

     里面import了一个custom_rules.xml,这个在自己project的根目录是没有的,如果你想在打包前做些额外的操作,比如对channel的修改,就自己创建一个custom_rules.xml在根目录,这样当你编译的时候会去执行custom_rules里的操作

    下面是我自己的

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="custom_rules" >
    
        <taskdef resource="net/sf/antcontrib/antcontrib.properties" >
            <classpath>
                <pathelement location="lib/ant-contrib-1.0b3.jar" />
            </classpath>
        </taskdef>
    
        <target name="deploy" >
            <foreach
                delimiter=","
                list="${market_channels}"
                param="channel"
                target="modify_manifest" >
            </foreach>
        </target>
    
        <target name="modify_manifest" >
           <replaceregexp flags="g" byline="false">  
            <regexp pattern="android:value=&quot;(.*)&quot; android:name=&quot;UMENG_CHANNEL&quot;" />  
                <substitution expression="android:value=&quot;${channel}&quot; android:name=&quot;UMENG_CHANNEL&quot;" />  
               <fileset
                    dir=""
                    includes="AndroidManifest.xml" />
            </replaceregexp>
            <property
                name="out.final.file"
                location="${apk.dir}/XXX_${channel}.apk" />
            <antcall target="clean" />
            <antcall target="release" />
        </target>
    </project>

     下面我来做下解释

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="custom_rules" >
    <!--     声明ant loop ,这里直接用ant的循环功能,批处理什么的又要多写代码,而且我也不熟 -->
        <taskdef resource="net/sf/antcontrib/antcontrib.properties" >
            <classpath>
                <pathelement location="lib/ant-contrib-1.0b3.jar" />
            </classpath>
        </taskdef>
    <!-- 这里相当于一个方法把,(表示ant不会,只能看懂= =) ,以后可以用命令行 ant deploy 来表示批量打包 -->
    <!-- ${market_channels} 要在local.properties里声明,并用,来分隔你要打包的channel名 -->
    <!-- 比如我的local.properties里是这样写的   market_channels=Google,Gfan,AnZhi,MuMayi -->
        <target name="deploy" >
            <foreach
                delimiter=","
                list="${market_channels}"
                param="channel"
                target="modify_manifest" >
            </foreach>
        </target>
    <!-- 修改manifest.xml里的渠道名,如果你要改其他文件,举一反三把 -->
    <!-- regexp pattern是正则匹配,这里双引号要用&quot;而不是\ -->
    <!-- substitution expression 是你要替换的的channel名-->
    <!-- 打包完毕后要把apk移动到一个指定的目录把,你可以在sdk/tools/ant/build.xml搜下out.final.file这个property在哪用到的-->
    <!-- <property name="out.final.file" location="${apk.dir}/XXX_${channel}.apk" />  ${apk.dir}表示你要指定的apk目录 XXX表示你要定义apk名和${channel}渠道号-->
    <!-- <antcall target="clean" /> <antcall target="release" /> release之前要调下clean,不然以后改的channel名不生效,你懂得-->
        <target name="modify_manifest" >
           <replaceregexp flags="g" byline="false">  
            <regexp pattern="android:value=&quot;(.*)&quot; android:name=&quot;UMENG_CHANNEL&quot;" />  
                <substitution expression="android:value=&quot;${channel}&quot; android:name=&quot;UMENG_CHANNEL&quot;" />  
               <fileset
                    dir=""
                    includes="AndroidManifest.xml" />
            </replaceregexp>
            <property
                name="out.final.file"
                location="${apk.dir}/XXX_${channel}.apk" />
            <antcall target="clean" />
            <antcall target="release" />
        </target>
    </project>
     ok,所有的配置都弄完了,如果还要改其他东西,举一反三把,额,有问题自己解决把,我不会ant,我只是根据自己的需求上网查的,你如果要问我命令啥的,我真心不会。

    最后,打包命令

    打开命令行: ant deploy

    等把,apks都会出来的

    p.s. 如果你有引入其他libary,如果它们没有build.xml给它们也生成一个,同3.a)

  • 相关阅读:
    计算机网络中协议相关的问题(转)
    Vs2013打开项目时,一直处理等待状态,并显示“Microsoft Visual Studio正忙”的提示窗,处理方法(转)
    ASP.NET Core 2.2 十九. Action参数的映射与模型绑定(转)
    ASP.NET Core 2.2 十八.各种Filter的内部处理机制及执行顺序(转)
    ASP.NET Core 2.2 : 十七.Action的执行(Endpoint.RequestDelegate后面的故事)(转)
    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案(转)
    【Leetcode】771. Jewels and Stones
    【Leetcode】50. Pow(x, n)
    【Leetcode】 328. Odd Even Linked List
    【leetcode】59.Spiral Matrix II
  • 原文地址:https://www.cnblogs.com/stay/p/3102027.html
Copyright © 2020-2023  润新知