如何使用新的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提出的语法
请按照以下步骤进行操作(我已经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中包含这些文件。
- 右键单击您的项目,然后select“打开模块设置” 。
- 点击窗口左上angular的“+”button,添加一个新的模块。
- select“导入.JAR或.AAR包” ,然后单击“下一步”button。
- 使用“文件名”字段旁边的省略号button“…”查找AAR文件。
- 保持应用程序的模块被选中,然后单击“ 依赖关系”窗格以添加新模块作为依赖关系。
- 使用依赖关系屏幕的“+”button,然后select“模块依赖关系” 。
- 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
我刚刚成功!
-
复制libs /文件夹下的mylib-0.1.aar文件
-
将这些行添加到build.gradle的底部[应该是应用程序,而不是项目]
repositories { flatDir { dirs 'libs' } } dependencies { compile 'com.example.lib:mylib:0.1@aar' }
-
到现在为止还挺好。 最重要的一点是:
除非启用脱机模式,否则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
目录中添加每个aar
来compile
依赖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'com 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 SQLite数据库?
- Android:窗口标题中的进度条不显示
- 如何使用设备默认主题的应用程序?
- 如何使用Eclipse逐行debuggingAndroid应用程序?
- ScrollView里面的Android WebView只滚动scrollview
- Android当ViewPager插入为Child时出错android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5035)
- 滚动RecyclerView在上方显示选定的项目
- Android棒棒糖上的海拔不起作用
- ANDROID:电子邮件客户端收件人电子邮件ID空androidparsing