添加本地.aar文件到我的gradle构build
所以我创build了一个Android库,并成功将其编译到.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构build文件:
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
你把你的flatDir
块放在错误的repostories
块中。 buildscript
的repositories
块告诉Gradle在哪里findAndroid-Gradle插件,但不是其他的依赖关系。 你需要有另外一个顶级的repositories
块:
repositories { mavenCentral() flatDir { dirs 'aars' } }
我testing了这一点,它在我的设置上工作正常。
使用最新版本的Android Studio,使用1.3进行testing,使用本地.AAR文件,而不是从maven / jcenter存储库获取的文件,只需进入File> New> New module并selectImport .JAR / .AAR Package 。
你最终会得到的是你的项目中的一个新模块,它包含了非常简单的build.gradle文件,看起来或多或less像这样:
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') } [...]
这些天(在这个问题后超过1年)与Android Studio> 1.0,本地依赖确实工作正常:
- android sdk在默认的本地
$ANDROID_HOME/extras/android/m2repository/
查找依赖:$ANDROID_HOME/extras/android/m2repository/
-
在本地库项目中,您可以将aar发布到此目录。 这是一个可以添加到你的模块的
build.gradle
文件的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
将./gradlew uploadArchives
发布到该目录 - 在要使用库的应用程序项目中,将依赖项添加到您的项目/ app / build.gradle。
compile 'your.package:sdk-name:1.0-SNAPSHOT'
对于本地依赖,下一个gradle构build应该find以前部署的归档, 就是这样!
在我的情况下,我使用上述的本地开发,但也有一个竹连续集成服务器的图书馆,每个构build发布到共享的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存储库下载,我在项目/ build.gradle的“存储库”块中的jcenter()之上添加了内部的Nexus maven仓库
repositories { maven { url "http://internal-nexus.url/path/" } jcenter() }
然后,应用程序依赖关系看起来像compile 'your.package:sdk-name:45'
当我将45版本更新到46时,我的项目将从Nexus服务器获取新的工件。
似乎添加.aar文件作为本地依赖尚不支持(计划在0.5.0testing版中受支持)
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