如何使用新的Gradle Android构build系统手动包含外部aar包

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

但我的问题是,我想提供依赖作为aar文件包MANUALLY只是如果我会JAR然后我似乎无法弄清楚如何正确地将其包括到我的项目。 我试图使用编译configuration,但这似乎并没有工作。 我一直在编译期间找不到符号,这告诉我,来自aar包的classes.jar没有包含在classpath中。

有没有人知道手动包括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" } 

编辑:所以答案是,它目前不支持,这是如果你想跟踪它的问题。

编辑:目前,因为这仍然不直接支持最好的select似乎是从@RanWakshlakbuild议的解决scheme

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

13 Solutions collect form web for “如何使用新的Gradle Android构build系统手动包含外部aar包”

请按照以下步骤进行操作(我已经testing了Android Studio 2.2)

比方说,你已经在libs文件夹中保存了aar文件。 (假设文件名是cards.aar

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

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

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

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

如果一切顺利,你会看到图书馆的入口是build立 – >爆炸 – 阿尔

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

  1. 右键单击您的项目,然后select“打开模块设置”

打开模块设置

  1. 点击窗口左上angular的“+”button,添加一个新的模块。

添加新模块

  1. select“导入.JAR或.AAR包” ,然后单击“下一步”button。

导入AAR

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

找到AAR文件

  1. 保持应用程序的模块被选中,然后单击“ 依赖关系”窗格以添加新模块作为依赖关系。

依赖关系窗格

  1. 使用依赖关系屏幕的“+”button,然后select“模块依赖关系”

添加模块依赖关系

  1. select模块,然后单击“确定”

选择模块

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

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

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

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

您可以查看Min'an博客文章了解更多信息。

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

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

  • 添加下面的build.gradle你的“应用程序”模块文件夹(而不是你的项目根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

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

你可以做的是build立一个本地的Maven仓库(比听起来简单得多),并从那里引用.aar。

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

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

我刚刚成功!

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

  2. 将这些行添加到build.gradle的底部[应该是应用程序,而不是项目]

     repositories { flatDir { dirs 'libs' } } dependencies { compile 'com.example.lib:mylib:0.1@aar' } 
  3. 到现在为止还挺好。 最重要的一点是:

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

所以你必须确定你已经在Project Structures / Gradle中启用了离线工作checkbox

– 要么 –

configuration代理设置以访问networking。

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

 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> 

希望这个作品..

不幸的是,这里没有解决scheme为我工作(我得到未解决的依赖关系)。 什么最终工作,是最简单的方法恕我直言:突出显示项目名称从Android Studio然后文件 – >新模块 – >导入JAR或AAR包。 信贷转到这个职位的解决scheme

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

添加本地flatDir存储库:

 repositories { flatDir { dirs 'libs' } } 

libs目录中添加每个aarcompile依赖configuration:

 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']) } 

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

也许现在的select是将actionbarsherlock库定义为项目父目录下的Gradle库,并相应地进行引用。

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

在我的情况下,我有一些依赖在我的图书馆,当我从它创build一个aar我失败了,因为错过的依赖,所以我的解决scheme是从我的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

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

只是为了简化答案

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

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

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

更多信息: 处理 – 传递 – 依赖 – 本地 – 工件 – jar和阿尔

我尝试了所有的解决scheme,但没有工作,然后我意识到我犯了一个错误,我把.aar放在错误的文件夹,你可以看到下面,我想我应该放在根文件夹,所以我创build了一个libs文件夹那里1在图片中),但在应用程序文件夹内,已经有一个libs ,你应该放在第二个libs ,希望这有助于那些与我的问题相同的问题:

在这里输入图像描述

  • Android gradle build错误:(9,0)未findGradle DSL方法:'compile()'。
  • 在build.gradle文件中写评论的语法是什么?
  • 基于构buildtypes和风格的Gradle依赖
  • 如何从bootRun传递JVM选项
  • Android Gradle复制在APK META-INF / license.txt中复制的文件
  • 使用Android Gradle插件生成JavaDocs
  • 在Jenkins中不能运行程序“gradle”
  • 在Android Studio中,Gradle错误“Attribute”xxx“已被定义”
  • gradle:如何设置项目名称/组/版本,加上{source,target}兼容性在同一个文件中?
  • Gradle - 包含属性文件
  • 在intellij IDEA中使用gradle构build获取gradle依赖关系