Java 如何为Android库项目指定多个源目录
我正在使用ant工具构建android库项目, 我需要指定多个源目录 我试图通过在ant.properties文件中交替添加这些行来指定多个源目录Java 如何为Android库项目指定多个源目录,java,android,ant,jar,compilation,Java,Android,Ant,Jar,Compilation,我正在使用ant工具构建android库项目, 我需要指定多个源目录 我试图通过在ant.properties文件中交替添加这些行来指定多个源目录 source.dir=src:src2 source.dir=src;src2 但在这两种情况下都无法构建, 在这两种情况下都生成了.class,但在创建jar文件时,我遇到了这个错误 生成失败 C:\Program Files\Android\Android sdk\tools\ant\build.xml:681:执行此行时发生以下错误:
source.dir=src:src2
source.dir=src;src2
但在这两种情况下都无法构建,
在这两种情况下都生成了.class,但在创建jar文件时,我遇到了这个错误
生成失败
C:\Program Files\Android\Android sdk\tools\ant\build.xml:681:执行此行时发生以下错误:
C:\ProgramFiles\Android\Android sdk\tools\ant\build.xml:749:
C:\workarea\Android\Packages\test\src;src2不存在。
有谁能告诉我如何在ant.properties中指定多源目录来构建Android库项目?我以一种巧妙的方式解决了这个问题;给你 要在android中使用多个源目录构建库项目,请首先转到ant.properties文件(对于linux,它是build.properties)并添加source.dir
source.dir=first_source_dir ;second_source_dir ; third_source_dir
对于lib项目,ant从out.dir目录中的ant.properties或build.properties文件创建jar库,其中包含编译的.class文件
在创建jar时,ant从jar中删除所有.java源文件,如果编码器在out.dir目录中保留任何.java源文件,并在source.dir中指定该目录,则该源文件可能包含在jar中
现在要删除那些.javasourceant使用以下命令转到source.dir目录
<property name="source.absolute.dir" location="${source.dir}" />
dir="${source.absolute.dir}"
dir=“${source.absolute.dir}”
使用此命令ant实际尝试转到目录
cd <your_project_root_dir>/first_source_dir ;second_source_dir ; third_source_dir
cd/first\u source\u dir;第二个源目录;第三个源目录
这是不存在的
解决方案:
第一步。首先确保您的源目录(source.dir)和构建目录(out.dir)不同
第二步。转到C:\Program Files\Android\Android sdk\tools\ant openbuild.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标记中的最后一个文件集标记
<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>
现在建立你的项目 至少在更高版本的构建工具上,问题在于输入该属性的值被传递到
中。location
属性不知道如何处理冒号/分号分隔的路径
修复非常简单,只需使用:
source.absolute.dirs=src1:src2:src3
等等,而不是:
source.dirs=src1:src2:src3
这在不修改SDK文件的情况下为我做到了: 蚂蚁属性:
source.absolute.dir = tmp-src
自定义规则.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的构建文件提供了这样的功能,请检查delimeter——可能是
,
而不是代码>。否则,您可能需要修改生成文件。请在此处发布更多信息以获得更好的帮助。如果不使用,可能需要修改ant\build.xml文件,谢谢您的帮助。因此,请发布更多内容,例如构建文件和属性文件的部分内容是否必须在ant.properties文件中完成?难道不能在build.xml中完成吗?我觉得必须修改build.xml文件是很可笑的。你确定这是正确的吗?为什么android不再处理分号/冒号了?为了澄清,这个build.xml位于android SDK中。它不在我的版本控制存储库中。那么,您将如何与多个开发人员一起管理这一点呢。让每个人都修改他们的SDK工具是没有意义的,是吗?@ashoksotree你可以将Androidbuild.xml
复制到重命名为Android\u patched\u build.xml
的项目中,然后修改你的build.xml
以包含另一个文件,而不是${SDK.dir}
中的文件。这是最好的答案。修改SDK文件完全是个坏消息。这对我来说也非常有效。如果您只需要将其他源文件夹附加到生成,这是最佳解决方案。这是解决方案,而不是已选择为选定解决方案的解决方案。