我使用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库项目?
答案 0 :(得分:9)
在没有修改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>
答案 1 :(得分:8)
我以棘手的方式解决了这个问题;这是
要在具有多个源目录的android中构建库项目,首先转到 ant.properties 文件(对于linux,它是 build.properties )并添加<强> source.dir 强>
source.dir=first_source_dir ;second_source_dir ; third_source_dir
对于lib项目, ant 使用 bin / classes .class 文件创建 jar 库> ant.properties 或 build.properties 文件中指定的 out.dir 目录;
创建 jar 时, ant 会从 jar 中删除所有 .java 源文件,该文件可能包含在内如果编码器在 out.dir 目录中保留任何 .java 源文件,则使用 jar ,并在 source.dir <中指定该目录/ strong>;
现在删除那些 .java 源 ant ,使用以下命令转到 source.dir 目录
<property name="source.absolute.dir" location="${source.dir}" />
dir="${source.absolute.dir}"
使用此命令 ant 实际上尝试转到目录
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 \ tools \ ant打开 build.xml 然后转到 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>
现在评论或删除 jar 标记中的最后一个 fileset 标记
<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>
现在建立你的项目;
答案 2 :(得分:1)
这对我来说很好,我认为这是最干净的方法(因为那些是实际来源的软链接,你没有多个来源副本)
答案 3 :(得分:0)
至少在构建工具的更高版本上,问题是放入此属性的值会传递到<property name="source.absolute.dirs" location="source.dirs"/>
。 location
属性不知道如何处理冒号/分号分隔的路径。
修复非常简单,只需使用:
source.absolute.dirs=src1:src2:src3
等,而不是:
source.dirs=src1:src2:src3