如何指定为Android库项目中多个源文件目录(How to specify multiple so

2019-07-19 00:52发布

我使用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库项目

Answer 1:

这奏效了,我没有修改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>


Answer 2:

我已经解决了这个问题一个取巧的方法; 这里是

要在Android中使用一个以上的源目录库建设项目,先去ant.properties文件(对于Linux是build.properties),并添加source.dir

    source.dir=first_source_dir ;second_source_dir ; third_source_dir

对于LIB项目, 蚂蚁创建从目录的bin /班 ant.propertiesbuild.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>

现在建项目;



Answer 3:

  1. 创建一个目录(比如build_src)在您的项目目录。
  2. 进入该目录(CD build_src)
  3. 建立软链接(LN-S TARGET链接名称)在build_src到要包括例如所有源目录:如果你原来的问题是包括SRC1,SRC2标准的src目录一起,创建SRC1,SRC2软链接到那些在build_src
  4. 创建具有source.dir = build_src ant.properties

这种精细工作对我来说,我认为是最干净的方法(也因为这些是软链接到实际的源,你没有来源的多个副本)

  1. 我的一个项目有.aidl文件和AIDL抱怨。 而不是创建符号链接到SRC的,我创建符号链接为src / COM和固定的问题。


Answer 4:

至少在构建工具以后的版本,问题是,投入到这个属性的值被传递到<property name="source.absolute.dirs" location="source.dirs"/>location属性不知道如何处理与结肠/分号分隔的路径。

解决方法是非常简单,只需使用:

source.absolute.dirs=src1:src2:src3

等,相对于:

source.dirs=src1:src2:src3


文章来源: How to specify multiple source directory for Android library project