ChatGPT解决这个技术问题 Extra ChatGPT

如何使用 Gradle for Android 手动包含外部 aar 包

我一直在尝试新的 android 构建系统,但遇到了一个小问题。我已经编译了我自己的 ActionBarSherlock 的 aar 包,我称之为“actionbarsherlock.aar”。我想要做的是实际上使用这个 aar 来构建我的最终 APK。如果我使用编译项目(':actionbarsherlock')将整个 ActionBarSherlock 库作为 android-library 模块包含到我的主项目中,我就可以成功构建而不会出现任何问题。

但是我的问题是,我想手动提供该依赖项作为 aar 文件包,就像我想要一个 JAR 一样,那么我似乎无法弄清楚如何将它正确地包含到我的项目中。我尝试使用编译配置,但这似乎不起作用。我在编译过程中一直找不到符号,这告诉我 aar 包中的 classes.jar 没有包含在类路径中。

有谁知道手动将 aar 包作为文件包含的语法?

构建.gradle

buildscript {

 repositories {
     mavenCentral()
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:0.4'
  }
}
apply plugin: 'android'

repositories {
   mavenCentral()
}
dependencies {
    compile files('libs/actionbarsherlock.aar')
}

android {
    compileSdkVersion 15
    buildToolsVersion "17.0"
}

编辑:所以答案是它目前不受支持,如果你想跟踪它,这里是 issue

编辑:目前仍然不直接支持,最好的选择似乎是@RanWakshlak 提出的解决方案

编辑:使用@VipulShah 提出的语法也更简单

考虑 Vipul Shah 的回应:它终于对我有用,没有本地 maven 存储库,从 Android Studio 0.5.8 开始。
在此处查看我的问题和答案stackoverflow.com/a/31662782/746347
如果您使用的是 Gradle 3.0.0 或更高版本,这个简单的 Gradle 设置对我有用:stackoverflow.com/questions/29081429/…
它对我有用:stackoverflow.com/a/67918749
这回答了你的问题了吗? Android Studio: Add jar as library?

A
Ace Falobi

请按照以下步骤使其正常工作(我已将其测试到 Android Studio 2.2)

