我想在使用Android Eclipse ADT插件的同时自定义构build过程

安装了ADT插件后,以下构build器将针对Android项目处于活动状态:

  • Android资源pipe理器
  • Android预编译器
  • Java生成器
  • Android程序包生成器

查看输出目录,将创build以下工件:

  • resources.ap_(只是一个APK / ZIP的资源和没有代码)
  • gen / R.java(自动生成的资源列表)
  • 用java字节码的.class文件
  • classes.dex
  • $ {项目名称}的apk

对于我的项目,我会自动生成一些代码构件,并且通常需要更严格地控​​制构build过程。 起初,我认为资源pipe理器负责创buildresources.ap_,预编译器创build了R.java,java builder做得很明显,然后Android Package Builder创build了classes.dex,然后将classes.dex和resources.ap_创buildAPK文件。

我禁用了前两个步骤,并创build了一个定制的预生成器,这个生成器放置了一个resources.ap_的副本,认为这是等价的。 没有这样的运气。

不幸的是,最终的Android程序包生成器似乎直接从res /中汲取资源,并忽略我的resources.ap_。 实际上,前两个构build步骤似乎除了生成R.java以外没有太多的工作。

这是真正有问题的地方。 如果我禁用最终的构build步骤,并放下我自己的APK文件(具有完全相同的名称),我得到以下错误:

[2011-02-27 20:25:28 - android-premium] ------------------------------ [2011-02-27 20:25:28 - android-premium] Android Launch! [2011-02-27 20:25:28 - android-premium] adb is running normally. [2011-02-27 20:25:28 - android-premium] Could not find android-premium.apk! 

所以我卡住了:用Android Package Builder(没有可辨别的configuration),我必须提供单独的./res/文件。 没有它,我不能让项目启动在设备上(而不是从Eclipse)。

任何人在这个领域有更好的想法/经验?

Solutions Collecting From Web of "我想在使用Android Eclipse ADT插件的同时自定义构build过程"

