项目中打包安卓使用的是ant,ant主要就是需要写一个xml,相当于脚本。看了项目中的配置,也蛮好理解的,这里做下记录,方便以后修改。
目录
ant的命令行调用:
ant的命令行调用可以有很多参数,下面介绍这四种,由简单到复杂:
// 第1种——当前目录下查找默认配置build.xml,执行默认的target(build.xml中设置的)
ant
// 第2种——当前目录下查找特定配置build-test.xml,执行默认的target(build-debug.xml中设置的) -buildfile 或-f或-file
ant -buildfile build-test.xml
// 第3种——当前目录下查找特定配置build-test.xml,执行特定target--targetName
ant -buildfile build-test.xml targetName
// 第4种——当前目录下查找特定配置build-test.xml,执行特定target--targetName,指定某属性值
ant -buildfile build-test.xml targetName 属性=属性值
打包android 的.xml示例:
ant的内置任务有如下:
echo exec zip checksum mkdir copy
等具体用法查看 http://ant.apache.org/manual/
下面每一句应该都能看懂,都有注释。
<?xml version="1.0" encoding="UTF-8"?>
<!--创建project。basedir-用于计算所有其他路径的基路径。default-设置默认执行的target名-->
<project basedir="." default="main_symbols" name="mdj">
<!--将环境变量作为property使用,加载的变量名是:env.XXX。例如环境变量中的PATH、JAVA_HOME,加载后的变量名是:env.JAVA_HOME,env.PATH-->
<property environment="env"/>
<!--使用<property file/>设置属性 当前目录下找到下面的文件名-->
<property file="settings.properties"/>
<!--通过name设置属性 BUILD_NUMBER即为当前环境变量中的某一个(jenkins)-->
<property name="RAW_BUILD_NUMBER" value="${env.BUILD_NUMBER}"/>
<!--通过location设置属性 build.dir为settings.properties中设置的 没有relative,即relative=false 所以返回的是绝对路径-->
<property name="build.dir.absolute" location="${build.dir}"/>
<!--定义了<tstamp/>对象后,它便为我们定义了三个属性变量:DSTAMP,TSTAMP,TODAY。你也可以自己定义属性变量-->
<tstamp>
<format pattern="yyyy-MM-dd-kk-mm-ss" property="TIME_STAMP"/>
</tstamp>
<!--target的depends属性 可依赖多个任务 可有条件的依赖-->
<target name="main_symbols" depends="android"/>
<target name="android" depends="build_hotUpate,compile-debug-app"/>
<target name="build_app" depends="build_assetbundle" if="${CreateAPP}">
<target name="writeconfig">
<!-- echo是Ant内置任务 message发送消息-->
<echo message="android app version: ${APP_VERSION}"/>
<echo message="SVNCommitVerison: ${SVNCommitVersion}"/>
<!-- echo是Ant内置任务 file写入消息的文件 append:是否追加到已经存在的文件,默认为false-->
<!-- line.separator是Ant内置属性 换行符-->
<echo message="${APP_VERSION}" file="../../Assets/StreamingAssets/VersionData/ResVersionInfo.txt" append="false"/>
<echo message="${line.separator}" file="../../Assets/StreamingAssets/VersionData/ResVersionInfo.txt" append="true"/>
<echo message="${SVNCommitVersion}" file="../../Assets/StreamingAssets/VersionData/ResVersionInfo.txt" append="true"/>
<echo message="${line.separator}" file="../../Assets/StreamingAssets/VersionData/ResVersionInfo.txt" append="true"/>
<echo message="${HotUpdateResource}" file="../../Assets/StreamingAssets/VersionData/ResVersionInfo.txt" append="true"/>
<echo message="${line.separator}" file="../../Assets/StreamingAssets/VersionData/ResVersionInfo.txt" append="true"/>
<echo message="${CreateAPP}" file="../../Assets/StreamingAssets/VersionData/ResVersionInfo.txt" append="true"/>
</target>
<target name="changebuildtarget">
<echo message="${unity.bin} -projectPath ${dev.dir.absolute} -buildTarget Android -batchmode -quit"/>
<!--使用exec执行shell-->
<exec failonerror="true" executable="${unity.bin}">
<arg line="-projectPath ${dev.dir.absolute}"/>
<arg line="-logFile /dev/stdout"/>
<arg line="-batchmode"/>
<arg line="-quit"/>
<arg line="-buildTarget Android"/>
</exec>
</target>
<target name="encryptDLL">
<exec failonerror="true" executable="${basedir}/encryptDLL.sh"/>
</target>
<target name="build_hotUpate" depends="build_assetbundle,encryptDLL,refreshDLLMD5" if="${HotUpdateResource}">
<!--压缩热更新资源 http://ant.apache.org/manual/Types/zipfileset.html-->
<zip destfile="${android.build.deploy.folder}/${TIME_STAMP}/${DJ_VERSION_STRING}-Android.zip">
<zipfileset dir="${android.update.zip.folder}/ResData"/>
</zip>
<!--生成热更新资源的MD5 http://ant.apache.org/manual/-->
<checksum>
<fileset dir="${android.build.deploy.folder}/${TIME_STAMP}">
<include name="${DJ_VERSION_STRING}-Android.zip"/>
</fileset>
</checksum>
</target>
</project>
都是一个一个target
纯任务传递: main_symbols---》 android---》 build_hotUpate + compile-debug-app
build_hotUpate ---》 如果是需要热更新资源的话 就执行这个 target
前置task:
build_assetbundle 见下面
encryptDLL ---》 执行一个加密 dll 的脚本 encryptDLL.sh
refreshDLLMD5 ---》 调用 c# 写好的函数 CommandBuild.RefreshDLLMD5 更新 dll 为加密以后的 hash 值 ( 这里把dll也当成了热更资源了 )
+
自己要做的事情 ---》 压缩生成的热更新资源 + 生成热更新资源的MD5
build_assetbundle
前置task:
writeconfig --》 自动修改记录版本信息的文件 比如svn版本号啊 应用版本号啊
changebuildtarget --》 切换一下平台的,相当于 buildsetting 中的 switch platform
+
自己要做的事情 --》CommandBuild.BuildAssetBundle 调用C#写好的 打包资源 ab 的函数
compile-debug-app
前置task:
build_app 见下面
+
自己要做的事情
build_app
前置task:
build_assetbundle 上面已经做了如果是热更新的条件下 没有的话就再执行一次咯。
+
自己要做的事情 --》 调用C#写好的 CommandBuild.BuildAndroid (最终调用 BuildPipeline.BuildPlayer ) 生成apk + 生成的 apk 的 MD5