假设您将 aar 文件保存在 libs 文件夹中。 (假设文件名是 cards.aar

然后在应用程序 build.gradle 中指定以下内容并单击与 Gradle 文件同步项目。打开项目级别 build.gradle 并添加 flatDir{dirs 'libs'},如下所示

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

现在打开应用级 build.grdle 文件并添加 .aar 文件

    dependencies {
       implementation(name:'cards', ext:'aar')
}

如果一切顺利,您将看到在 build -> exploded-aar 中创建了库条目

另请注意,如果您从另一个具有依赖项的项目中导入 .aar 文件,您也需要在 build.gradle 中包含这些文件。


@VipulShah libs 目录在哪里?
也许应该建议将修改放在应用程序模块“build.gradle”中,而不是放在顶部文件夹“build.gradle”中。
找到了我上面问题的答案:代替 compile 依赖项添加两个依赖项 debugCompile(name:'cards-debug', ext:'aar')releaseCompile(name:'cards-release', ext:'aar')
不要与示例代码混淆。带有 allprojects {...} 的第一个块进入“项目”级 gradle 文件,带有 dependencies {...} 的第二部分应该进入“应用”级 gradle 文件。
请更新您的答案:警告:配置“编译”已过时,已替换为“实施”和“API”。它将在 2018 年底删除。有关详细信息,请参阅:d.android.com/r/tools/update-dependency-configurations.html
O
Oliver Kranz

右键单击您的项目并选择“打开模块设置”。

https://i.stack.imgur.com/bu5D2.png

单击窗口左上角的“+”按钮以添加新模块。

https://i.stack.imgur.com/oEH90.png

选择“导入 .JAR 或 .AAR 包”并单击“下一步”按钮。

https://i.stack.imgur.com/Cmj8E.png

使用“文件名”字段旁边的省略号按钮“...”查找 AAR 文件。

https://i.stack.imgur.com/DOoXM.png

保持选中应用程序的模块,然后单击“依赖项”窗格以将新模块添加为依赖项。

https://i.stack.imgur.com/OjTOp.png

使用依赖项屏幕的“+”按钮并选择“模块依赖项”。

https://i.stack.imgur.com/AO0eg.png

选择模块并单击“确定”。

https://i.stack.imgur.com/26yRA.png

编辑:屏幕截图 6 中的模块依赖项已在 Android Studio 4.1 中删除。作为替代方案,将模块依赖项添加到 build.gradle。

dependencies {
    implementation project(':your_module')
}

编辑:Android Studio 4.2 中的用户界面和工作流程发生了很大变化。现在在官方文档中很好地解释了添加依赖项的过程:Adding dependencies with the Project Structure Dialog


最佳答案,请记住之后 make Alt+B >清理并重建项目。 Android Studio 为什么你很痛苦!我希望将 NetBeans IDE 作为 Android 开发者平台
每次您只想将一些 aar 库添加到您的项目时,创建一个新模块并不是最好的主意
Module Dependency 选项已从最新 Android Studio (V4.1) 的弹出菜单中删除
任何基于 GUI 的方法都单击此按钮,而 GUI 单击不是基于科学方法的方法。这不起作用
从 android studio 4.2 的添加模块中删除 import .jar/.aar 包并移至项目结构对话框:developer.android.com/studio/projects/…
R
Ramesh R

您可以从存储库引用 aar 文件。 maven 是一个选项,但有一个更简单的解决方案:将 aar 文件放在您的 libs 目录中并添加一个目录存储库。

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

然后在依赖部分引用库:

  dependencies {
        implementation 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
}

您可以查看 Min'an blog post 了解更多信息。


这很好用,并且比接受/更高评价的答案更好,因为它更简单,我可以将其包含在版本控制中,而无需将文件添加到每个开发人员的本地 maven 存储库中(如果我必须这样做,为什么首先使用 Gradle ?) 谢谢!
@ajpolt 可能建议您设置一个 repo 服务器(用于专有的 deps),这样您就不必将它放在开发机器上或项目的 lib 文件夹中。如果您只有一个依赖项,请将其放入 Maven 结构化 Google 代码存储库(作为临时存储库)
此答案中要注意的最重要一点是在依赖项末尾提到“@aar”。
我想这将不再适用于最新的 gradle 插件:stackoverflow.com/questions/60878599/…
这是包含最简单形式的唯一答案,具有所有现代语法,包括 implementation 等。这是复制粘贴解决方案。由于 Android Build Gradle Plugin 4.0.0 现在会引发错误而不是忽略损坏的 .aar 路径,因此收到了很多新的支持
C
Changhoon

之前(默认)

implementation fileTree(include: ['*.jar'], dir: 'libs')

只需在 include 数组中添加 '*.aar'

implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')

它在 Android Studio 3.x 上运行良好。

如果你想忽略一些图书馆?这样做。

implementation fileTree(include: ['*.jar', '*.aar'], exclude: 'test_aar*', dir: 'libs')
debugImplementation files('libs/test_aar-debug.aar')
releaseImplementation files('libs/test_aar-release.aar')

虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高答案的长期价值。
工作正常,如果图书馆很简单,这就是要走的路。但它们是这里的一个问题:您需要导入在 aar 文件中导入的所有库以使其正常工作。从 aar 文件导入不会使用此方法传播。
或者,更简单:implementation fileTree(include: ['*.?ar'], dir: 'libs')
@friederbluemle 从理论上讲,我会说更短,同时又不具体,而不是更简单。
M
Mahozad

以下方法适用于 Android Studio v0.8.x:

将 aar 文件保存在 app 模块的 libs 文件夹下(例如://libs/myaar.aar)

将以下内容添加到您的“app”模块文件夹的 build.gradle(不是您的项目根 build.gradle)。注意编译行中的名称,它是 myaar@aar 而不是 myaar.aar。依赖项 { 编译 'package.name.of.your.aar:myaar@aar' } 存储库{ flatDir{ dirs 'libs' } }

单击工具 -> Android -> 将项目与 Gradle 文件同步


在 AS 1.0 上完美运行
如果有人需要它,如果 gradle 工作正常但您仍然看不到课程,请重新启动 Android Studio ...
这个解决方案在 AS2.2 中效果很好 - gradle 似乎对 AAR 文件的语法非常挑剔。
请更新或删除,编译已弃用,还有这个问题:stackoverflow.com/questions/60878599/…
m
m0skit0

使用 Android Studio 3.4 和 Gradle 5,您可以像这样简单地做到这一点

dependencies {
    implementation files('libs/actionbarsherlock.aar')
}

这是最好的答案。依赖是明确的并且非常简单。
同意这是最好的答案。立即生效,非常适合将 .aar 依赖项添加到 React Native 库。
这会从 gradle 插件 4 开始引发错误:stackoverflow.com/questions/60878599/…
@David 感谢您的报告,我会尽快对其进行测试。
@David对不起,忘了回答这个问题。对我来说很好。
T
Tarun A

在应用级 build.gradle 中添加以下行

  implementation fileTree(dir: "libs", include: ["*.aar"])

将项目结构从 Android 更改为 Project。

导航到 app-> libs,如下所示

https://i.stack.imgur.com/ofBSB.png

然后将“aar”粘贴到 libs 文件夹中。

单击 android studio 左上角的 File,然后单击“Sync Project with Gradle Files”,如下所示。

https://i.stack.imgur.com/o1XeX.png

而已。


t
tbruyelle

目前不支持引用本地 .aar 文件(由 Xavier Ducrochet 确认)

您可以做的是建立一个本地 Maven 存储库(比听起来简单得多)并从那里引用 .aar。

我写了一篇博文,详细说明了如何让它在这里工作:

http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds


当工件是快照时,我没有设法使其工作,知道为什么吗?
您是使用 Eclipse 还是仅使用 Android Studio 实现的?使用 eclipse,“gradle eclipse”将 aar 文件添加到类路径中,但 eclipse 无法识别其中的类。
如果按照教程后未找到您的本地 .aar 文件(在 Gradle 1.9 或更高版本上),请检查此问题 stackoverflow.com/questions/20911665/…
A
Allen Luce

我刚刚成功了!

将 mylib-0.1.aar 文件复制到 libs/ 文件夹中 将这些行添加到 build.gradle 的底部(应该是应用程序,而不是项目): repositories { flatDir { dirs 'libs' } } dependencies { compile 'com.example. lib:mylib:0.1@aar' } 到目前为止一切顺利。最重要的一点来了:

除非启用离线模式,否则 Gradle 需要访问网络以获取依赖项。

确保您已通过 Project Structures/Gradle 中的复选框启用离线工作

- 或者 -

配置代理设置以访问网络。

要配置代理设置,您必须修改项目的 gradle.properties 文件,分别配置 http 和 https,如下所示:

systemProp.http.proxyHost=proxy.example.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=user
systemProp.http.proxyPassword=pass
systemProp.http.nonProxyHosts=localhost
systemProp.http.auth.ntlm.domain=example <for NT auth>

systemProp.https.proxyHost=proxy.example.com
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=user
systemProp.https.proxyPassword=pass
systemProp.https.nonProxyHosts=localhost
systemProp.https.auth.ntlm.domain=example <for NT auth>

希望这有效。


请更新或删除,编译已弃用,还有这个问题:stackoverflow.com/questions/60878599/…
s
shusheng007

有2种方式:

第一种方式

打开您的 Android Studio 并通过 File -> New -> New Module 导航到 Create New Module 窗口

https://i.stack.imgur.com/7xWVm.jpg

选择 Import .JAR/.AAR Package 项并单击 Next 按钮 在属于您的应用程序模块的 build.gradle 文件中添加依赖项。

    dependencies {
        ...
        implementation project(path: ':your aar lib name')
    }

就这样。

第二种方式

在 libs 目录下创建一个文件夹,例如 aars。将您的 aar 库放入 aars 文件夹。添加代码片段

repositories {
    flatDir {
        dirs 'libs/aars'
    }
}

进入您的 build.gradle 文件属于应用程序模块。

在属于您的应用模块的 build.gradle 文件中添加依赖项。

dependencies {
    ...
    implementation (name:'your aar lib name', ext:'aar')
}

就这样。

如果你会读中文,你可以查看博客什么是AAR文件以及如何在Android开发中使用


这个答案对我真的很有帮助
当按照第一种方式时,在主项目中没有检测到 aar 文件中的类,我们需要添加任何额外的配置吗?
请更新或删除,首先答案已经发布,第二个“编译”已弃用。
m
mixel

您只需几行代码即可添加多个 aar 依赖项。

添加本地 flatDir 存储库:

repositories {
    flatDir {
        dirs 'libs'
    }
} 

libs 目录中的每个 aar 添加到 compile 依赖项配置:

fileTree(dir: 'libs', include: '**/*.aar')
        .each { File file ->
    dependencies.add("compile", [name: file.name.lastIndexOf('.').with { it != -1 ? file.name[0..<it] : file.name }, ext: 'aar'])
}

这行得通,但是如何检查一下,如果已经将依赖项添加为 maven 依赖项,那么我不希望需要添加 aar 文件,PS:我使用它来编写一个插件,该插件会自动将我的 aar 添加到 android 项目中并在 build.gradle 中添加依赖项
@Adi 如果您已经有 maven 依赖项,则不要将相应的 aar 放入 libs 文件夹。
感谢您的回复,正如我所提到的,将 aar 添加到 libs 是由正在开发的 Android Studio 插件自动完成的,所以我想知道该插件添加到 build.gradle 文件的依赖项之前是否已经添加。
我现在没有答案。我认为最好创建单独的问题。
N
Nonos

不幸的是,这里没有一个解决方案对我有用(我得到未解决的依赖项)。最终奏效的方法,恕我直言,最简单的方法是:从 Android Studio 中突出显示项目名称,然后是 File ->新模块 ->导入 JAR 或 AAR 包。归功于 this post 中的解决方案


需要注意的是,Android Studio 在他们的导入向导中异常模糊。当他们在其中一个步骤中声明“文件名”时,他们实际上要求的是文件的路径......希望这条消息能让其他人免于头痛。
I
Iliya Mashin

如果你使用 Gradle Kotlin DSL,你需要在你的模块目录中添加一个文件。

例如:libs/someAndroidArchive.aar

只需在依赖块中的模块 build.gradle.kts 中写入以下内容:

implementation(files("libs/someAndroidArchive.aar"))

Á
Álvaro Agüero

更新安卓工作室 3.4

转到文件-> 项目结构

https://i.stack.imgur.com/tGcEY.jpg

模块,然后单击 +

https://i.stack.imgur.com/AA7mw.png

选择导入 .aar 包

https://i.stack.imgur.com/jdEce.png

查找 .aar 路由

https://i.stack.imgur.com/aU4if.png

完成并应用,然后验证是否添加了包

https://i.stack.imgur.com/JHbDa.png

现在在应用程序模块中,单击 + 和 Module Dependency

https://i.stack.imgur.com/NVACg.png

检查库包并确定

https://i.stack.imgur.com/3gJRh.png

验证添加的依赖项

https://i.stack.imgur.com/06fQW.png

像这样的项目结构

https://i.stack.imgur.com/ZJeEz.png


这是我读到的第 17 个答案,最后添加了依赖项.. 嗯
s
shanwu

使用 Android Studio Arctic Fox 手动导入 AAR 文件

https://i.stack.imgur.com/zruFE.png

https://i.stack.imgur.com/tzvjt.png

https://i.stack.imgur.com/NwUj9.png

完毕!


佚名

我也遇到过这个问题。此问题报告:https://code.google.com/p/android/issues/detail?id=55863 似乎表明不支持直接引用 .AAR 文件。

也许现在的替代方法是将 actionbarsherlock 库定义为项目父目录下的 Gradle 库并相应地引用。

语法在这里定义http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library


感谢您对问题的参考。是的,我知道如何使用 Gradle Android 库来完成这项工作,但是这个选项对于我正在处理的项目来说并不是真正的最佳选择,但是谢谢!
m
mohax

就我而言,我的库中有一些依赖项,当我从中创建 aar 时,由于缺少依赖项而失败,因此我的解决方案是使用 arr 文件从我的库中添加所有依赖项。

所以我的项目级别 build.gradle 看起来是这样的:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
    }
}

