Android最新ant打包build脚本

来源:互联网 发布:哥伦比亚的倒影知乎 编辑:程序博客网 时间:2024/06/05 04:15
目前看到网上很多打包的文章,使用了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/sdkproject.dir=/Users/luffy/Documents/git/Test-android

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

第二:ant.properties文件

application.package=com.test.helloant.project.name=testjava.encoding=utf-8jar.libs.dir=libsbuild.first=falsemarket_channels=release,360Market,qqMarket,leMarket,gita2Marketkey.alias=testaliaskey.alias.password=test123456key.store.password=test123456key.store=/Users/luffy/Documents/test/test.keystoreant-contrib=/usr/share/locale/apache-ant-1.9.4/lib/ant-contrib-1.0b3.jarout.absolute.dir=/Users/luffy/Documents/version/testgos.path=/Users/luffy/Documents/versionapp_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 命令, 就可以同时生成多个渠道的包了




0 0
原创粉丝点击