172

我知道这个问题:将本地 .aar 文件添加到我的 gradle 构建中,但该解决方案对我不起作用。

我尝试将此语句添加到文件的顶层build.gradle

repositories {
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
}

我也将slidingmenu.aar文件放入/libs并在该部分中引用它dependenciescompile 'com.slidingmenu.lib:slidingmenu:1.0.0@aar'但它根本不起作用。

我也尝试过compile files('libs/slidingmenu.aar'),但没有运气。

我错过了什么?有任何想法吗?

PS安卓工作室0.8.2

4

14 回答 14

301

基于 Josiah 的回答,这就是我如何让它发挥作用的方法。

按照他的指示(正在编辑)(文件 -> 新建 -> 新模块 -> 导入 .JAR/.AAR)并导入您的 .AAR。

然后在您的项目 build.gradle(不是顶层,“app”下的那个)中添加以下内容(在依赖项部分中):

dependencies {
    compile project(':Name-Of-Your-Project')
}

注意 Name-Of-Your-Project 应该与导入 AAR 文件后添加的文件夹的名称相匹配(与app/.idea最顶层文件夹下的同一级别)。或者换一种说法...

我的应用程序
  。主意
  应用程序
  build.gradle(这里是添加 compile project(':ProjectName') 到依赖部分的地方)
  ProjectName(导入后自动添加,与您的 aar 文件的名称匹配)
  建造
  毕业典礼
  ETC

这对我运行 Android Studio 0.8.0 很有用。执行此操作后,不要忘记同步 gradle(使用工具栏按钮或在File->Synchronize中)。

(感谢 Josiah 让我朝着正确的方向前进)

(注意:在此之前,我尝试将其添加到 libs 文件夹中,尝试操作顶层build.gradle和应用程序级别build.gradle,但这些都不适用于我的 aars 文件——jar 可以正常工作,但 aar 文件不行)

于 2014-07-22T17:52:28.860 回答
190

更新:正如@a​​mram99 提到的,该问题已在 Android Studio v1.3 发布时得到修复。

通过以下规格测试和验证

  • 安卓工作室 v1.3
  • gradle 插件 v1.2.3
  • 摇篮 v2.4

现在什么有效

  • 现在您可以通过Android Studio v1.3 中的File>New>New Module>Import .JAR/.AAR Package选项导入本地 aar 文件

  • 但是,无论 Android Studio 的更改如何,以下答案都是真实有效的,因为这是基于 gradle 脚本。


旧答案: 在最近的更新中,android 的人们通过 Android Studio 的添加新模块菜单选项打破了包含本地 aar 文件的问题。检查此处列出的问题。不管 IDE 的功能列表有什么进出,下面的方法在处理本地 aar 文件时都有效。(今天测试过):

将 aar 文件放在 libs 目录中(如果需要,创建它),然后在 build.gradle 中添加以下代码:

dependencies {
   compile(name:'nameOfYourAARFileWithoutExtension', ext:'aar')
 }
repositories{
      flatDir{
              dirs 'libs'
       }
 }
于 2015-03-02T17:47:56.980 回答
26

编辑: 使用本地 AAR 文件作为构建依赖项的正确方法(当前)是使用模块导入向导(文件 | 新模块 | 导入 .JAR 或 .AAR 包),它将自动将 .aar 添加为库模块在你的项目中。

旧答案

尝试这个:

allprojects {
  repositories {
    jcenter()
    flatDir {
      dirs 'libs'
    }
  }
}

...

compile(name:'slidingmenu', ext:'aar')
于 2014-07-02T00:21:15.897 回答
15

我在 Android Studio 2.1 上得到了这个工作。我有一个名为“Native_Ads”的模块,它在多个项目中共享。

首先,我在 Native_ads 模块中创建了一个名为“aars”的目录,然后将 aar 文件放入其中。

目录结构:

libs/
aars/    <-- newly created
src/
build.gradle
etc

然后,其他变化:

顶级 Gradle 文件:

allprojects {
    repositories {
        jcenter()
        // For module with aar file in it
        flatDir {
            dirs project(':Native_Ads').file('aars')
        }
    }
}

应用模块的 build.gradle 文件: - 没有变化

Settings.gradle 文件(包括模块):

include ':app'
include 'Native_Ads'
project(':Native_Ads').projectDir = new File(rootProject.projectDir, '../path/to/Native_Ads')

Native_Ads 模块的 Gradle 文件:

repositories {
    jcenter()
    flatDir {
        dirs 'aars'
    }
}
dependencies {
    compile(name:'aar_file_name_without_aar_extension', ext:'aar')
}

而已。清洁和建造。

于 2016-06-23T15:47:18.567 回答
8

现在最简单的方法是将其添加为模块

在此处输入图像描述

这将创建一个包含 aar 文件的新模块,因此您只需将该模块作为依赖项包含在内

于 2016-08-17T10:37:34.030 回答
7

这是我的结构,以及我如何解决这个问题:

MyProject/app/libs/ mylib-1.0.0.aar

MyProject/app/myModulesFolder/myLibXYZ

build.gradle 上

来自Project/app/myModulesFolder/myLibXYZ

我已经把这个:

