2013-07-04 55 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

相关问题