如何使用新的Gradle Android Build System手动包含外部aar包

时间:2013-05-22 03:09:25

标签: android gradle android-gradle build.gradle

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

但是我的问题是我想把这个依赖项作为一个aar文件包手动提供,就好像我是一个JAR然后我似乎无法弄清楚如何将它正确地包含在我的项目中。我试图使用编译配置,但这似乎不起作用。我继续在编译期间找不到符号,告诉我aar包中的classes.jar没有包含在类路径中。

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

build.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

提出的语法也更简单

24 个答案:

答案 0 :(得分:612)

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

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

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

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

现在打开app level build.grdle文件并添加.aar文件

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

如果一切顺利,您将看到图书馆条目是在构建中进行的 - >分解-AAR

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

答案 1 :(得分:222)

  1. 右键点击您的项目,然后选择"打开模块设置"
  2. Open module settings

    1. 点击窗口左上角的" +" 按钮添加新模块。
    2. Add new module

      1. 选择"导入.JAR或.AAR包" ,然后点击"下一步" 按钮。
      2. Import AAR

        1. 使用"文件名"旁边的省略号按钮" ..." 找到AAR文件。字段。
        2. Find AAR file

          1. 选中应用的模块,然后点击依赖关系窗格,将新模块添加为依赖项。
          2. Dependencies pane

            1. 使用依赖关系屏幕的" +" 按钮,然后选择"模块依赖关系"
            2. Add module dependency

              1. 选择模块,然后点击"确定"
              2. Choose module

答案 2 :(得分:100)

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

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

然后在依赖项部分中引用库:

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

您可以查看 Min'an blog post了解详情。

答案 3 :(得分:44)

以下方法适用于最新的Android工作室(> v0.8.x):

  • aar文件保存在应用模块的libs文件夹下(例如:<project>/<app>/libs/myaar.aar

  • 将以下内容添加到&#34; app&#34;的build.gradle中。 module文件夹(不是你的项目root build.gradle)。注意编译行中的名称,它是myaar @ aar而不是myaar.aar。

    dependencies {
        compile 'package.name.of.your.aar:myaar@aar'
    }
    
    repositories{
        flatDir{
            dirs 'libs'
        }
    }
    
  • 点击Tools -> Android -> Sync Project with Gradle Files

答案 4 :(得分:27)

之前(默认)

$.getJSON(prestring + "/api/v1/classes/"+parsed.classcode+"/questions", function(json) {
            vm.questions = json
            vm.questions.forEach(question => {
                $.ajax({
                    url: prestring + "/api/v1/questions/" + question.questionId + "/answers",
                    dataType: 'json',
                    //async: false,
                    success: function (json) {
                        question["answers"] = json
                        // question["answers"].push(json)
                    }
                })
            })
        })

只需在implementation fileTree(include: ['*.jar'], dir: 'libs') 数组中添加'*.aar'

include

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

如果你想忽略一些库?这样做。

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

答案 5 :(得分:20)

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

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

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

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

答案 6 :(得分:18)

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

添加本地flatDir存储库:

repositories {
    flatDir {
        dirs 'libs'
    }
} 

aar目录中的每个libs添加到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'])
}

答案 7 :(得分:18)

我刚刚成功了!

  1. mylib-0.1.aar 文件复制到 libs / 文件夹

  2. 将这些行添加到 build.gradle 的底部(应该是app,而不是项目):

    repositories {
       flatDir {
           dirs 'libs'
       }
    }
    dependencies {
        compile 'com.example.lib:mylib:0.1@aar'
    }
    
  3. 到目前为止一切顺利。这是最重要的一点:

  4. 除非启用了脱机模式,否则Gradle需要访问网络以获取依赖关系。

    确保您已通过项目结构/ 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>
    

    希望这有效。

答案 8 :(得分:13)

不幸的是,这里没有一个解决方案适用于我(我得到了未解决的依赖关系)。最终工作的是IMHO最简单的方法:从Android Studio突出显示项目名称,然后是文件 - &gt;新模块 - &gt;导入JAR或AAR包。信用转到this post

中的解决方案

答案 9 :(得分:6)

有两种方式:

  • 第一种方式

1:打开Android Studio并导航到&#34;创建新模块&#34;窗口按文件 - >新建&gt;新模块......

enter image description here

2:选择&#34;导入.JAR / .AAR包&#34;项目,然后单击下一步按钮

3:在属于build.gradle Modlue的app文件中添加依赖项。

dependencies {
    ...

    implementation project(path: ':your aar lib name')

}

全部。

  • 第二种方式

1在libs目录中创建一个文件夹,例如aars

2将您的aar lib放入aars文件夹。

3添加代码段

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

进入属于app模块的build.gradle文件。

4在build.gradle文件中添加属于app Modlue。

的依赖项

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

全部

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

答案 10 :(得分:6)

我也遇到过这个问题。此问题报告: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

答案 11 :(得分:3)

在我的情况下,我的库中有一些依赖项,当我从中创建aar时,我失败了,因为错过了依赖项,所以我的解决方案是使用{{1}添加lib的所有依赖项文件。

所以我的项目级别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

答案 12 :(得分:3)

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

enter image description here

答案 13 :(得分:3)

https://developer.android.com/studio/projects/android-library.html#AddDependency

中提供了在应用程序中导入AAR文件的标准方法

点击文件&gt;新&gt;新模块。 单击“导入.JAR / .AAR包”,然后单击“下一步”。 输入已编译的AAR或JAR文件的位置,然后单击“完成”。

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

答案 14 :(得分:3)

如果使用 Gradle Kotlin DSL ,则需要在模块目录中添加文件

例如:libs / someAndroidArchive.aar

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

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

答案 15 :(得分:2)

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

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

第 1 步:解压 .aar 文件(您可以通过将其扩展名从“.aar”重命名为“.zip”来实现)

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

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

答案 16 :(得分:2)

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

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

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

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

enter image description here

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

点击android studio左上角的文件,然后点击“用Gradle文件同步项目” ,如下所示。

enter image description here

就是这样。

答案 17 :(得分:2)

只是为了简化答案

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

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

答案 18 :(得分:2)

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

技巧(不是修复)是将.aar文件隔离到子项目中并将libs添加为工件:

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

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

答案 19 :(得分:1)

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

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

答案 20 :(得分:1)

更新ANDROID STUDIO 3.4

  1. 转到文件-> 项目结构

enter image description here

  1. 模块,然后单击 +

enter image description here

  1. 选择导入.aar包

enter image description here

  1. 找到.aar路线

enter image description here

  1. 完成应用,然后确认是否添加了程序包

enter image description here

  1. 现在在应用程序模块中,单击 + 模块依赖性

enter image description here

  1. 检查库包,然后确定

enter image description here

  1. 验证添加的依赖项

enter image description here

  1. 这样的项目结构

enter image description here

答案 21 :(得分:0)

您可以执行以下操作:

  1. 将本地库(扩展名:.jar,.aar,...)放入“ libs”文件夹(如果需要,也可以放入其他文件夹)。

  2. 在build.gradle(应用程序级别)中,将此行添加到依赖项中

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

答案 22 :(得分:0)

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

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

答案 23 :(得分:0)

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

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


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