提问人:Miguel 提问时间:5/22/2013 最后编辑:MahozadMiguel 更新时间:1/24/2023 访问量:507440
如何使用适用于 Android 的 Gradle 手动包含外部 aar 包
How to manually include external aar package using Gradle for Android
问:
我一直在尝试新的android构建系统,但遇到了一个小问题。我编译了我自己的 ActionBarSherlock 包,我称之为“actionbarsherlock.aar”。我想做的是实际上使用这个 aar 来构建我的最终 APK。如果我使用编译项目 (':actionbarsherlock') 将整个 ActionBarSherlock 库作为 android 库模块包含在我的主项目中,我能够成功构建而不会出现任何问题。
但我的问题是我想手动将该依赖项作为 aar 文件包提供,就像我会 JAR 一样,那么我似乎无法弄清楚如何正确地将其包含在我的项目中。我尝试使用编译配置,但这似乎不起作用。我在编译过程中不断得到找不到符号,它告诉我 aar 包中的类 .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建议的语法也更简单
答:
我也遇到过这个问题。本期报告: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
评论
您可以从存储库中引用 aar 文件。 maven 是一种选择,但有一个更简单的解决方案:将 aar 文件放在 libs 目录中并添加一个目录存储库。
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
然后在依赖项部分中引用该库:
dependencies {
implementation 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
}
您可以查看 Min'an 博客文章以获取更多信息。
评论
implementation
我在 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'))
详细信息:Handling-transitive-dependencies-for-local-artifacts-jars-and-aar
评论
compile project(':mobile')
configurations.maybeCreate("default")
include ':mobile'
请按照以下步骤操作(我在 Android Studio 2.2 上对其进行了测试)。
假设您在文件夹中有一个文件(例如)。.aar
libs
cards.aar
然后在应用中指定以下内容,然后单击 Sync Project with Gradle files。build.gradle
打开项目级别并添加如下内容:build.gradle
flatDir {dirs("libs")}
allprojects {
repositories {
jcenter()
flatDir {
dirs("libs")
}
}
}
打开应用级文件并添加文件:build.gradle
.aar
dependencies {
implementation(name:'cards', ext:'aar')
}
如果您使用的是 Kotlin 并且有一个文件:build.gradle.kts
dependencies {
implementation(name = "cards", ext = "aar")
}
如果一切顺利,您将看到库条目是以 -> exploded-aar 格式创建的。build
另请注意,如果要从另一个具有依赖项的项目导入文件,则也需要将这些依赖项包含在 中。.aar
build.gradle
评论
compile
debugCompile(name:'cards-debug', ext:'aar')
releaseCompile(name:'cards-release', ext:'aar')
allprojects {...}
dependencies {...}
以下方法适用于 Android Studio v0.8.x:
将文件保存在应用程序模块的文件夹下(例如:
aar
libs
<project>/<app>/libs/myaar.aar
)将以下内容添加到“app”模块文件夹的 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
评论
我刚刚成功了!
将 mylib-0.1.aar 文件复制到 libs/ 文件夹中
将这些行添加到 build.gradle 的底部(应该是 app,而不是 project):
repositories { flatDir { dirs 'libs' } } dependencies { compile 'com.example.lib:mylib:0.1@aar' }
目前为止,一切都好。这是最重要的一点:
除非启用离线模式,否则 Gradle 需要访问依赖项的网络。
确保您已通过 Project Structures/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>
希望这能奏效。
评论
不幸的是,这里没有一个解决方案对我有用(我得到了未解决的依赖关系)。恕我直言,最终起作用的最简单方法是:突出显示 Android Studio 中的项目名称,然后突出显示 File -> New Module -> Import JAR 或 AAR Package。这要归功于这篇文章中的解决方案
评论
只需几行代码即可添加多个依赖项。aar
添加本地存储库:flatDir
repositories {
flatDir {
dirs 'libs'
}
}
将 every in 目录添加到依赖项配置: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'])
}
评论
libs
- 右键单击您的项目,然后选择“打开模块设置”。
- 单击窗口左上角的“+”按钮以添加新模块。
- 选择“导入 .JAR 或 .AAR 包“,然后单击”下一步“按钮。
- 使用“文件名”字段旁边的省略号按钮“...”查找 AAR 文件。
- 保持应用的模块处于选中状态,然后单击“依赖项”窗格以将新模块添加为依赖项。
- 使用依赖项屏幕的“+”按钮,然后选择“模块依赖项”。
- 选择模块并单击“确定”。
编辑:屏幕截图 6 中的模块依赖项已在 Android Studio 4.1 中删除。作为替代方案,将模块依赖项添加到 build.gradle。
dependencies {
implementation project(':your_module')
}
编辑:Android Studio 4.2 中的用户界面和工作流程发生了很大变化。现在,在官方文档中很好地解释了添加依赖项的过程:使用“项目结构”对话框添加依赖项
评论
Alt+B
aar
Module Dependency
选项已从最新 Android Studio (V4.1) 的弹出菜单中删除
就我而言,我的库中有一些缺点,当我从中创建一个时,由于遗漏了缺点,我失败了,所以我的解决方案是将我的库中的所有缺点与文件一起添加。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
...
}
我在这里尝试了所有解决方案,但没有一个有效,然后我意识到我犯了一个错误,我把文件夹放在了错误的文件夹中,正如你在下面看到的,我认为我应该放在根文件夹中,所以我在那里创建了一个文件夹(图片中 1),但在应用程序文件夹中,已经有一个,你应该放第二个, 希望这能帮助那些和我有同样问题的人:.aar
libs
libs
libs
评论
只是为了简化答案
如果 .aar 文件在本地存在,则包含在
项目的 build.gradle 依赖项中。compile project(':project_directory')
如果远程存在 .aar 文件,则包含在项目的 build.gradle 依赖项中。compile 'com.*********.sdk:project_directory:0.0.1@aar'
在应用程序中导入 AAR 文件的标准方法在 https://developer.android.com/studio/projects/android-library.html#AddDependency 中给出
单击“文件”>“新建”>“新建模块”。 单击 导入 。罐/。AAR 包,然后单击下一步。 输入已编译的 AAR 或 JAR 文件的位置,然后单击 Finish。
有关后续步骤,请参阅上面的链接。
评论
有 2 种方法:
第一种方式
- 打开您的 Android Studio,然后通过以下方式导航到窗口
Create New Module
File -> New -> New Module
选择项目,然后单击按钮
Import .JAR/.AAR Package
Next
在属于模块的文件中添加依赖项。
build.gradle
app
dependencies {
...
implementation project(path: ':your aar lib name')
}
就这样。
第二种方式
在目录中创建一个文件夹,例如 .
libs
aars
将 aar 库放入 aars 文件夹。
添加代码片段
repositories {
flatDir {
dirs 'libs/aars'
}
}
放入您的文件属于 app 模块。build.gradle
- 在属于模块的文件中添加依赖项。
build.gradle
app
dependencies {
...
implementation (name:'your aar lib name', ext:'aar')
}
就这样。
如果你能看懂中文,可以查看博客 什么是AAR文件以及如何在Android开发中使用
评论
before(默认)
implementation fileTree(include: ['*.jar'], dir: 'libs')
只需添加数组即可。'*.aar'
include
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')
评论
implementation fileTree(include: ['*.?ar'], dir: 'libs')
就我而言,当我添加“项目”进行编译时就可以工作了:
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
dependencies {
compile project('com.x.x:x:1.0.0')
}
你可以做这样的事情:
将本地库(扩展名为:.jar,.aar等)放入“libs”文件夹(或另一个文件夹,如果需要)。
在 build.gradle(应用级别)中,将此行添加到依赖项中
实现文件树(包括: ['*.jar', '*.aar'], dir: 'libs')
使用 Android Studio 3.4 和 Gradle 5,您可以简单地做到这一点
dependencies {
implementation files('libs/actionbarsherlock.aar')
}
评论
更新 ANDROID STUDIO 3.4
- 转到文件 -> 项目结构
- 模块,然后单击+
- 选择导入 .aar 包
- 查找 .aar 路由
- 完成并应用,然后验证是否添加了包
- 现在在应用程序模块中,单击 + 和模块依赖项
- 检查库包并确定
- 验证添加的依赖项
- 而像这样的项目结构
评论
对我来说,这是Android Studio环境配置方式的问题。
当我将 -> -> 更新到更高的 Java 版本(对我来说是 - )时,一切开始工作。File
Project Structure
JDK Location
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。
导航到 app->libs,如下所示
然后将“aar”粘贴到 libs 文件夹中。
单击android studio左上角的“文件”,然后单击“将项目与Gradle Files同步”,如下所示。
就是这样。
评论
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.aar"))))
对于 KTS 文件
还有 1 种方法可以做到这一点。
通常,.aar文件不应该像我们使用.jar那样直接使用,因此可以避免上面提到的在libs文件夹中提及它并在gradle中声明的解决方案。
第 1 步:解压缩 .aar 文件(您可以通过将其扩展名从“.aar”重命名为“.zip”来执行此操作)
步 2: 解压后,您很可能会在文件夹中找到 .jar 文件。复制此 .jar 文件并将其粘贴到模块/libs 文件夹中
步骤3:就是这样,现在同步您的项目,您应该能够从该 .jar 访问所有类/方法/属性。您无需在任何 gradle 文件中提及它的路径/名称/存在,这是因为 gradle 构建系统在构建项目时始终会查找 libs 文件夹中存在的文件
使用 Android Studio Arctic Fox 手动导入 AAR 文件
做!
我只是简单地添加这些行:-
在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
评论