<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloWorld" default="zipalign" basedir=".">
<property name="password" value="123456"/>
<!-- environment of the system -->
<property environment="env"/>
<!-- current time -->
<tstamp>
<format property="today" pattern="yyMMdd_hhmmss"/>
</tstamp>
<property name="dir.android_home" value="${env.ANDROID_HOME}"/>
<property name="dir.java_home" value="${env.JAVA_HOME}"/>
<!-- relative dir of android sdk -->
<property name="dir.tools" value="${dir.android_home}/tools"/>
<property name="dir.platform" value="${dir.android_home}/platforms/android-7"/>
<property name="dir.platform_tools" value="${dir.android_home}/platform-tools"/>
<property name="lib.android" value="${dir.platform}/android.jar"/>
<property name="android.framework" value="${dir.platform}/framework.aidl"/>
<!-- command tools in android sdk -->
<property name="aapt" value="${dir.platform_tools}/aapt"/>
<property name="aidl" value="${dir.platform_tools}/aidl"/>
<property name="adb" value="${dir.platform_tools}/adb"/>
<property name="zipalign" value="${dir.tools}/zipalign"/>
<condition property="dx" value="${dir.platform_tools}/dx.bat" else="${dir.platform_tools}/dx">
<os family="windows" />
</condition>
<condition property="apk-builder" value="${dir.tools}/apkbuilder.bat" else="${dir.tools}/apkbuilder">
<os family="windows" />
</condition>
<condition property="jarsigner" value="${dir.java_home}/bin/jarsigner.exe" else="${dir.java_home}/bin/jarsigner">
<os family="windows" />
</condition>
<!-- relative dir of our project -->
<property name="dir.src" value="${basedir}/src"/>
<property name="dir.assets" value="${basedir}/assets"/>
<property name="dir.res" value="${basedir}/res"/>
<property name="dir.gen" value="$basedir}/gen"/>
<property name="file.manifest" value="${basedir}/AndroidManifest.xml"/>
<property name="external-jars" value="${basedir}/libs"/>
<!-- dex file name -->
<property name="file.dex" value="classes.dex"/>
<property name="file.resource" value="resources.ap_"/>
<!-- the output dir -->
<property name="dir.target" value="${basedir}/bin"/>
<property name="dir.target_classes" value="${dir.target}/classes"/>
<property name="dir.target_dex" value="${dir.target}/${file.dex}"/>
<property name="dir.target_resource" value="${dir.target}/${file.resource}"/>
<property name="dir.target_debug" value="${dir.target}/debug"/>
<property name="dir.target_release" value="${dir.target}/release"/>
<property name="file.apk_debug" value="${dir.target_debug}/${ant.project.name}_${today}.apk"/>
<property name="file.apk_unsign_release" value="${dir.target_release}/${ant.project.name}_unsign_${today}.apk"/>
<property name="file.apk_release" value="${dir.target_release}/${ant.project.name}_unoptimized_${today}.apk"/>
<!-- the signed release which use zipalign tool to optimized -->
<property name="file.apk_zipalign" value="${dir.target_release}/${ant.project.name}_${today}.apk"/>
<target name="clean">
<delete dir="${dir.target}"/>
<delete dir="${dir.target_classes}"/>
<delete dir="${dir.target_debug}"/>
<delete dir="${dir.target_release}"/>
</target>
<!-- init -->
<target name="init" depends="clean">
<mkdir dir="${dir.target}"/>
<mkdir dir="${dir.target_classes}"/>
<mkdir dir="${dir.target_debug}"/>
<mkdir dir="${dir.target_release}"/>
</target>
<!-- generate apk file for the project -->
<target name="compile" depends="init">
<!-- Generate the R.java file for this project's resources. -->
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-m" />
<arg value="-J" />
<arg value="${dir.src}" />
<arg value="-M" />
<arg value="${file.manifest}" />
<arg value="-S" />
<arg value="${dir.res}" />
<arg value="-I" />
<arg value="${lib.android}" />
</exec>
<!-- Generate java classes from .aidl files. -->
<apply executable="${aidl}" failonerror="true">
<arg value="-p${android.framework}" />
<arg value="-I${dir.src}" />
<fileset dir="${dir.src}">
<include name="**/*.aidl" />
</fileset>
</apply>
<!-- Compile this project's .java files into .class files. -->
<javac encoding="UTF-8" target="1.6" debug="true" extdirs="" srcdir="${dir.src}" destdir="${dir.target_classes}" bootclasspath="${lib.android}">
<classpath>
<fileset dir="${external-jars}" includes="*.jar" />
</classpath>
</javac>
<!-- Convert this project's .class files into .dex files. -->
<apply executable="${dx}" failonerror="true" parallel="true">
<arg value="--dex" />
<arg value="--output=${dir.target_dex}" />
<arg path="${dir.target_classes}" />
<fileset dir="${external-jars}" includes="*.jar" />
</apply>
<!-- Put the project's resources into the output package file. -->
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-f" />
<arg value="-M" />
<arg value="AndroidManifest.xml" />
<arg value="-S" />
<arg value="${dir.res}" />
<arg value="-A" />
<arg value="${dir.assets}" />
<arg value="-I" />
<arg value="${lib.android}" />
<arg value="-F" />
<arg value="${dir.target_resource}"/>
</exec>
</target>
<!-- Package the application and sign it with a debug key.
This is the default target when building. It is used for debug. -->
<target name="debug" depends="compile">
<exec executable="${apk-builder}" failonerror="true">
<arg value="${file.apk_debug}" />
<arg value="-z" />
<arg value="${dir.target_resource}" />
<arg value="-f" />
<arg value="${dir.target_dex}" />
<arg value="-rf" />
<arg value="${dir.src}" />
<arg value="-rj" />
<arg value="${external-jars}" />
</exec>
</target>
<!-- Package the application without signing it.
This allows for the application to be signed later with an official publishing key. -->
<target name="unsign-release" depends="compile">
<exec executable="${apk-builder}" failonerror="true">
<arg value="${file.apk_unsign_release}" />
<arg value="-u" />
<arg value="-z" />
<arg value="${dir.target_resource}" />
<arg value="-f" />
<arg value="${dir.target_dex}" />
<arg value="-rf" />
<arg value="${dir.src}" />
<arg value="-rj"/>
<arg value="${external-jars}"/>
</exec>
</target>
<!-- sign the apk -->
<!-- use the command below to generate the android.keystore file:
"keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore" -->
<target name="jarsigner" depends="unsign-release">
<exec executable="${jarsigner}" failonerror="true">
<arg value="-verbose" />
<arg value="-storepass" />
<arg value="${password}" />
<arg value="-keystore" />
<arg value="android.keystore" />
<arg value="-signedjar" />
<arg value="${file.apk_release}" />
<arg value="${file.apk_unsign_release}" />
<arg value="android.keystore" />
</exec>
</target>
<!-- optimize -->
<target name="zipalign" depends="jarsigner">
<exec executable="${zipalign}" failonerror="true">
<arg value="-v" />
<arg value="-f" />
<arg value="4" />
<arg value="${file.apk_release}" />
<arg value="${file.apk_zipalign}" />
</exec>
<!-- delete unsigned apk and unoptimized apk -->
<delete file="${file.apk_unsign_release}"/>
<delete file="${file.apk_release}"/>
</target>
</project>
分享到:
相关推荐
build 脚本例子build 脚本例子build 脚本例子
本文将深入探讨Ant Build脚本及其在自动化多渠道打包和自定义任务打包中的应用。 Ant的核心概念是构建文件(build.xml),它是用XML编写的,定义了一系列的目标(target)和任务(task)。每个目标由一系列的任务...
gwt_ant_build脚本研习 目录 build.xml源文件 构建工程war的分析 自定义的build工程文件
deb通用 打包脚本deb通用 打包脚本deb通用 打包脚本deb通用 打包脚本
本篇文章将详细解析`Android Ant build`脚本代码,以及如何实现自动化多渠道打包和自定义任务打包。 `Ant` 是Apache组织提供的一个Java项目构建工具,它基于XML来定义构建过程,具有高度可配置性和可扩展性。在...
用于jenkins+ant部署jmeter脚本,用于jenkins+ant部署jmeter脚本,
NULL 博文链接:https://softwarexiang120.iteye.com/blog/2037114
智能自动化Makefile可以完成如下工作: *自动获去操作系统类型并指定为全局编译选项(-DYOUR_OS_NAME) *自动出来源代码文件之间的依赖关系 *使用colorgcc可以彩色显示警告和错误信息 *智能控制debug和release版本的...
每晚浅顶软呢帽Fedora Atomic Nightly Build脚本该存储库将用于脚本来构建每夜/ dev版本注意:如果当前不存在,则使用的模拟配置需要附加以下内容: config_opts['plugin_conf']['bind_mount_opts']['dirs'].append...
使用此脚本可以完成keil自动程序编译,无需打开keil软件,
2. **修改项目配置**:检查项目的build脚本或配置文件,看是否可以修改为使用系统已有的MSBuild 4.0。这通常需要对项目结构有深入理解,确保所有依赖项都与新版本兼容。 3. **使用兼容模式**:部分较新的MSBuild...
跨平台(Linux/MacOS/iOS/Android/Windows)自动编译脚本,用户需要先自行安装cmake,并构建CMakelists.txt自定义编译规则,配合此脚本即可编译出对应平台的文件。 Linux:直接在Linux系统上运行此脚本,默认使用gcc...
例如,一个基本的daily build脚本可能有一个`clean`目标用于清理上一次的构建结果,一个`compile`目标用于编译源代码,一个`test`目标用于运行单元测试,最后可能有一个`deploy`目标用于部署到测试或生产环境。...
AutoBuild 脚本邮件部分是一个自动化构建系统的关键组件,其主要目标是确保开发者无需登录DateBuild服务器就能获取编译过程的结果。邮件内容通常包括编译的成功与否以及详细的编译日志,以便于问题的排查和跟踪。...
docker-kdesrc-build 该项目旨在通过将kdesrc-build工具包装在Docker中来提供一个轻量级且易于使用的KDE开发环境。 这样,您可以编译和处理最新版本的KDE项目,并使主系统中没有不需要的开发包。 通过在Docker...
自从Ionic Framework 4.0版发布以来,我们不再使用Ionic App脚本在Ionic Framework中进行构建。 我们不再积极维护Ionic Framework的第3版。 有关哪些版本处于活动状态的更多信息,请参阅我们的。 因此,我们不再...
其中,C源代码文件194个,头文件182个,PO文件103个,PNG图片文件32个,SVG文件24个,IN文件19个,Build脚本16个,XML文件13个,Nemo Action脚本11个,Python脚本5个。该管理器旨在提供高效的文件管理功能,适用于多...
ant脚本构建工具,有详细的注释、用于构建程序war包,执行编译、修改、拷贝、远程上传程序war包、远程发布程序、远程重启服务器(tomcat)
一个shell脚本,用于从存储库中提取对发行/构建脚本有用的修订信息。 支持的存储库类型包括git , hg , bzr和svn 。 该记录可以以现成的形式发送给C , C++ , Java , bash , Python , Perl , lua , php , ...