2016-01-22 131 views
1

我在android studio中有一个多模块项目,我想将一个.aar文件集成到一个模块中,该模块在App模块中被引用为库。项目结构为:集成.aar文件在多模块android studio项目

- module1 
- module2 
- module3 
- module4 
- moduleApp 

模块1用作模块2中的库引用。

build.gradle module2

dependencies { 
     ... 
     compile project(':module1') 
    } 

的模块2和其他模块在日应用模块被引用。

build.gradle moduleApp

dependencies { 
    ... 
    compile project(':module2') 
    compile project(':module3') 
    compile project(':module4') 
} 

我需要一个.aar文件库集成在模块1,因为它是从模块1 impementation要求。我以正常方式整合:

build.gradle module1

repositories { 
    flatDir { 
     dirs 'libs' 
    } 
} 

dependencies { 
    compile 'package.name.of.aar:[email protected]' 
} 

然而,当我运行gradle sync我收到错误:

failed to resolve package.name.of.aar:[email protected] in module2 
failed to resolve package.name.of.aar:[email protected] in moduleApp 

我应该怎么做才能让模块2和moduleApp找到.aar库?我应该在build.gradle文件中包含更多内容吗?

回答

0

尝试改变

dependencies { 
    compile 'package.name.of.aar:[email protected]' 
} 

到:

dependencies { 
    compile ('package.name.of.aar:[email protected]'){ 
     transitive=true 
    } 
} 

另外,只需添加:

compile 'package.name.of.aar:[email protected]' 

到MODULE2和moduleApp

+0

flatDir {dirs'libs'}是一个有效的存储库。在module1的libs文件夹下,我放置了myLibrary.aar文件。 module1不是.aar库。它是一个需要myLibrary.aar的代码模块。 – arjacsoh

+0

我道歉,我完全误解了你的问题。你应该使用'transitive = true',如我链接到的答案所示。更新我的答案。 – RaGe

+0

我已经尝试过你的第二种方法,它不起作用。我将申请transisive,但我不知道是否应该将它设置为“编译”:module1'时添加它作为模块2和moduleApp中的依赖项,因为这是在其他模块引用为库的模块 – arjacsoh

0

由于您使用与AAR文件一个flat repo在所有模块它们使用的模块1(在你的情况下模块2和应用程序),您需要的AAR文件,你必须在你的build.gradle添加该存储库:

repositories { 
      flatDir { 
       dirs 'libs' 
      } 
     } 

,并添加依赖:

dependencies { 
    compile(name:'nameOfYourAARFileWithoutExtension', ext:'aar') 
} 
+0

目录库位于与build.gradle同级的module1中,它被定义为相对路径。其他模块没有带.aar文件的libs目录。我认为它可以在其他模块中定义为绝对路径,但它不能帮助我,我排除了这种可能性。此外,我不需要它在其他模块中,我只想阻止gradle构建失败。这是这个问题。 – arjacsoh

+0

将你的aar移动到maven repo。它可以解决任何问题 –