我使用Ant工具来构建Android库项目,我需要指定多个源目录。
我试图通过ant.properties文件或者将这些行指定多个源文件目录
source.dir=src:src2
source.dir=src;src2
但无法建立在这两种情况下,在案件的.class都产生了,但是在建立jar文件我是收到此错误
BUILD FAILED
C:\Program Files\Android\android-sdk\tools\ant\build.xml:681: The following error occurred while executing this line:
C:\Program Files\Android\android-sdk\tools\ant\build.xml:749:
C:\workarea\Android\Packages\test\src;src2 does not exist.
任何一个可以告诉我如何在ant.properties指定多个源目录构建Android库项目 ?
这奏效了,我没有修改SDK文件:
ant.properties:
source.absolute.dir = tmp-src
custom_rules.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project name="CustomRules">
<target name="-pre-build" >
<copy todir="tmp-src" >
<fileset dir="src" includes="**" />
<fileset dir="src-1" includes="**" />
<fileset dir="src-2" includes="**" />
<fileset dir="src-3" includes="**" />
<fileset dir="src-4" includes="**" />
</copy>
</target>
<target name="-post-build" >
<delete dir="tmp-src" />
</target>
</project>
我已经解决了这个问题一个取巧的方法; 这里是
要在Android中使用一个以上的源目录库建设项目,先去ant.properties文件(对于Linux是build.properties),并添加source.dir
source.dir=first_source_dir ;second_source_dir ; third_source_dir
对于LIB项目, 蚂蚁创建从目录的bin /班 ant.properties或build.properties文件中指定out.dir目录编译.class文件的jar库;
同时创造罐子 , 蚂蚁删除所有.java源文件形成所述罐 ,其可被包含在罐如果编码器保持在out.dir目录中的任何.java源文件,并指定在source.dir该目录;
我们消除这些.java源蚂蚁转到source.dir目录用下面的命令
<property name="source.absolute.dir" location="${source.dir}" />
dir="${source.absolute.dir}"
使用此命令蚂蚁实际上是试图去目录
cd <your_project_root_dir>/first_source_dir ;second_source_dir ; third_source_dir
这是不存在的...
解:
步骤1首先确保你的源目录 (source.dir),并建立目录 (out.dir)是不同的;
第2步:进入C:\ Program Files文件\的Android \ Android的SDK \工具\蚂蚁然后打开build.xml然后去罐子标签
<jar destfile="${out.library.jar.file}">
<fileset dir="${out.classes.absolute.dir}"
includes="**/*.class"
excludes="${project.app.package.path}/R.class ${project.app.package.path}/R$*.class ${project.app.package.path}/Manifest.class ${project.app.package.path}/Manifest$*.class ${project.app.package.path}/BuildConfig.class"/>
<fileset dir="${source.absolute.dir}" excludes="**/*.java ${android.package.excludes}" />
</jar>
现在评论或删除罐子标签的最后一个文件集标签
<jar destfile="${out.library.jar.file}">
<fileset dir="${out.classes.absolute.dir}"
includes="**/*.class"
excludes="${project.app.package.path}/R.class ${project.app.package.path}/R$*.class ${project.app.package.path}/Manifest.class ${project.app.package.path}/Manifest$*.class ${project.app.package.path}/BuildConfig.class"/>
<!--fileset dir="${source.absolute.dir}" excludes="**/*.java ${android.package.excludes}" /-->
</jar>
现在建项目;
- 创建一个目录(比如build_src)在您的项目目录。
- 进入该目录(CD build_src)
- 建立软链接(LN-S TARGET链接名称)在build_src到要包括例如所有源目录:如果你原来的问题是包括SRC1,SRC2标准的src目录一起,创建SRC1,SRC2软链接到那些在build_src
- 创建具有source.dir = build_src ant.properties
这种精细工作对我来说,我认为是最干净的方法(也因为这些是软链接到实际的源,你没有来源的多个副本)
- 我的一个项目有.aidl文件和AIDL抱怨。 而不是创建符号链接到SRC的,我创建符号链接为src / COM和固定的问题。
至少在构建工具以后的版本,问题是,投入到这个属性的值被传递到<property name="source.absolute.dirs" location="source.dirs"/>
该location
属性不知道如何处理与结肠/分号分隔的路径。
解决方法是非常简单,只需使用:
source.absolute.dirs=src1:src2:src3
等,相对于:
source.dirs=src1:src2:src3