我一直在尝试新的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
提出的语法也更简单答案 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)
答案 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)
我刚刚成功了!
将 mylib-0.1.aar 文件复制到 libs / 文件夹
将这些行添加到 build.gradle 的底部(应该是app,而不是项目):
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
compile 'com.example.lib:mylib:0.1@aar'
}
到目前为止一切顺利。这是最重要的一点:
除非启用了脱机模式,否则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;新模块......
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
,希望这能帮助那些有相同问题的人像我一样:
答案 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 ,如下所示
然后将“ aar” 粘贴到libs文件夹中。
点击android studio左上角的文件,然后点击“用Gradle文件同步项目” ,如下所示。
就是这样。
答案 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
答案 21 :(得分:0)
您可以执行以下操作:
将本地库(扩展名:.jar,.aar,...)放入“ libs”文件夹(如果需要,也可以放入其他文件夹)。
在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')
}