关于Ant脚本,以下是我构buildAndroid应用程序的Ant步骤的一体化模板(这对于尝试将Eclipse构build转换为Ant的其他人可能是有用的,因为它比不透明的版本更简单和更透明使用android工具自动生成):

 <property name="workspace.dir" value="/workspace" /> <property name="project.dir" location="." /> <property name="android-platform.name" value="android-1.5" /> <!-- Framework Paths --> <property name="android-sdk.dir" value="${workspace.dir}/EpicFramework/android-sdk"/> <property name="android-tools.dir" value="${android-sdk.dir}/tools" /> <property name="android-platform.dir" value="${android-sdk.dir}/platforms/${android-platform.name}" /> <property name="android-platform-tools.dir" value="${android-platform.dir}/tools"/> <property name="android-platform-jar" value="${android-platform.dir}/android.jar"/> <property name="android-framework-src.dir" value="${workspace.dir}/EpicFramework/EpicAndroid"/> <!-- Tool Binaries --> <property name="adb" value="${android-tools.dir}/adb"/> <property name="apkbuilder" value="${android-tools.dir}/apkbuilder"/> <property name="aapt" value="${android-platform-tools.dir}/aapt"/> <property name="dx" value="${android-platform-tools.dir}/dx"/> <!-- Project Paths --> <property name="src.dir" value="${project.dir}/src" /> <property name="gen.dir" value="${project.dir}/gen" /> <property name="res.dir" value="${project.dir}/res" /> <property name="lib.dir" value="${project.dir}/lib" /> <property name="build.dir" value="${project.dir}/bin" /> <property name="build.classes.dir" value="${build.dir}/classes" /> <property name="resources.file" value="${build.dir}/resources.ap_"/> <property name="dex.file" value="${build.dir}/classes.dex" /> <property name="debug-apk.file" value="${build.dir}/${ant.project.name}-debug.apk"/> <target name="dirs"> <echo>Creating output directories if needed...</echo> <mkdir dir="${res.dir}" /> <mkdir dir="${gen.dir}" /> <mkdir dir="${lib.dir}" /> <mkdir dir="${build.dir}" /> <mkdir dir="${build.classes.dir}" /> </target> <target name="android-resource-src" depends="dirs"> <echo>Generating R.java from the resources...</echo> <exec executable="${aapt}" failonerror="true"> <arg value="package" /> <arg value="-M" /> <arg path="AndroidManifest.xml" /> <arg value="-S" /> <arg path="${res.dir}" /> <arg value="-I" /> <arg path="${android-platform-jar}" /> <arg value="-m" /> <arg value="-J" /> <arg path="${gen.dir}" /> </exec> </target> <target name="android-compile" depends="android-resource-src"> <echo>Compiling java files into class files...</echo> <javac encoding="ascii" target="1.5" debug="true" extdirs="" destdir="${build.classes.dir}" includeAntRuntime="false" bootclasspath="${android-platform-jar}"> <src path="${android-framework-src.dir}" /> <src path="${src.dir}" /> <src path="${gen.dir}" /> <classpath> <fileset dir="${lib.dir}" includes="*.jar"/> </classpath> </javac> </target> <target name="android-dex" depends="android-compile"> <echo>Converting compiled files and 3rd party libraries into ${dex.file} ...</echo> <apply executable="${dx}" failonerror="true" parallel="true"> <arg value="--dex" /> <arg value="--output=${dex.file}" /> <arg path="${build.classes.dir}" /> <fileset dir="${lib.dir}" includes="*.jar"/> </apply> </target> <target name="android-package-resources"> <echo>Packaging Android resources into ${resources.file} ...</echo> <exec executable="${aapt}" failonerror="true"> <arg value="package" /> <arg value="-M" /> <arg path="AndroidManifest.xml" /> <arg value="-S" /> <arg path="./res" /> <arg value="-I" /> <arg path="${android-platform-jar}" /> <arg value="-f" /> <arg value="-F" /> <arg value="${resources.file}" /> </exec> </target> <target name="android-debug" depends="android-dex, android-package-resources"> <echo>Packaging app and signing it with the debug key</echo> <exec executable="${apkbuilder}" failonerror="true"> <arg value="${debug-apk.file}" /> <arg value="-d" /> <arg value="-z" /> <arg value="${resources.file}/" /> <arg value="-f" /> <arg value="${dex.file}" /> </exec> </target> <target name="android-release" depends="android-dex, android-package-resources"> <echo>Packaging App without signing, so that it can be signed with the official publishing key ...</echo> <exec executable="${apkbuilder}" failonerror="true"> <arg value="${release-apk.file}" /> <arg value="-u" /> <arg value="-d" /> <arg value="-z" /> <arg value="${resources.file}/" /> <arg value="-f" /> <arg value="${dex.file}" /> </exec> <echo>All generated packages need to be signed with jarsigner before they are published.</echo> </target> <target name="android-install" depends="android-debug"> <echo>Removing all com.epicapplications APK files from default emulator ...</echo> <exec executable="${adb}" inputstring="echo hi; rm -f /data/app/com.epicapplications.*; exit; "> <arg value="shell"/> </exec> <echo>Installing ${debug-apk.file} onto default emulator...</echo> <exec executable="${adb}" failonerror="true"> <arg value="install" /> <arg value="-r" /> <arg path="${debug-apk.file}" /> </exec> </target> 

我正在寻找的是能够使用此Ant构build脚本的全部或部分,但仍然具有启动和debugging应用程序的Eclipse集成。

我们使用Ant脚本来完成android项目的构build过程,其他人也使用过Maven。 这些帮助,因为你可以脚本他们作为你的CI构build系统的一部分每天作为夜间生成的一部分运行。 在高级的水平上,你可以编写脚本来完成发布版本,包括发布标签,预编译和后编译AndroidManifest.xml修改和签名。