美文网首页
使用Ant编译打包Android项目

使用Ant编译打包Android项目

作者: 5e1b18effb55 | 来源:发表于2016-10-19 15:39 被阅读0次

    在Eclipse下的android项目,构建工具使用的是ant,而在Android Studio下的android项目,构建工具选择的是gradle,由于我在手的项目是Eclipse项目,所以,研究了一下ant。。
    常见的,一个应用打包时,需要针对不同应用市场做数据统计,而应用市场又比较多,一个一个针对性的打包又比较麻烦,那么就有人想到在编译打包之前,改变特定文件的特定代码,是的打包后的apk携带的key值与代码里的不一样,也有很多对应的多渠道打包的第三方插件,例如蓝贝壳儿,360什么的,但是,毕竟是第三方,自己用起来怎么也不放心,于是就有了下文。。
    首先要知道,Android SDK提供了打包所需要的Ant,但是,是一个阉割的,那么我们要纯的,纯洁的,,就要到官网上自己下载了(http://ant.apache.org/bindownload.cgi) ,安装到自己的电脑,配置好环境变量(我的叫ANT_HOME),在path中添加上
    %ANT_HOME%/bin;%ANT_HOME%/lib;
    还需要一个渠道jar,百度ant-contrib就好了,把它放在ant的lib文件夹下,环境就算搞定了。。
    这时候去小黑框试试ant命令能不能用呀~~
    如果一切没问题,那么进入到项目的目录下,按住shift+鼠标右键,打开小黑框,输入
    android update project -n (project name) -p .
    括号和括号里的换成你的项目名称,这样就可以在你的项目里面生成一个build.xml文件了,打开看看,里面大概是下面的样子(注释已经删除,实在太多)

    <?xml version="1.0" encoding="UTF-8"?>
    <project
        name="android"
        default="help" >
        <property file="local.properties" />
        <property file="ant.properties" />
        <property environment="env" />
        <condition
            property="sdk.dir"
            value="${env.ANDROID_HOME}" >
            <isset property="env.ANDROID_HOME" />
        </condition>
        <loadproperties srcFile="project.properties" />
        <fail
            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
            unless="sdk.dir" />
        <import
            file="custom_rules.xml"
            optional="true" />
        <import file="${sdk.dir}/tools/ant/build.xml" />
    </project>
    

    可以看到,里面的

    property

    标签引入了外部文件,但是这两个外部XML文件并不在项目中,所以要手动创建,创建完之后,他们分别是干嘛的,可以百度,一大堆呢
    总之,ant.properties里面配置的向下面

    apk.dir=./apk

    ,可以配置一些打包使用到的签名文件信息,例如文件名,密码什么的,也可以配置一些需要的字段,打包时候从这里面取,取得方式是

    ${apk.dir}

    在一个文件是

    local.properties

    l里面配置了你的SDK路径,,像这样

    sdk.dir=D:\Users\Sdk

    还可以看到

    import

    标签引入了两个文件,其中一个是SDK的build.xml文件,另一个是一个叫

    custom_rules.xml

    的文件,这个也需要自己创建,里面就是写一些编译时候的规则,当然,可以直接讲规则写在build.xml文件中,但是那样做会是的build.xml文件太冗余了,不还维护,所以放在外面,通过导入的方式比较好。。
    然后就可以写规则了,怎么写?上代码你看看就会了。。

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="custom_rules" >
        <!-- 引用ant-contlib这个扩展包,声明一下 -->
        <taskdef resource="net/sf/antcontrib/antcontrib.properties" >
            <classpath>
                <pathelement location="${ant.ANT_HOME}/lib/ant-contrib-1.0b3.jar" />
            </classpath>
        </taskdef>
        <!-- 定义一个时间变量,打完包后跟名字一起命名apk -->
        <tstamp>
            <format
                pattern="yyyyMMddhhmm"
                property="pktime"
                unit="hour" />
        </tstamp>
        <!-- 创建apk存放目录 -->
        <mkdir dir="${apk.dir}" >
        </mkdir>
        <import    file="buildfiles/1067.xml"   optional="true" description="彩虹谷"/>
        <!-- 打包生产环境命令就用这个 -->
        <target name="all" >
            <antcall target="1067" />
        </target>
    </project>
    

    引入了一个1067.xml的文件,他这样:

    <!-- +++++++++++++++++++++++++++++++++ 修改文件 +++++++++++++++++++++++++++++++ -->
    <!-- 修改应用名 -->
    <replaceregexp byline="false"  encoding="UTF-8" flags="g" >
        <regexp pattern="__APPNAME__" />
        <substitution expression="哈哈哈哈哈" />
        <fileset  dir="res/values/" >
            <include name="**/*.xml"></include>
        </fileset>
    </replaceregexp>
    <!-- 修改应用图标 -->
    <delete file="res/drawable-hdpi/ic_launcher.png"/>
    <copy tofile="res/drawable-hdpi/ic_launcher.png" file="saas_hdpi/1067.png"/>
    <!-- +++++++++++++++++++++++++++++++++ 打包 +++++++++++++++++++++++++++++++ -->
    <property
        name="out.final.file"
        location="${apk.dir}/哈哈哈哈哈_${pktime}.apk" />
    <antcall target="clean" />
    <antcall target="release" />
    ${pktime}
    

    就是上面定义的时间戳喽,,,是在不爱写太多字,能说话就好了。。。

    完事之后,在小黑框使用ant命令执行
    target
    对应的name就好了,一个target可以使用好几个antcall。。。这样就可以一次打包好多应用了。。

    相关文章

      网友评论

          本文标题:使用Ant编译打包Android项目

          本文链接:https://www.haomeiwen.com/subject/lryxuttx.html