所以我创建了一个Android-Library并成功将其编译成.aar文件我称之为aar文件: "projectx-sdk-1.0.0.aar"
现在我希望我的新项目依赖于这个aar所以我所做的就是关注这篇文章:http://life.nimbco.us/referencing-local-aar-files-with-android-studios-new-gradle-based-build-system/
但由于我没有得到预期的结果,这篇文章让我感到困惑:
aar的包名是: com.projectx.photosdk
,里面的模块叫 sdk
这是我目前的项目结构:
|-SuperAwesomeApp
|--.idea
|--gradle
|--App
|---aars
|----projectx-sdk-1.0.0.aar
|---build
|---jars
|---src
|---build.gradle
他是我的gradle构建文件:
apply plugin: 'android'
buildscript {
repositories {
mavenCentral()
flatDir {
dirs 'aars'
}
}
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
defaultConfig {
minSdkVersion 11
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.android.support:gridlayout-v7:19.0.1'
compile 'com.android.support:support-v4:19.0.1'
compile 'com.android.support:appcompat-v7:19.0.1'
compile 'com.projectx.photosdk:sdk:1.0.0@aar'
// compile files( 'aars/sdk-1.0.0.aar' ) // Does not work either
}
// EDIT
我得到的错误:
Failed to refresh Gradle project 'SuperAwesomeApp'
Could not find com.projectx.photosdk:sdk:1.0.0.
Required by:
SuperAwesomeApp:App:unspecified
6 回答
您将
flatDir
块放在错误的repostories
块中 .buildscript
中的repositories
块告诉Gradle在哪里可以找到Android-Gradle插件,而不是其他依赖项 . 你需要有另一个顶级repositories
块,如下所示:我测试了这个,它在我的设置上运行正常 .
最新版本的Android Studio(使用1.3测试)使用本地.AAR文件,而不是从maven / jcenter存储库获取的文件,只需转到 File > New > New module 并选择 Import .JAR/.AAR Package .
你最终得到的是你的项目中的一个新模块,它包含非常简单的 build.gradle 文件,看起来或多或少是这样的:
当然,其他项目必须使用常规的 compile project 指令引用这个新模块 . 所以在一个使用这个简单的新模块的项目中,一个本地.aar文件就有了这个 build.gradle
在带有gradle 3.0.1的Android Studio 3.1.3中 .
只需添加
implementation fileTree(dir: 'libs', include: ['*.aar'])
或implementation files('libs/app-release.aar')
,无需任何其他flatdir
.这些天(在这个问题之后超过1年)Android Studio> 1.0,本地依赖确实正常工作:
android sdk在默认本地仓库中查找依赖项:
$ANDROID_HOME/extras/android/m2repository/
在本地库项目中,您可以将aar发布到此目录 . 这里's a snippet that can be added to your module' s
build.gradle
文件(例如:sdk / build.gradle)一些参考gradle文档http://gradle.org/docs/current/userguide/artifact_management.html
在库项目中,运行
./gradlew uploadArchives
将aar发布到该目录在要使用库的应用程序项目中,将依赖项添加到项目/ app / build.gradle .
compile 'your.package:sdk-name:1.0-SNAPSHOT'
对于本地依赖,下一个gradle构建应该找到以前部署的存档,就是这样!
在我的例子中,我使用上面的本地开发,但也有一个用于库的Bamboo持续集成服务器,它将每个构建发布到共享的Nexus工件库 . 然后,部署工件的完整库代码变为:
为了告诉应用程序从我的内部Nexus存储库下载,我在项目/ build.gradle中的两个“存储库”块中的jcenter()上方添加了内部Nexus maven存储库
然后应用程序依赖性看起来像
compile 'your.package:sdk-name:45'
当我将45版本更新到46时,我的项目将从Nexus服务器获取新工件 .使用最新的Gradle版本,现在有一个稍微更新的方式来做Stan的建议(见maving publishing)
似乎添加了.aar文件,因为尚不支持本地依赖(计划在0.5.0 Beta中支持)
https://code.google.com/p/android/issues/detail?id=55863
但是,只有当您的库位于中央maven存储库或本地maven存储库中时,您在依赖项中使用库的方式才有效 .
有关如何使用本地maven存储库在模块依赖关系中使用.aar,请参阅此内容 .
http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds