Android最新ant打包build脚本

目前看到网上很多打包的文章,使用了apkbuilder之类的,如下:
<!-- 使用到的命令(当前系统为windows,如果系统为linux,可将.bat文件替换成相对应的命令) -->  
    <property name="aapt" value="${sdk-platform-tools}/aapt" />  
    <property name="aidl" value="${sdk-platform-tools}/aidl" />  
    <property name="dx" value="${sdk-platform-tools}/dx.bat" />  
    <property name="apkbuilder" value="${sdk-tools}/apkbuilder.bat" />  
    <property name="jarsigner" value="${env.JAVA_HOME}/bin/jarsigner" />  
    <property name="zipalign" value="${sdk-tools}/zipalign.exe" /> 

其实这些东西在最新的sdk里面是没有的,很多朋友都表示不知道如何去写这个脚本文件。

闲话少说,直接上干货。

准备4个文件,ant.properties,local.properties,custom_rules.xml,build.xml[当然,前提是你的项目已经基于Ant构建了哈,如果不知道,就百度一下]

manifest文件里面的节点必须有:

<meta-data
            android:name="BaiduMobAd_CHANNEL" android:value="BaiduMobAd_CHANNEL_VALUE" >
        </meta-data>

第一:local.properties文件

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.

# location of the SDK. This is only used by Ant
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=/Users/luffy/Documents/adt/sdk
project.dir=/Users/luffy/Documents/git/Test-android

很简单的,第一句是sdk的路径,第二句是项目的路径

第二:ant.properties文件

application.package=com.test.hello
ant.project.name=test
java.encoding=utf-8
jar.libs.dir=libs
build.first=false
market_channels=release,360Market,qqMarket,leMarket,gita2Market
key.alias=testalias
key.alias.password=test123456
key.store.password=test123456
key.store=/Users/luffy/Documents/test/test.keystore
ant-contrib=/usr/share/locale/apache-ant-1.9.4/lib/ant-contrib-1.0b3.jar
out.absolute.dir=/Users/luffy/Documents/version/test
gos.path=/Users/luffy/Documents/version

app_version=2.0.2
这个主要要注意的是 ant-contrid ,它是用来循环打包的插件,如果在最新的ant里面没有,就去单独下载下来,放入ant的lib目录里
然后是out.absolute.dir,这是循环打包时,临时文件的存放路径
最后是gos.path 这是最终版本的存放路径。

第三:custom_rules.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 渠道包打包脚本  ant deploy -->
<project name="custom_rules" >

    <taskdef resource="net/sf/antcontrib/antcontrib.properties" >

        <classpath>

            <pathelement location="${ant-contrib}" />
        </classpath>
    </taskdef>

    <!-- 循环打包 -->

    <target name="deploy" >

        <antcall target="clean" />

        <foreach
            delimiter=","
            list="${market_channels}"
            param="channel"
            target="modify_manifest" >
        </foreach>
    </target>

    <target name="modify_manifest" >

        <replaceregexp
            encoding="utf-8"
            file="AndroidManifest.xml"
            match="BaiduMobAd_CHANNEL_VALUE"
            replace="${channel}" />
        <antcall target="release" />

        <copy tofile="${gos.path}/${ant.project.name}_${channel}_v${app_version}.apk" >

            <fileset
                dir="${out.absolute.dir}/"
                includes="test-release.apk" />
        </copy>

        <delete includeEmptyDirs="true" >

            <fileset
                dir="${out.absolute.dir}"
                includes="**/*" />
        </delete>

        <replaceregexp
            encoding="utf-8"
            file="AndroidManifest.xml"
            match="${channel}"
            replace="BaiduMobAd_CHANNEL_VALUE" />

        <echo message="===========================" />
    </target>

</project>

第四:build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project
    name="test"
    default="help" >

    <property file="local.properties" />

    <property file="ant.properties" />

    <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>

然后我们整体来解读这两个xml文件,其中build比较简单,就是引入 local.properties,ant properties,custom_rules.xml 和 sdk里面自带的 build.xml
如果你对这个custom脚本文件表示看不懂,教你一个简单的办法。把每一个 target节点,当成java的一个method,方法调用!
我们来看看,里面其实只有两个 target :deploy 和 modify_manifest
那么我们可以这样来理解 deploy,它首先是'调用'了 clean方法来clean项目的缓存[bin目录] 和 执行一行 for循环代码。在for循环里面不断的‘调用’

modify_manifest 方法。

而 modify_manifest 首先用传递进来的渠道号 替换 manifest文件的 BaiduMobAd_CHANNEL_VALUE,然后调用 release 方法来生成apk。此时的apk是存放在临时目录里面,所以它又执行了一个copy代码,把临时目录里面的apk拷贝到另一个文件夹里面,然后再执行一个delete代码清空临时目录,最后再把 替换的渠道号还原为 BaiduMobAd_CHANNEL_VALUE。

最后我们在命令行里面执行 ant deploy 命令, 就可以同时生成多个渠道的包了




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值