ant脚本编译Android项目
2016-02-19 19:30
387 查看
编译Android项目步骤
1.Eclipse生成R.java文件, aapt.exe生成R.java(Android sdk) aapt package -f -m -J ./gen -S res -M AndroidManifest.xml -I D:\android.jar 2..aidl文件生成.java文件, aidl.exe生成.java文件(Android sdk) 3.ant和命令行使用jdk的javac编译java类文件生成.class文件 (jdk javac) 4.ant使用dx.bat, 命令行脚本生成classes.dex文件(Android sdk) 5.打包资源(res,assets,androidmanifest.xml),aapt.ext生成资源包文件(Android sdk) 6.apkbuilder.bat命令生成未签名,apk安装文件 7.ant和命令行使用jdk jarsigner对未签名包进行apk签名
编译Andorid项目的脚本
<?xml version="1.0"?> <project name="targetProject" default="targetSDK"> <property file="local.properties"/> <!-- ant 环境变量 --> <property environment="env"/> <!-- 应用名称 --> <property name="appName" value="Demo"/> <property name="basedir" value="D:\antbuildandroid\Demo"/> <property name="library-dir" value="D:\antbuildandroid\Demo"/> <!-- sdk dir--> <property name="sdk-folder" value="${env.android_home}"/> <!-- java home --> <property name="java-home" value="${env.JAVA_HOME}"/> <!-- android sdk platforms--> <property name="sdk-platform-folder" value="${sdk-folder}\platforms\android-20"/> <!-- android sdk tools --> <property name="sdk-tools" value="${sdk-folder}\tools"/> <!---android sdk platform tools--> <property name="sdk-platform-tools" value="${sdk-folder}\platform-tools"/> <!-- android sdk order--> <property name="aapt" value="${sdk-platform-tools}\aapt.exe"/> <property name="aidl" value="${sdk-platform-tools}\aidl.exe"/> <property name="dx" value="${sdk-platform-tools}\dx.bat"/> <property name="apkbuilder" value="${sdk-tools}\apkbuilder.bat"/> <property name="jarsigner" value="${java-home}\bin\jarsigner"/> <!-- 编译需要的jar 如果项目使用到地图服务则需要maps.jar--> <property name="android-jar" value="${sdk-platform-folder}\android.jar"/> <!-- 编译aidl文件所需要的预处理框架文件 framework.aidl --> <property name="framework-aidl" value="${sdk-platform-folder}\framework.aidl"/> <!-- 生成R文件的相对目录 --> <property name="outdir-gen" value="gen"/> <!-- 编译后的文件放置目录 --> <property name="outdir-bin" value="out"/> <!-- 清单文件 --> <property name="manifest-xml" value="AndroidManifest.xml"/> <!-- 源文件目录--> <property name="resource-dir" value="res"/> <property name="asset-dir" value="assets"/> <!-- java 源文件目录--> <property name="srcdir" value="src"/> <property name="srcdir-ospath" value="${basedir}/${srcdir}" /> <!-- 外部类库所在目录 --> <property name="external-lib" value="libs" /> <property name="external-lib-ospath" value="${basedir}/${external-lib}" /> <!-- 生成class目录 --> <property name="outdir-classes" value="${outdir-bin}" /> <property name="outdir-classes-ospath" value="${basedir}/${outdir-classes}" /> <!-- classes.dex相关变量 --> <property name="dex-file" value="classes.dex" /> <property name="dex-path" value="${outdir-bin}/${dex-file}" /> <property name="dex-ospath" value="${basedir}/${dex-path}" /> <!-- 经过aapt生成的资源包文件 --> <property name="resources-package" value="${outdir-bin}/resources.ap_" /> <property name="resources-package-ospath" value="${basedir}/${resources-package}" /> <!-- 未认证apk包 --> <property name="out-unsigned-package" value="${outdir-bin}/${appName}-unsigned.apk" /> <property name="out-unsigned-package-ospath" value="${basedir}/${out-unsigned-package}" /> <!-- 证书文件 --> <property name="keystore-file" value="${basedir}/abc123.keystore" /> <!-- 已认证apk包 --> <property name="out-signed-package" value="${outdir-bin}/${appName}.apk" /> <property name="out-signed-package-ospath" value="${basedir}/${out-signed-package}" /> <!-- 初始化工作 --> <target name="init"> <echo>Initializing all output directories...</echo> <delete dir="${outdir-bin}" /> <mkdir dir="${outdir-bin}" /> <mkdir dir="${outdir-classes}" /> </target> <!-- 生成R.java文件 --> <target name="gen-R" depends="init"> <echo>Generating R.java from the resources...</echo> <exec executable="${aapt}" failonerror="true"> <arg value="package" /> <arg value="-m" /> <arg value="--auto-add-overlay" /> <arg value="-J" /> <arg value="${outdir-gen}" /> <arg value="-M" /> <arg value="${manifest-xml}" /> <arg value="-S" /> <arg value="${resource-dir}" /> <arg value="-S" /> <arg value="${library-dir}/${resource-dir}" /> <arg value="--extra-packages" /> <arg value="com.mobcent.share.android" /> <arg value="-A" /> <arg value="${asset-dir}" /> <arg value="-I" /> <arg value="${android-jar}" /> </exec> </target> <!-- 编译aidl文件 --> <target name="aidl" depends="gen-R"> <echo>Compiling .aidl into java files...</echo> <apply executable="${aidl}" failonerror="true"> <!-- 指定预处理文件 --> <arg value="-p${framework-aidl}" /> <!-- aidl声明的目录 --> <arg value="-I${srcdir}" /> <!-- 目标文件目录 --> <arg value="-o${outdir-gen}" /> <!-- 指定哪些文件需要编译 --> <fileset dir="${srcdir}"> <include name="**/*.aidl" /> </fileset> </apply> </target> <!-- 将工程中的java源文件编译成class文件 --> <target name="compile" depends="aidl"> <echo>Compiling java source code...</echo> <javac encoding="utf-8" target="1.7" destdir="${outdir-classes}" bootclasspath="${android-jar}" includeAntRuntime="false"> <src path="src" /> <src path="gen" /> <src path="${library-dir}/src" /> <classpath> <fileset dir="${external-lib}" includes="*.jar" /> <!--<fileset dir="${library-dir}/libs" includes="*.jar" /> --> <!-- 地图服务需要,但是国内是用不到的 <filelist> <file name="${android-maps-jar}" /> </filelist> --> </classpath> </javac> </target> <!-- 将.class文件转化成.dex文件 --> <target name="dex" depends="compile"> <echo>Converting compiled files and external libraries into a .dex file...</echo> <exec executable="${dx}" failonerror="true"> <arg value="--dex" /> <!-- 输出文件 --> <arg value="--output=${dex-ospath}" /> <!-- 要生成.dex文件的源classes和libraries --> <arg value="${outdir-classes-ospath}" /> <arg value="${external-lib-ospath}" /> <!-- <arg value="${library-dir}/libs" /> --> </exec> </target> <!-- 将资源文件放进输出目录 --> <target name="package-res-and-assets" depends="dex"> <echo>Packaging resources and assets...</echo> <exec executable="${aapt}" failonerror="true"> <arg value="package" /> <arg value="-f" /> <arg value="-M" /> <arg value="${manifest-xml}" /> <arg value="-S" /> <arg value="${resource-dir}" /> <arg value="-A" /> <arg value="${asset-dir}" /> <arg value="-S" /> <arg value="${library-dir}/${resource-dir}" /> <arg value="-A" /> <arg value="${library-dir}/${asset-dir}" /> <arg value="-I" /> <arg value="${android-jar}" /> <arg value="-F" /> <arg value="${resources-package}" /> <arg value="--auto-add-overlay" /> </exec> </target> <!-- 打包成未签证的apk --> <target name="package" depends="package-res-and-assets"> <echo>Packaging unsigned apk for release...</echo> <exec executable="${apkbuilder}" failonerror="true"> <arg value="${out-unsigned-package-ospath}" /> <arg value="-u" /> <arg value="-z" /> <arg value="${resources-package-ospath}" /> <arg value="-f" /> <arg value="${dex-ospath}" /> <arg value="-rf" /> <arg value="${srcdir-ospath}" /> <arg value="-nf"/> <arg value="${library-dir}/libs"/> </exec> <echo>It will need to be signed with jarsigner before being published.</echo> </target> <!-- 对apk进行签证 --> <target name="jarsigner" depends="package"> <echo>Packaging signed apk for release...</echo> <exec executable="${jarsigner}" failonerror="true"> <arg value="-keystore" /> <arg value="${keystore-file}" /> <arg value="-storepass" /> <arg value="123456" /> <arg value="-keypass" /> <arg value="123456" /> <arg value="-signedjar" /> <arg value="${out-signed-package-ospath}" /> <arg value="${out-unsigned-package-ospath}" /> <!-- 不要忘了证书的别名 --> <arg value="abc123" /> </exec> </target> <target name="release" depends="jarsigner"> <!-- 删除未签证apk --> <delete file="${out-unsigned-package-ospath}" /> <echo>APK is released. path:${out-signed-package-ospath}</echo> </target> </project>
相关文章推荐
- Android开机自启动程序
- Android:下载更新后自动安装
- Android:读取文件
- Android:获取版本号
- android 获取GPS定位
- Android系统权限和root权限
- Android分析Universal-Image-Loader源码解析收获
- Android 重启的几种方式
- 【转】Android 手机连接台式电脑无线 Wi-Fi 上网
- Android中AsyncTask使用详解
- ANDROID_MARS学习笔记_S02_012_ANIMATION_利用AnimationListener在动画结束时删除或添加组件
- Android笔记之卫星菜单的实现
- Android 沉浸式状态栏设计以及ContentView获取
- Android 性能优化之使用线程池处理异步任务
- Android Studio多工程引用同一个library项目配置方法
- Android开发中一些被冷落但却很有用的类和方法
- Android中一个关于ListView的奇怪问题
- Android原生定位
- 02-19 17:57:05.024: E/AndroidRuntime(27831): java.lang.RuntimeException: Unable to start activity
- android:TableLayout表格布局详解