repositories {
   flatDir {
    dirs 'libs', '../../libs'
  }
}
compile (name: 'mylib-1.0.0', ext: 'aar')

完成并正常工作,我的子模块 XYZ 依赖于主模块中的某个库。

于 2017-05-03T15:17:42.313 回答
6

你可以这样做。它需要采用 maven 格式:

repositories {
  maven { url uri('folderName')}
}

然后您的 AAR 需要进入组 ID“com.example”的文件夹结构:

folderName/
  com/
    example/
       verion/
          myaar-version.aar

然后作为依赖项引用:

compile 'com.example:myaar:version@aar'

您的 aar 文件的版本在哪里version(即 3.0 等)

于 2015-05-22T15:07:57.527 回答
4

对于从 Android Studio 1.4 开始遇到此问题的任何人,我通过在项目中创建一个包含两件事的模块来使其工作。

  1. build.gradle 包含以下内容:

    configurations.create("default")

    artifacts.add("default", file('facebook-android-sdk-4.7.0.aar'))

  2. aar 文件(在本例中为“facebook-android-sdk-4.7.0.aar”)

然后将新库作为模块依赖项包含在内。现在您可以使用已构建的 aar,而无需在项目中包含源代码。

感谢 Facebook 的这次黑客攻击。我在将 Android SDK 集成到项目中时找到了解决方案。

于 2015-10-24T17:07:59.053 回答
4

就我而言,上述答案均无效!因为我有不同的 productFlavors 只是添加

repositories {
    flatDir {
         dirs 'libs'
    }
}

不工作!我最终指定了libs目录的确切位置:

repositories{
    flatDir{
        dirs 'src/main/libs'
    }
}

当 build.gradle 中有不同的 productFlavors 时,我猜应该像这样引入flatDirs

于 2016-05-25T11:57:36.933 回答
4

此解决方案适用于 Android Studio 4.0.1。

除了按照上述解决方案的建议创建一个新模块外,您还可以尝试此解决方案。

如果您的应用程序中有多个模块,并且只想将 aar 添加到其中一个模块中,那么此解决方案会派上用场。

在你的根项目build.gradle

添加

repositories {
flatDir {
    dirs 'libs'
}}

然后在要在本地添加 .aar 文件的模块中。只需添加以下代码行。

dependencies {
api fileTree(include: ['*.aar'], dir: 'libs')
implementation files('libs/<yourAarName>.aar')

}

快乐编码:)

于 2020-07-22T07:36:09.113 回答
3

此行包括文件夹aar中的所有文件:jarlibs

implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs/')
于 2019-06-20T15:02:46.627 回答
3

如果您已经在使用 Kotlin Gradle DSL,那么以这种方式使用它的替代方法:

这是我的项目结构

|-root
|----- app
|--------- libs // I choose to store the aar here
|-------------- my-libs-01.aar
|-------------- my-libs-02.jar
|--------- build.gradle.kts // app module gradle
|----- common-libs // another aar folder/directory
|----------------- common-libs-01.aar
|----------------- common-libs-02.jar
|----- build.gradle.kts // root gradle

我的app/build.gradle.kts

  1. 使用简单的方法fileTree
// android related config above omitted...

dependencies {
    // you can do this to include everything in the both directory
    // Inside ./root/common-libs & ./root/app/libs
    implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar"))))
    implementation(fileTree(mapOf("dir" to "../common-libs", "include" to listOf("*.jar", "*.aar"))))
}
  1. 使用相同的方法,例如从本地/远程 Maven 存储库中获取flatDirs
// android related config above omitted...

repositories {
    flatDir {
        dirs = mutableSetOf(File("libs"), File("../common-libs") 
    }
}

dependencies {
   implementation(group = "", name = "my-libs-01", ext = "aar")
   implementation(group = "", name = "my-libs-02", ext = "jar")

   implementation(group = "", name = "common-libs-01", ext = "aar")
   implementation(group = "", name = "common-libs-02", ext = "jar")
}

是必需的group,因为它在 kotlin 中是强制性的(不是可选的/具有默认值)implementation,见下文:

// Filename: ReleaseImplementationConfigurationAccessors.kt
package org.gradle.kotlin.dsl

fun DependencyHandler.`releaseImplementation`(
    group: String,
    name: String,
    version: String? = null,
    configuration: String? = null,
    classifier: String? = null,
    ext: String? = null,
    dependencyConfiguration: Action<ExternalModuleDependency>? = null
)

免责声明:使用 1 号和flatDirs2 号方法的区别,我仍然不太了解,您可能想编辑/评论这个答案。

参考:

  1. https://stackoverflow.com/a/56828958/3763032
  2. https://github.com/gradle/gradle/issues/9272
于 2020-04-11T13:42:30.350 回答
3

就我而言,我只是将 AAR 文件放在库中,然后添加

dependencies {
    ...
    api fileTree(dir: 'libs', include: ['*.aar'])
    ...
}

build.gradle它工作。我认为它与默认生成的依赖项类似:

implementation fileTree(dir: 'libs', include: ['*.jar'])
于 2019-03-06T01:32:16.677 回答
0

在应用程序 gradle 文件实现项目中添加以下内容(路径:':项目名称')

于 2019-07-25T08:52:16.730 回答