簡體   English   中英

使用 ant/teamcity 構建引用 android 庫項目的 android 項目

[英]Building an android project referencing android library project using ant / teamcity

我有一個 android 項目說項目 A..現在這個項目項目 A 依賴於一個 Android lib 項目說 LibX。 現在 LibX 依賴於另一個 android 庫項目 LibY。 如何使用 ant 構建我的項目。

這是我引用的 android 文檔 -

http://developer.android.com/guide/developing/projects/projects-cmdline.html

這是它說的

在構建時,庫一次一個地與應用程序合並,從最低優先級開始到最高優先級。 請注意,一個庫本身不能引用另一個庫,並且在構建時,庫在與應用程序合並之前不會相互合並。

有沒有解決的辦法?

作者:Android 開發者網站:來源http://developer.android.com/tools/projects/index.html ,圖書館項目部分:

”...從結構上來說,一個library項目類似於一個標准的Android應用項目,比如在項目根目錄下包含一個manifest文件,還有src/、res/等類似的目錄,項目可以包含相同的類型源代碼和資源作為一個標准的Android項目,以同樣的方式存儲。例如library項目中的源代碼可以通過其R class訪問其自身的資源。

但是,庫項目不同於標准的 Android 應用項目,您不能將其直接編譯為自己的 apk 並在 Android 設備上運行。 同樣,您不能將庫項目導出到獨立的 JAR 文件,就像對真正的庫所做的那樣。 相反,您必須通過在相關應用程序中引用該庫並構建該應用程序來間接編譯該庫。

當您構建依賴於庫項目的應用程序時,SDK 工具將庫編譯為臨時 JAR 文件並在主項目中使用它,然后使用結果生成 .apk。 在應用程序和庫中都定義了資源 ID 的情況下,這些工具會確保應用程序中聲明的資源獲得優先權,並且不會將庫項目中的資源編譯到 application.apk 中。 這使您的應用程序可以靈活地使用或重新定義在任何庫中定義的任何資源行為或值。

為了進一步組織您的代碼,您的應用程序可以添加對多個庫項目的引用,然后指定每個庫中資源的相對優先級。 這使您能夠以累積的方式構建應用程序中實際使用的資源。 當應用程序引用的兩個庫定義相同的資源 ID 時,工具 select 優先級較高的庫中的資源並丟棄另一個。

將對庫項目的引用添加到 Android 項目后,您可以設置它們的相對優先級。 在構建時,庫一次一個地與應用程序合並,從最低優先級開始到最高優先級。

庫項目可以引用其他庫項目,並可以正常方式導入外部庫(JAR)。 ……”

我在使用 Rajawali 庫(0.9 版)時遇到了類似的問題。 需要分發文件。 單個 jar 和應用程序將使用此 JAR 來顯示 3D 屏幕。 問題是我們的圖書館是使用圖書館資源 Rajawali 的定制。 因此創建了兩個項目結構(例如庫項目)。 生成時。 JAR 由於您上面解釋的原因,使用資源的應用程序無法運行),這是因為庫使用圖像的 Rajawali 功能加載目標應用程序版本中無法識別的 ID。

單個JAR的解決方案可以通過修改代碼通過R.raw.X(Android方式)不使用Rajawali資源驗證為go使用文件夾assets/ ,讓組件使用Rajawali AsseptManager打開資源。 該解決方案導出了 JAR 文件夾,其中包含內部資產/和字節碼(.Class )以及我們的 LIB Rajawali。

通過 Fat-JAR Eclipse 插件(或 0.0.31 +)[更新站點 http://kuruczgrafika.de/fatjar] 可以生成單個 JAR 並在目標應用程序中使用它。 下面使用ANT腳本運行XML,生成了一個JAR文件。 文件“lib3d_NAME_HERE.jar”(.JAR)將在 /build/lib3d_NAME_HERE.jar 中生成

<?xml version="1.0"?>
<project name="lib3d_NAME_HERE" default="main" basedir=".">

    <property name="projectPath" value="D:\Development\lib3d_NAME_HERE"/>


    <!-- this file was created by Fat-Jar Eclipse Plug-in -->
    <!-- the ANT-Export is in a very early stage, so this -->
    <!-- is only experimental, ANT 1.6 or above is        -->
    <!-- required, feedback is always welcome:            -->
    <!--       http://sourceforge.net/projects/fjep       -->
    <!-- uncomment the following lines if using ANT outside Eclipse -->
    <!--
        <property name="fjepPath" value="reference:file:plugins/net.sf.fjep.fatjar_0.0.31/fatjar.jar"/>
        <taskdef name="fatjar.build" classname="net.sf.fjep.anttask.FJBuildTask" classpath="${fjepPath}"/>
        <typedef name="fatjar.manifest" classname="net.sf.fjep.anttask.FJManifestType" classpath="${fjepPath}"/>
        <typedef name="fatjar.exclude" classname="net.sf.fjep.anttask.FJExcludeType" classpath="${fjepPath}"/>
        <typedef name="fatjar.jarsource" classname="net.sf.fjep.anttask.FJJarSourceType" classpath="${fjepPath}"/>
        <typedef name="fatjar.filesource" classname="net.sf.fjep.anttask.FJFileSourceType" classpath="${fjepPath}"/>
    -->
    <!-- uncomment the above lines to use ANT outside of Eclipse -->
    <target name="main">
        <fatjar.build output="build/lib3d_NAME_HERE.jar">
            <fatjar.manifest/>
            <fatjar.filesource path="${projectPath}/bin/classes" relpath=""/>
            <fatjar.filesource path="${projectPath}/assets/" relpath="assets"/>
        </fatjar.build>
    </target>
</project>

暫無
暫無

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

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