如何为 Android 库项目指定多个源目录



我正在使用ant工具来构建android库项目,我需要指定多个源目录。

我试图通过在ant.properties文件中交替添加这些行来指定多个源目录

source.dir=src:src2    
source.dir=src;src2

但在这两种情况下都无法构建,在这两种情况下都生成了.class,但是在创建jar文件时,我收到此错误

BUILD FAILED

C:Program FilesAndroidandroid-sdktoolsantbuild.xml:681: The following error occurred while executing this line:

C:Program FilesAndroidandroid-sdktoolsantbuild.xml:749:

C:workareaAndroidPackagestestsrc;src2 does not exist.

谁能告诉我如何在ant.properties中指定多个源目录来构建Android库项目

这为我完成了诀窍,而无需修改 SDK 文件:

蚂蚁属性:

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 项目,ant 使用.classant.propertiesbuild.properties 文件中指定的 out.dir 目录的目录 bin/classes 创建 jar 库;

在创建 jar 时,ant 会从 jar 中删除所有.java源文件,如果程序员将任何.java源文件保存在 out.dir 目录中,并在 source.dir 中指定该目录,则这些文件可能包含在 jar;

现在要删除这些.javaant,请使用以下命令转到 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 Open 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 标记中的最后一个文件集标记

    <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>

现在构建您的项目;

  1. 在项目目录中创建一个目录(例如build_src)。
  2. 进入那个目录 (CD build_src)
  3. 创建软链接(ln -s TARGET linkname),build_src到要包含的所有源目录例如:如果您最初的问题是包含 SRC1、SRC2 以及标准 SRC 目录,请创建 SRC1、SRC2 软链接到build_src
  4. 使用 source.dir=build_src 创建 ant.properties

这对我来说效果很好,我认为是最干净的方法(也因为这些是指向实际源的软链接,因此您没有源的多个副本)

  1. 我的一个项目有.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

相关内容

  • 没有找到相关文章

最新更新