所以我创建了一个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
}
//编辑
我得到的错误:
Failed to refresh Gradle project 'SuperAwesomeApp'
Could not find com.projectx.photosdk:sdk:1.0.0.
Required by:
SuperAwesomeApp:App:unspecified
答案 0 :(得分:69)
您将flatDir
块放在错误的repostories
块中。 repositories
内的buildscript
块告诉Gradle在哪里可以找到Android-Gradle插件,而不是其他依赖项。您需要拥有另一个顶级repositories
块,如下所示:
repositories {
mavenCentral()
flatDir {
dirs 'aars'
}
}
我对此进行了测试,它在我的设置上运行正常。
答案 1 :(得分:41)
使用1.3测试的Android Studio的最新版本使用本地.AAR文件而不是从maven / jcenter存储库获取的文件,只需转到文件>新>新模块并选择导入.JAR / .AAR包。
您最终会得到的是项目中的一个新模块,其中包含非常简单的 build.gradle 文件,该文件看起来或多或少是这样的:
configurations.create("default")
artifacts.add("default", file('this-is-yours-package-in-aar-format.aar'))
当然,其他项目必须使用常规的编译项目指令来引用这个新模块。因此,在使用这个简单的新模块的项目中,本地.aar文件中包含了 build.gradle
[...]
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
ompile 'com.android.support:appcompat-v7:23.1.0'
compile 'com.android.support:design:23.1.0'
[...]
compile project(':name-of-module-created-via-new-module-option-described-above')
}
[...]
答案 2 :(得分:11)
在带有gradle 3.0.1的Android Studio 3.1.3中
只需添加implementation fileTree(dir: 'libs', include: ['*.aar'])
或implementation files('libs/app-release.aar')
,而不添加任何其他flatdir
即可。
答案 3 :(得分:5)
这些天(在此问题之后超过1年),使用Android Studio> 1.0,本地依赖项可以正常运行:
$ANDROID_HOME/extras/android/m2repository/
在本地库项目中,您可以将aar发布到此目录。这是一个可以添加到模块build.gradle
文件的代码段(例如:sdk / build.gradle)
apply plugin: 'maven'
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://localhost" + System.getenv("ANDROID_HOME")
+ "/extras/android/m2repository/")
pom.version = '1.0-SNAPSHOT'
pom.groupId = 'your.package'
pom.artifactId = 'sdk-name'
}
}
}
./gradlew uploadArchives
将aar发布到该目录compile 'your.package:sdk-name:1.0-SNAPSHOT'
对于本地依赖项,下一个gradle构建应该找到以前部署的存档和它的那个!
在我的例子中,我使用上面的本地开发,但也有一个用于库的Bamboo持续集成服务器,它将每个构建发布到共享的Nexus工件库。然后,用于部署工件的完整库代码变为:
uploadArchives {
repositories {
mavenDeployer {
if (System.getenv("BAMBOO_BUILDNUMBER") != null) {
// Deploy to shared repository
repository(url: "http://internal-nexus.url/path/") {
authentication(userName: "user", password: "****")
}
pom.version = System.getenv("BAMBOO_BUILDNUMBER")
} else {
// Deploy to local Android sdk m2repository
repository(url: "file://localhost" + System.getenv("ANDROID_HOME")
+ "/extras/android/m2repository/")
pom.version = '1.0-SNAPSHOT'
}
pom.groupId = 'your.package'
pom.artifactId = 'sdk-name'
}
}
}
为了告诉应用程序从我的内部Nexus存储库下载,我在两个"存储库"中添加了jcenter()上方的内部Nexus maven存储库。 project / build.gradle中的块
repositories {
maven {
url "http://internal-nexus.url/path/"
}
jcenter()
}
然后应用程序依赖关系看起来像compile 'your.package:sdk-name:45'
当我将45版本更新为46时,我的项目将从Nexus服务器获取新工件。
答案 4 :(得分:1)
使用最新的Gradle版本,现在可以稍微更新一下Stan的建议(参见maving publishing)
apply plugin: 'maven-publish'
publishing {
publications {
aar(MavenPublication) {
groupId 'org.your-group-id'
artifactId 'your-artifact-id'
version 'x.x.x'
// Tell maven to prepare the generated "*.aar" file for publishing
artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
}
}
repositories {
maven {
url("file:" + System.getenv("HOME") + "/.m2/repository")
}
}
}
答案 5 :(得分:0)
似乎添加了.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