2013-07-04 58 views
122

我有一個示例項目,具有以下設置:Android的工作室添加外部項目的build.gradle

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

凡「測試項目」依賴於「測試庫」,並最後一個取決於'Pure Java Lib' 編譯項目並啓動此設置工作得很好。

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

例如,如果使用以前的例子:

/root 
    + Android Test Lib 
    + Android Test Project 

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

我試過很多配置,但我沒有找到一個方法來引用項目的父文件夾的範圍之外(」 ')。

在許多平臺/模塊中,您可以使用'..'在文件夾中向上移動,但這對我不起作用,或許我錯誤地使用了它。

有沒有人知道如何用Gradle實現這一點?

UPDATE

我會嘗試更加通用:

/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 

我想用模塊1 B項目項目一的。

+4

我看到這個問題得到了一些注意......在嘗試真的很難,現在我放棄了Android工作室,因爲我試圖建立的設置的複雜性是太多了,建立我的最終項目是可行的,但極不穩定。隨着Android工作室的每次發佈,我不得不再次設置一些參數,並手動導致構建工作。我放棄了大約兩個月後,我希望事情現在好轉了! – TacB0sS

+0

方法2在這裏解釋瞭如何很容易地做到這一點: http://stackoverflow.com/questions/25610727/adding-external-library-in-android-studio –

回答

202

假設其他文件夾是一個項目的Gradle,你可以像下面這樣的settings.gradle文件中添加了一句:

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

someOtherFolder指向一個項目文件夾,並在其中有模塊,我有興趣作爲模塊添加到Android Lib項目中 – TacB0sS

+0

設置dir指向'root'我需要獲得更高級別的其他模塊另一個項目。 – TacB0sS

+0

可以在那之後添加子模塊嗎? 包含':someOtherFolder:proj1' – Ethan

8

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

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

在左側窗格中選擇「模塊」並單擊您的項目 - 現在進入依賴項選項卡並單擊位於底部的「+」符號 - 選擇第三個選項「模塊依賴項」,並且如果您導入了項目正確的,它會顯示所有可用的模塊,可以添加爲您當前項目的依賴項。

+0

這幾乎工作...項目不能建立,因爲依賴項模塊的輸出不會添加到build.gradle文件中,這正是我的原始問題。 – TacB0sS

+0

我想用gradle,你需要把所有的項目放在同一個根目錄下。試試看。將要添加的項目作爲依賴項添加到當前項目所在的文件夾中。 – Varundroid

+0

這就是沒有人想要做的事情,但如果你想使用Android Studio工作,ATM就是這樣做的。另一種替代方法是,我在Intellij中創建了所有依賴關係的項目,然後將該項目導入到Android Studio中,通過這樣做,我迫使Android Studio使用Ant構建系統而不是Gradle。希望能幫助到你。乾杯!! – Varundroid

9

隨着搖籃1.10(不知道還有什麼其他的版本,這將是有效的)這是我想出了基於這裏給出的響應http://forums.gradle.org/gradle/topics/reference_external_project_as_dependancy

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

在設置中。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很聰明,足以把它全部弄清楚。

+2

我一直試圖這樣做,但問題是,各個庫中的依賴關係似乎永遠不會被加載。所以如果我只打開庫看起來很好,但是當我從主應用程序嘗試它時,它說所有導入的庫都丟失了。 – Czechnology

+0

非常感謝。有用!!! –

+0

@Czechnology有同樣的問題。解決了它。請參閱我對此答案的評論:https://stackoverflow.com/a/29603354/7408927 – Sevastyan

0

至於阮經天說,如果你添加到您的settings.gradle,這將增加一個外部項目到Android工作室(在這個例子中,它的父文件夾):

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

然後,加它作爲你的一個項目的依賴,只是在項目的build.gradle將其添加爲另一個這樣的依賴(你也可以做圖形as in here):

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

你必須把你的文件settings.gradle個這行:

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

然後,你必須在你的builde.gradle添加(模塊:APP)依賴樹,這條線:

compile project(':module2') 

或進入項目結構>app>依賴項,點擊添加,選擇3模塊依賴關係並選擇您的模塊

+1

如果您在從主應用程序中引用庫的類時遇到問題,這是因爲該庫可能有不同的變體。因此,只需以適當的方式指定依賴關係: '編譯項目(路徑:':庫',配置:'變體')'。在這裏,'variant'由庫的'build.gradle'文件定義的'flavor'和'buildType'組成。例如,如果你希望'develop'類型的'release'構建類型爲'develop',那麼'variant'就是'developRelease'。 – Sevastyan

相關問題