如何手动包括外部aar包使用Gradle为Android

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

但我的问题是,我想手动提供一个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"
}

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

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

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

464761 次浏览

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

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

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

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

http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds < a href = " http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds " > < / >

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

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

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

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


你可以查看敏安博客获取更多信息。

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

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

configurations.create("default")
artifacts.add("default", file('somelib.jar'))
artifacts.add("default", file('someaar.aar'))
< p >更多信息: Handling-transitive-dependencies-for-local-artifacts-jars-and-aar < / p >

请按照下面的步骤让它工作(我测试到Android Studio 2.2)。

假设你在libs文件夹中有一个.aar文件(例如cards.aar)。

然后在应用程序build.gradle中指定以下内容并单击用Gradle文件同步项目

打开项目级别build.gradle并添加flatDir {dirs 'libs'},如下所示:

allprojects {
repositories {
jcenter()


flatDir {
dirs 'libs'
}
}
}

打开应用程序级别build.gradle文件并添加.aar文件:

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

如果一切顺利,你将看到库条目在build ->exploded-aar。

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

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

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

  • 添加下面的构建。Gradle of your &;app"模块文件夹(不是你的项目根build.gradle)。注意编译行中的名称,它是myaar@aar而不是myaar.aar。

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

我刚刚成功了!

  1. 复制mylib-0.1。Aar 文件放入libs/文件夹

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

    repositories {
    flatDir {
    dirs 'libs'
    }
    }
    dependencies {
    compile 'com.example.lib:mylib:0.1@aar'
    }
    
  3. So far so good. Here comes the most important point:

Gradle needs to access the network for dependencies unless offline mode is enabled.

Make sure that you have enabled Offline work via the checkbox in Project Structures/Gradle

-- OR --

Configure the proxy settings in order to access the network.

To configure the proxy settings you have to modify the project's gradle.properties file, configuring http and https separately as below:

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>

希望这有用。

不幸的是,这里的解决方案都不适合我(我无法解决依赖关系)。最后工作,是最简单的方法IMHO是:突出项目名称从Android工作室然后文件->新模块->导入JAR或AAR包。功劳归于这篇文章中的解决方案

你可以用几行代码添加多个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'])
}
  1. 右键单击项目并选择“开放模块设置”;

Open module settings

  1. 单击窗口左上角的“+”;按钮来添加一个新模块。

添加新模块

  1. 选择“导入。jar或。aar包”;并单击“Next"按钮。

Import AAR

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

Find AAR file

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

Dependencies pane

  1. 使用依赖项屏幕的“+”;按钮并选择“模块dependency"

添加模块依赖项

  1. 选择模块并单击“OK"

Choose module .

编辑:截图6中的模块依赖关系已在Android Studio 4.1中删除。作为一种替代方法,将模块依赖项添加到build.gradle. c。

dependencies {
implementation project(':your_module')
}

编辑:在Android Studio 4.2中,用户界面和工作流程有了很大的改变。添加依赖项的过程现在在官方文档中有很好的解释:使用项目结构对话框添加依赖项

在我的例子中,我的库中有一些依赖项,当我从它创建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
...
}

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

enter image description here

为了简化答案

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

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

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

单击“File > New > New Module”。 单击“导入。jar /”。AAR包然后单击下一步。 输入已编译的AAR或JAR文件的位置,然后单击Finish

请参考上面的链接了解下一步操作。

有两种方法:

第一种方法

  1. 打开Android Studio,通过File -> New -> New Module导航到Create New Module窗口

enter image description here

  1. 选择Import .JAR/.AAR Package项并单击Next按钮

  2. build.gradle文件中添加一个属于你的app模块的依赖项。

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

这是所有。

第二种方法

  1. libs目录下创建一个文件夹,例如aars

  2. 把你的aar lib放到aars文件夹中。

  3. 添加代码片段

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

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

  1. build.gradle文件中添加一个属于你的app模块的依赖项。
dependencies {
...
implementation (name:'your aar lib name', ext:'aar')
}

这是所有。

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

之前(默认)

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

在我的情况下,只是工作时,我添加“项目”编译:

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




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

你可以这样做:

  1. 将您的本地库(扩展名:.jar, .aar,…)放入“libs”文件夹(如果您愿意,也可以使用其他文件夹)。

  2. 在构建< p >。Gradle(应用级别),将这一行添加到依赖项中

    实现文件树(包括:['*.jar', '*.jar', '*.jar'。Aar '], dir: 'libs') < / p >

在Android Studio 3.4和Gradle 5中,你可以简单地这样做

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

更新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. 现在在app模块中,单击+模块依赖关系

enter image description here

  1. 检查库包和好吧

enter image description here

  1. 验证添加的依赖项

enter image description here

  1. 项目结构是这样的

enter image description here

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

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

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

例如:libs/someAndroidArchive.aar

在依赖块的build.gradle.kts模块中写完这些代码后:

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

只有一次设置&可以添加未来的库而不需要任何代码更改吗


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

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

将项目结构从Android改为Project。

导航到应用程序→填词,如下所示

enter image description here

然后在libs文件夹中粘贴“aar"

点击android studio左上角的文件,并如下所示点击同步项目与Gradle文件;

enter image description here

就是这样。

还有一种方法。

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

第一步:解压.aar文件(你可以通过重命名它的扩展名从"以“.zip")

步骤2:你很可能会在提取后在文件夹中找到.jar文件。复制这个.jar文件并将其粘贴到module/libs文件夹中

第三步:就是这样,现在同步项目,你应该能够从那个.jar中访问所有的类/方法/属性。你不需要在任何gradle文件中提到它的路径/名称/存在,这是因为gradle构建系统在构建项目时总是寻找存在于libs文件夹中的文件

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

< p >步骤1。开放项目结构
enter image description here < / p > < p >步骤2。开放项目结构
enter image description here < / p > < p >步骤3。输入文件路径
enter image description here < / p >

完成了!

我只是简单地加上这几行:-

build.gradle

buildscript {
repositories {
flatDir {
dirs 'libs'
}
}
}

而且

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

之后点击file-> Sync Project with Gradle files

注意:——most important don't forget to import .aar file in libs folder