allprojects {
    repositories {
        mavenCentral()
        //add it to be able to add depency to aar-files from libs folder in build.gradle(yoursAppModule)
        flatDir {
            dirs 'libs'
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle(modile app) 所以:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.example.sampleapp"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    //your project depencies
    ...
    //add lib via aar-depency
    compile(name: 'aarLibFileNameHere', ext: 'aar')
    //add all its internal depencies, as arr don't have it
    ...
}

和库 build.gradle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    //here goes library projects dependencies, which you must include
    //in yours build.gradle(modile app) too
    ...
}

g
garnet

https://developer.android.com/studio/projects/android-library.html#AddDependency 中给出了在应用程序中导入 AAR 文件的标准方法

单击文件 > 新建 > 新模块。单击导入 .JAR/.AAR 包,然后单击下一步。输入已编译的 AAR 或 JAR 文件的位置,然后单击 Finish。

请参阅上面的链接以了解后续步骤。


j
jiparis

我在 Android 问题跟踪器中找到了这个解决方法:https://code.google.com/p/android/issues/detail?id=55863#c21

诀窍(不是修复)是将您的 .aar 文件隔离到子项目中并将您的库添加为工件:

configurations.create("default")
artifacts.add("default", file('somelib.jar'))
artifacts.add("default", file('someaar.aar'))

更多信息:Handling-transitive-dependencies-for-local-artifacts-jars-and-aar


没错,示例如下:在 github.com/textileio/notes/commit/… 中,compile project(':mobile') 在 android/app/build.gradle 中,configurations.maybeCreate("default") 在 android/mobile/build.gradle 中,include ':mobile' 在 android/settings.gradle
S
Sam YC

我在这里尝试了所有解决方案,但没有一个有效,然后我意识到我犯了一个错误,我把 .aar 放在了错误的文件夹中,如下所示,我认为我应该放在根文件夹中,所以我创建了一个 libs文件夹在那里(图片中的1),但在app文件夹内,已经有一个libs,你应该放入第二个libs,希望这对那些和我有同样问题的人有帮助:

https://i.stack.imgur.com/EmYPR.png


没关系,您可以在 build.gradle 文件上指定任何路径。
M
Madhur Lalit

还有另外一种方法可以做到这一点。

通常 .aar 文件不应该像我们使用 .jar 那样直接使用,因此可以避免上面提到的在 libs 文件夹中提到它并在 gradle 中声明的解决方案。

第 1 步:解压缩 .aar 文件(您可以通过将其扩展名从“.aar”重命名为“.zip”来完成此操作)

第 2 步:您很可能会在解压后的文件夹中找到 .jar 文件。复制此 .jar 文件并将其粘贴到您的模块/libs 文件夹中

第 3 步:就是这样,现在同步您的项目,您应该能够从该 .jar 访问所有类/方法/属性。您无需在任何 gradle 文件中提及它的路径/名称/存在,这是因为 gradle 构建系统在构建项目时始终查找 libs 文件夹中存在的文件


a
anupam_kamble

只是为了简化答案

如果本地存在 .aar 文件,则在项目的 build.gradle 的依赖项中包含
compile project(':project_directory')

如果远程存在 .aar 文件,则在项目的 build.gradle 的依赖项中包含 compile 'com.*********.sdk:project_directory:0.0.1@aar'


n
nguyencse

你可以这样做:

将您的本地库(扩展名为:.jar、.aar、...)放入“libs”文件夹(或其他如果需要)。在 build.gradle(应用程序级别)中,将此行添加到依赖项实现 fileTree(include: ['*.jar', '*.aar'], dir: 'libs')


s
sheba

对我来说,这是一个关于如何配置 Android Studio 环境的问题。

当我更新 File -> Project Structure -> JDK Location 到更高的 Java 版本(jdk1.8.0_192.jdk - 对我来说),一切都开始工作了。


j
josedlujan

在我的情况下,当我添加“项目”进行编译时工作:

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


dependencies {
   compile project('com.x.x:x:1.0.0')
}