簡體   English   中英

如何為Android庫項目指定多個源目錄

[英]How to specify multiple source directory for Android library project

我使用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項目, ant使用ant.propertiesbuild.properties文件中指定的out.dir目錄的目錄bin / classes創建帶有已編譯.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 \\ 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>

現在建立你的項目;

  1. 在項目目錄中創建一個目錄(比如build_src)。
  2. 進入那個目錄(cd build_src)
  3. 在build_src中創建軟鏈接(ln -s TARGET linkname)到你想要包含的所有源目錄,例如:如果你的原始問題是包括src1,src2和標准的src dir,那么創建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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM