我一直在尝试新的 android 构建系统,但遇到了一个小问题。我已经编译了我自己的 ActionBarSherlock 的 aar 包,我称之为“actionbarsherlock.aar”。我想要做的是实际上使用这个 aar 来构建我的最终 APK。如果我使用编译项目(':actionbarsherlock')将整个 ActionBarSherlock 库作为 android-library 模块包含到我的主项目中,我就可以成功构建而不会出现任何问题。
但是我的问题是,我想手动提供该依赖项作为 aar 文件包,就像我想要一个 JAR 一样,那么我似乎无法弄清楚如何将它正确地包含到我的项目中。我尝试使用编译配置,但这似乎不起作用。我在编译过程中一直找不到符号,这告诉我 aar 包中的 classes.jar 没有包含在类路径中。
有谁知道手动将 aar 包作为文件包含的语法?
构建.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 提出的语法也更简单
请按照以下步骤使其正常工作(我已将其测试到 Android Studio 2.2)
假设您将 aar 文件保存在 libs 文件夹中。 (假设文件名是 cards.aar
)
然后在应用程序 build.gradle
中指定以下内容并单击与 Gradle 文件同步项目。打开项目级别 build.gradle 并添加 flatDir{dirs 'libs'}
,如下所示
allprojects {
repositories {
jcenter()
flatDir {
dirs 'libs'
}
}
}
现在打开应用级 build.grdle 文件并添加 .aar
文件
dependencies {
implementation(name:'cards', ext:'aar')
}
如果一切顺利,您将看到在 build -> exploded-aar 中创建了库条目
另请注意,如果您从另一个具有依赖项的项目中导入 .aar 文件,您也需要在 build.gradle 中包含这些文件。
右键单击您的项目并选择“打开模块设置”。
https://i.stack.imgur.com/bu5D2.png
单击窗口左上角的“+”按钮以添加新模块。
https://i.stack.imgur.com/oEH90.png
选择“导入 .JAR 或 .AAR 包”并单击“下一步”按钮。
https://i.stack.imgur.com/Cmj8E.png
使用“文件名”字段旁边的省略号按钮“...”查找 AAR 文件。
https://i.stack.imgur.com/DOoXM.png
保持选中应用程序的模块,然后单击“依赖项”窗格以将新模块添加为依赖项。
https://i.stack.imgur.com/OjTOp.png
使用依赖项屏幕的“+”按钮并选择“模块依赖项”。
https://i.stack.imgur.com/AO0eg.png
选择模块并单击“确定”。
https://i.stack.imgur.com/26yRA.png
编辑:屏幕截图 6 中的模块依赖项已在 Android Studio 4.1 中删除。作为替代方案,将模块依赖项添加到 build.gradle。
dependencies {
implementation project(':your_module')
}
编辑:Android Studio 4.2 中的用户界面和工作流程发生了很大变化。现在在官方文档中很好地解释了添加依赖项的过程:Adding dependencies with the Project Structure Dialog
Alt+B
>清理并重建项目。 Android Studio 为什么你很痛苦!我希望将 NetBeans IDE 作为 Android 开发者平台
aar
库添加到您的项目时,创建一个新模块并不是最好的主意
Module Dependency
选项已从最新 Android Studio (V4.1) 的弹出菜单中删除
您可以从存储库引用 aar 文件。 maven 是一个选项,但有一个更简单的解决方案:将 aar 文件放在您的 libs 目录中并添加一个目录存储库。
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
然后在依赖部分引用库:
dependencies {
implementation 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
}
您可以查看 Min'an blog post 了解更多信息。
implementation
等。这是复制粘贴解决方案。由于 Android Build Gradle Plugin 4.0.0 现在会引发错误而不是忽略损坏的 .aar 路径,因此收到了很多新的支持
之前(默认)
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')
implementation fileTree(include: ['*.?ar'], dir: 'libs')
以下方法适用于 Android Studio v0.8.x:
将 aar 文件保存在 app 模块的 libs 文件夹下(例如:
将以下内容添加到您的“app”模块文件夹的 build.gradle(不是您的项目根 build.gradle)。注意编译行中的名称,它是 myaar@aar 而不是 myaar.aar。依赖项 { 编译 'package.name.of.your.aar:myaar@aar' } 存储库{ flatDir{ dirs 'libs' } }
单击工具 -> Android -> 将项目与 Gradle 文件同步
使用 Android Studio 3.4 和 Gradle 5,您可以像这样简单地做到这一点
dependencies {
implementation files('libs/actionbarsherlock.aar')
}
在应用级 build.gradle 中添加以下行
implementation fileTree(dir: "libs", include: ["*.aar"])
将项目结构从 Android 更改为 Project。
导航到 app-> libs,如下所示
https://i.stack.imgur.com/ofBSB.png
然后将“aar”粘贴到 libs 文件夹中。
单击 android studio 左上角的 File,然后单击“Sync Project with Gradle Files”,如下所示。
https://i.stack.imgur.com/o1XeX.png
而已。
目前不支持引用本地 .aar 文件(由 Xavier Ducrochet 确认)
您可以做的是建立一个本地 Maven 存储库(比听起来简单得多)并从那里引用 .aar。
我写了一篇博文,详细说明了如何让它在这里工作:
http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds
我刚刚成功了!
将 mylib-0.1.aar 文件复制到 libs/ 文件夹中 将这些行添加到 build.gradle 的底部(应该是应用程序,而不是项目): 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>
希望这有效。
有2种方式:
第一种方式
打开您的 Android Studio 并通过 File -> New -> New Module 导航到 Create New Module 窗口
https://i.stack.imgur.com/7xWVm.jpg
选择 Import .JAR/.AAR Package 项并单击 Next 按钮 在属于您的应用程序模块的 build.gradle 文件中添加依赖项。
dependencies {
...
implementation project(path: ':your aar lib name')
}
就这样。
第二种方式
在 libs 目录下创建一个文件夹,例如 aars。将您的 aar 库放入 aars 文件夹。添加代码片段
repositories {
flatDir {
dirs 'libs/aars'
}
}
进入您的 build.gradle
文件属于应用程序模块。
在属于您的应用模块的 build.gradle 文件中添加依赖项。
dependencies {
...
implementation (name:'your aar lib name', ext:'aar')
}
就这样。
如果你会读中文,你可以查看博客什么是AAR文件以及如何在Android开发中使用
您只需几行代码即可添加多个 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'])
}
libs
文件夹。
不幸的是,这里没有一个解决方案对我有用(我得到未解决的依赖项)。最终奏效的方法,恕我直言,最简单的方法是:从 Android Studio 中突出显示项目名称,然后是 File ->新模块 ->导入 JAR 或 AAR 包。归功于 this post 中的解决方案
如果你使用 Gradle Kotlin DSL,你需要在你的模块目录中添加一个文件。
例如:libs/someAndroidArchive.aar
只需在依赖块中的模块 build.gradle.kts 中写入以下内容:
implementation(files("libs/someAndroidArchive.aar"))
更新安卓工作室 3.4
转到文件-> 项目结构
https://i.stack.imgur.com/tGcEY.jpg
模块,然后单击 +
https://i.stack.imgur.com/AA7mw.png
选择导入 .aar 包
https://i.stack.imgur.com/jdEce.png
查找 .aar 路由
https://i.stack.imgur.com/aU4if.png
完成并应用,然后验证是否添加了包
https://i.stack.imgur.com/JHbDa.png
现在在应用程序模块中,单击 + 和 Module Dependency
https://i.stack.imgur.com/NVACg.png
检查库包并确定
https://i.stack.imgur.com/3gJRh.png
验证添加的依赖项
https://i.stack.imgur.com/06fQW.png
像这样的项目结构
https://i.stack.imgur.com/ZJeEz.png
使用 Android Studio Arctic Fox 手动导入 AAR 文件
https://i.stack.imgur.com/zruFE.png
https://i.stack.imgur.com/tzvjt.png
https://i.stack.imgur.com/NwUj9.png
完毕!
我也遇到过这个问题。此问题报告: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
时,由于缺少依赖项而失败,因此我的解决方案是使用 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
...
}
https://developer.android.com/studio/projects/android-library.html#AddDependency 中给出了在应用程序中导入 AAR 文件的标准方法
单击文件 > 新建 > 新模块。单击导入 .JAR/.AAR 包,然后单击下一步。输入已编译的 AAR 或 JAR 文件的位置,然后单击 Finish。
请参阅上面的链接以了解后续步骤。
我在 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')
在 android/app/build.gradle 中,configurations.maybeCreate("default")
在 android/mobile/build.gradle 中,include ':mobile'
在 android/settings.gradle
我在这里尝试了所有解决方案,但没有一个有效,然后我意识到我犯了一个错误,我把 .aar
放在了错误的文件夹中,如下所示,我认为我应该放在根文件夹中,所以我创建了一个 libs
文件夹在那里(图片中的1),但在app文件夹内,已经有一个libs
,你应该放入第二个libs
,希望这对那些和我有同样问题的人有帮助:
https://i.stack.imgur.com/EmYPR.png
还有另外一种方法可以做到这一点。
通常 .aar 文件不应该像我们使用 .jar 那样直接使用,因此可以避免上面提到的在 libs 文件夹中提到它并在 gradle 中声明的解决方案。
第 1 步:解压缩 .aar 文件(您可以通过将其扩展名从“.aar”重命名为“.zip”来完成此操作)
第 2 步:您很可能会在解压后的文件夹中找到 .jar 文件。复制此 .jar 文件并将其粘贴到您的模块/libs 文件夹中
第 3 步:就是这样,现在同步您的项目,您应该能够从该 .jar 访问所有类/方法/属性。您无需在任何 gradle 文件中提及它的路径/名称/存在,这是因为 gradle 构建系统在构建项目时始终查找 libs 文件夹中存在的文件
只是为了简化答案
如果本地存在 .aar 文件,则在项目的 build.gradle 的依赖项中包含
compile project(':project_directory')
。
如果远程存在 .aar 文件,则在项目的 build.gradle 的依赖项中包含 compile 'com.*********.sdk:project_directory:0.0.1@aar'
。
你可以这样做:
将您的本地库(扩展名为:.jar、.aar、...)放入“libs”文件夹(或其他如果需要)。在 build.gradle(应用程序级别)中,将此行添加到依赖项实现 fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
对我来说,这是一个关于如何配置 Android Studio 环境的问题。
当我更新 File
-> Project Structure
-> JDK Location
到更高的 Java 版本(jdk1.8.0_192.jdk
- 对我来说),一切都开始工作了。
在我的情况下,当我添加“项目”进行编译时工作:
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
dependencies {
compile project('com.x.x:x:1.0.0')
}
compile
依赖项添加两个依赖项debugCompile(name:'cards-debug', ext:'aar')
和releaseCompile(name:'cards-release', ext:'aar')
allprojects {...}
的第一个块进入“项目”级 gradle 文件,带有dependencies {...}
的第二部分应该进入“应用”级 gradle 文件。