簡體   English   中英

Android studio 添加外部項目到 build.gradle

[英]Android studio add external project to build.gradle

我有一個示例項目,具有以下設置:

/root
  + Pure Java Lib
  + Android Test Lib
  + Android Test Project

' Test Project ' 依賴於' Test Lib ',最后一個依賴於' Pure Java Lib '編譯項目並啟動這個設置工作得很好。

我現在正在考慮導入我以前的 Eclipse 工作區並使用 Android Studio,問題是項目設置不同,我想保持這種方式。

例如,如果要使用前面的示例:

/root
  + Android Test Lib
  + Android Test Project

/Some Other folder (another repository for example)
  + Pure Java Lib

我已經嘗試了很多配置,但我沒有找到一種方法來引用父文件夾范圍之外的項目(在示例中為“ root ”)。

在許多平台/模塊中,您可以使用“..”在文件夾中向上移動,但這對我不起作用,也許我用錯了。

有誰知道如何使用 Gradle 實現這一目標?

更新

我會嘗試更通用:

/C:/

  /Project A
    + Module 1 - Pure Java
    + Module 2 - Android Test Lib
    + Module 3 - Android Test Project

  /Project B
    + Module 1 - Pure Java
    + Module 2 - Pure Java
    + Module 3 - Pure Java

我想在項目 A 中使用項目 B 的模塊 1。


更新:09-03-19

我現在看到了這個,我必須更新……將近 6 年后,今天我更聰明了,我可以肯定地說問題是我誤解了“真相之源”的概念。

雖然有一個庫的引用是一個很好的概念......並且可能看起來像一個“真實來源”,真正的“真實來源”將是每個項目使用該庫的代碼版本,原因庫本身有版本......許多版本,“真相來源”與使用庫的項目有關。

正確的方法是使用大多數開發人員不喜歡的東西,那就是 git 子模塊,是的,在每個項目中復制源代碼會導致每個項目使用不同版本的代碼的可能性最大。

但是,您需要讓所有項目都使用所有庫的最新和最好版本。這本身就是一個挑戰

這是使用庫源開發項目的正確方法的原因是它可以擴展……您可以擁有數百個項目,每個項目都有自己的庫配置。

假設 Some Other Folder 是一個 gradle 項目,您可以在 settings.gradle 文件中添加如下內容:

include ':module1'
project(':module1').projectDir = new File(settingsDir, '../Project B/Module 1')

你必須在你的文件settings.gradle 中加入以下幾行:

include ':module2'
project(':module2').projectDir = new File(settingsDir, '../Project 2/Module2')

然后你必須在依賴樹中添加你的builde.gradle (Module: app) ,這一行:

implementation project(':module2')

或者進入Project Structure > app > Dependencies ,點擊Add ,選擇3 Module Dependencies並選擇你的模塊

使用 Gradle 1.10(不知道這將適用於哪些其他版本)這是我根據此處給出的回復提出的http://forums.gradle.org/gradle/topics/reference_external_project_as_dependancy

我有一個 api 庫項目、一個公共庫項目和主應用程序項目。 每個都是一個獨立的開發項目,這兩個庫旨在在多個應用程序之間共享。

在公共項目的 settings.gradle 中:

def apiLibDir = file('../android-api/android-api-lib')
def rootProjectDescriptor = settings.rootProject
settings.createProjectDescriptor(rootProjectDescriptor, 'android-api-lib', apiLibDir)
include ':android-api-lib'

然后在主應用項目 settings.gradle 中:

def apiLibDir = file('../android-libs/android-api/android-api-lib')
def rootProjectDescriptor = settings.rootProject
settings.createProjectDescriptor(rootProjectDescriptor, 'android-api-lib', apiLibDir)
include ':android-api-lib'

def commonLibDir = file('../android-libs/android-common/android-common-lib')
settings.createProjectDescriptor(rootProjectDescriptor, 'android-common-lib', commonLibDir)
include ':android-common-lib'

在每個相應的 build.gradle 文件中,您只需按照您在 settings.createProjectDescriptor 中給它們的名稱來引用它們,就像您使用任何其他項目依賴一樣:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':android-api-lib')
    compile project(':android-common-lib')
}

這似乎有效。 它甚至沒有為定義 api 庫的多個 DEX 文件拋出錯誤,我懷疑是因為它們都是同一個構建過程的一部分,而且 Gradle 足夠聰明,可以解決所有問題。

右鍵單擊項目 - 選擇“打開模塊設置” - 在左窗格中選擇“模塊” - 單擊頂部的“+”符號 - 選擇“導入模塊”。

導入模塊后。 您需要將其添加為當前項目的依賴項。

在左窗格中選擇“模塊”並單擊您的項目 - 現在進入依賴項選項卡並單擊位於底部的“+”符號 - 選擇第三個選項“模塊依賴項”,如果您已正確導入項目,它將向您展示可以作為依賴項添加到當前項目的所有可用模塊。

我以一種方式重新提出這個問題,其中包含原始海報的意圖, 我們如何引用位於我們主 Android 項目目錄之外的自定義 Android 和 Java 庫?

在那里我回答我自己的問題。 在核心,我的答案使用@Ethan(當前線程中所選答案的作者)gradle 編碼洞察力。 但我的回答也解決了其他一些問題,並提供了詳細的分步示例。

正如 Ethan 所說,如果您將其添加到 settings.gradle 中,它將向 Android Studio 添加一個外部項目(在本例中,它位於父文件夾中):

project(':../ProjectB/:module1')

然后,要將其添加為您的某個項目的依賴項,只需將其添加到該項目的 build.gradle 中作為另一個這樣的依賴項(您也可以像此處那樣以圖形方式進行操作):

compile project(':../ProjectB/:module1')

暫無
暫無

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

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