使用“flatDirs”将本地.aar文件添加到Gradle构建不起作用

问题描述 投票:154回答:11

我知道这个问题:Adding local .aar files to my gradle build但解决方案对我不起作用。

我尝试将此语句添加到我的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

android android-studio android-gradle build.gradle aar
11个回答
288
投票

在Josiah的回答的基础上,这是我如何使它工作。

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

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

dependencies {
    compile 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很有用。执行此操作后,请不要忘记同步gradle(使用工具栏按钮或在文件 - >同步中)。

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

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


1
投票

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

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

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

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


0
投票

这一行包括来自aar文件夹的所有jarlibs文件:

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

0
投票

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


187
投票

更新:正如@ amram99所述,issue已在Android Studio v1.3发布时修复。

经过测试并通过以下规格验证

  • Android Studio v1.3
  • gradle plugin v1.2.3
  • Gradle v2.4

什么现在有效

  • 现在,您可以通过Android Studio v1.3中的文件>新建>新模块>导入.JAR / .AAR包选项导入本地aar文件
  • 但是,无论Android Studio的更改如何,下面的答案都是真实有效的,因为这是基于gradle脚本编写的。

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

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

dependencies {
   compile(name:'nameOfYourAARFileWithoutExtension', ext:'aar')
 }
repositories{
      flatDir{
              dirs 'libs'
       }
 }

25
投票

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

老答案

试试这个:

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

...

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

14
投票

我在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')
        }
    }
}

App模块的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')
}

而已。清洁和建造。


7
投票

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

enter image description here

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


5
投票

你可以这样做。它需要采用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等)


4
投票

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

MyProject的/应用/库/ mylib中,1.0.0.aar

MyProject的/应用/ myModulesFolder / myLibXYZ

在build.gradle上

来自Project / app / myModulesFolder / myLibXYZ

我把这个:

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

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


3
投票

对于从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集成到项目中时找到了解决方案。


3
投票

就我而言,上面的答案都没有奏效!因为我有不同的productFlavors只是添加repositories{ flatDir{ dirs 'libs' } }

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

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

}

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

© www.soinside.com 2019 - 2024. All rights reserved.