【问题标题】:Integrate .aar file in multi-module android studio project在多模块android studio项目中集成.aar文件
【发布时间】:2016-01-22 18:54:46
【问题描述】:

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

- module1
- module2
- module3
- module4
- moduleApp

module1 用作module2 中的库引用。

build.gradle module2:

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

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

build.gradle moduleApp:

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

我需要将 .aar 文件作为库集成到模块 1 中,因为模块 1 实现需要它。我以正常方式进行集成:

build.gradle module1:

repositories {
    flatDir {
        dirs 'libs'
    }
} 

dependencies {
    compile 'package.name.of.aar:myLibrary@aar'
}

但是,当我运行 gradle sync 时,我收到错误:

failed to resolve package.name.of.aar:myLibrary@aar in module2
failed to resolve package.name.of.aar:myLibrary@aar in moduleApp

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

【问题讨论】:

    标签: android android-studio gradle android-gradle-plugin


    【解决方案1】:

    尝试改变

    dependencies {
       compile 'package.name.of.aar:myLibrary@aar'
    }
    

    到:

    dependencies {
       compile ('package.name.of.aar:myLibrary@aar'){
          transitive=true
       }
    }
    

    或者,只需添加:

    compile 'package.name.of.aar:myLibrary@aar'
    

    到module2和moduleApp

    【讨论】:

    • flatDir{dirs 'libs'} 是一个有效的存储库。在 module1 的 libs 文件夹下,我放置了 myLibrary.aar 文件。 module1 不是 .aar 库。它是一个带有代码的模块,需要 myLibrary.aar。
    • 抱歉,我完全误解了你的问题。您可能应该使用transitive = true,如我链接到的答案所示。更新我的答案。
    • 我已经尝试过您的第二种方法,但它不起作用。我将应用transisive,但我想知道是否应该在将其添加为module2和moduleApp中的依赖项时将其设置为“compile':module1',因为这是在其他模块中作为库引用的模块。
    • 有没有办法知道我的 aar 的包名
    【解决方案2】:

    由于您使用的是带有flat repo 的 aar 文件,在所有模块中使用 module1(在您的情况下为 module2 和应用程序),您需要在其中添加 aar 文件你的build.gradle 仓库:

      repositories {
                flatDir {
                    dirs 'libs'
                }
            }
    

    并添加依赖:

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

    【讨论】:

    • 目录库位于与build.gradle同级的module1中,即定义为相对路径。其他模块没有包含 .aar 文件的 libs 目录。我认为它可以在其他模块中定义为绝对路径,但这对我没有帮助,我已经排除了这种可能性。此外,我在其他模块中不需要它,我只想防止 gradle build 失败。这就是本案的问题。
    • 将你的 aar 移动到一个 maven repo 中。它解决了任何问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多