使用“ latDirs”将 local. aar 文件添加到 Gradle 构建中不起作用

我知道这个问题: 在我的 gradle 构建中添加本地.aar 文件,但解决方案不适合我。

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

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

我还将 slidingmenu.aar文件放到了 /libs中,并在 dependencies部分: compile 'com.slidingmenu.lib:slidingmenu:1.0.0@aar'中引用了它,但是它根本不起作用。

我也试了 compile files('libs/slidingmenu.aar'),但没有结果。

我错过了什么,有什么想法吗?

附注: Android Studio 0.8.2

183507 次浏览

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

老答案

试试这个:

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


...


compile(name:'slidingmenu', ext:'aar')

基于约西亚的回答,我是这么做的。

按照他的指示(正在编辑)(文件-> New-> New Module-> Import. JAR/. AAR)并导入您的.AAR。

然后在您的项目 build.gradle (不是顶级的,是‘ app’下面的那个)中添加以下内容(在依赖关系部分) :

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

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

MyApplication
.idea
app
build.gradle (here's where to add compile project(':ProjectName') to dependency section)
ProjectName (added automatically after importing, matching the name of your aar file)
build
gradle
etc

这对我运行 Android Studio 0.8.0很有用。不要忘记同步梯度(使用工具栏按钮或在 文件-> 同步)后,你这样做。

(感谢约西亚让我找到了正确的方向)

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

更新 : 正如@amram99所提到的,自 Android Studio v1.3发布以来,问题已经被修复。

按以下规格进行测试和验证

  • Android Studio v1.3
  • Gradle 插件 v1.2.3
  • 格拉德2.4版

现在怎么办

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

  • 然而,下面的答案是正确的,有效的,不管 Android Studio 的变化,因为这是基于分级脚本。


老答案: 在最近的一次更新中,Android 的用户通过 Android Studio 的添加新模块菜单选项打破了本地 aar 文件的包含。 检查这里列出的 问题。 不管在 IDE 的特性列表中进出什么,下面的方法在处理本地 aar 文件时都可以工作。(今天测试) :

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

在模块 build.gradle中:

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

build.gradle项目中:

repositories{
flatDir{
dirs 'libs'
}
}

你可以这样做,它需要以 maven 格式进行:

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

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

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

然后引用依赖关系:

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

其中 version是您的 aar 文件的版本(例如,3.0等)

对于那些在 Android Studio 1.4中遇到这个问题的人,我通过在项目中创建一个包含两个内容的模块来解决这个问题。

  1. 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 集成到一个项目中的时候找到了解决方案。

在我的情况下,以上的答案都不起作用! 因为我有不同的产品口味只是添加

repositories {
flatDir {
dirs 'libs'
}
}

没有工作! 我最终指定了 Libs目录的确切位置:

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

我想在 建造,分级中有不同的产品口味的时候应该引入像这样的 latDirs

我在 Android Studio 2.1上做了这个。我有一个名为“本地广告”的模块,它可以在多个项目之间共享。

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

目录结构:

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

然后,另一个变化是:

顶级档案:

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

App module 的 build.gradle 文件: 没有变化

Gradle 文件(包括模块) :

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

原生广告模块的分级文件:

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

就是这样,干净整洁。

现在最简单的方法是将它作为一个模块添加

enter image description here

这将创建一个包含 aar 文件的新模块,因此之后只需将该模块作为依赖项包含进来

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

MyProject/app/libs/Mylib-1.0.0. aar

MyProject/app/myModulesFolder/myLibXYZ

建造,分级频道

项目/app/myModulesFolder/myLibXYZ

我这样写道:

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

我的子模块 XYZ 完成并运行良好,它依赖于来自主模块的一些库。

在我的例子中,我只是将 AAR 文件放在 libs 中,然后添加

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

我认为它与默认生成的依赖项类似:

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

这一行包括 libs文件夹中的所有 aarjar文件:

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

在应用程序级别文件中添加以下内容 实现项目(路径:’: project name’)

如果你已经使用了 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. 使用与使用 flatDirs从本地/远程 maven 存储库获取相同的方法
// 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")
}

由于在 kotlin implementationgroup是强制性的(不是可选的/有默认值) ,因此需要 group,见下文:

// 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
)

免责声明: 使用 NO.1和 flatDirs NO.2方法的区别,我仍然不知道很多,你可能想编辑/评论这个答案。

参考文献:

  1. Https://stackoverflow.com/a/56828958/3763032
  2. Https://github.com/gradle/gradle/issues/9272

这个解决方案可以与 Android Studio 4.0.1一起使用。

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

如果您的应用程序中有多个模块,并且只想将 aar 添加到其中一个模块中,那么这个解决方案就很方便。

在根项目 建造,分级

repositories {
flatDir {
dirs 'libs'
}}

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

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

}

快乐编码:)