Android aar 依赖项
Android aar dependencies
我是 Gradle 构建系统的新手,我有一个库项目,其中包括 Retrofit、okhttp 等依赖项。
我编译了我的项目并创建了一个 aar 文件。我创建了一个虚拟项目并将我的库 aar 添加为依赖项。
现在,如果我不在我的虚拟应用程序的 build.gradle 文件中添加 Retrofit 和 okhttp 作为依赖项,我的应用程序就会崩溃并显示 class 未找到异常。
我的问题是:由于库 aar 文件已经包含 Retrofit 和 okhttp 作为依赖项,那么为什么我还需要在虚拟应用程序的 build.gradle 文件中显式添加它们?有解决办法吗。
这是我的图书馆build.gradle
apply plugin: 'com.android.library'
buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.+'
}
}
allprojects {
repositories {
jcenter()
}
}
android {
compileSdkVersion 22
buildToolsVersion "21.1.2"
defaultConfig {
minSdkVersion 14
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.+'
compile 'com.android.support:recyclerview-v7:21.+'
compile 'com.android.support:cardview-v7:21.+'
compile 'com.google.android.gms:play-services:6.5.87'
compile 'com.squareup.okhttp:okhttp:2.2.0'
compile 'com.squareup.retrofit:retrofit:1.9.0'
}
我能够通过将 aar 文件添加到本地 maven 存储库来解决这个问题。不知何故,仅在 libs 文件夹中添加 aar 并将其作为依赖项包含在内并不能解决问题。
如果您遇到类似问题,只需修改您的库项目 build.gradle 添加这些内容
apply plugin: 'maven'
version = "1.0"
group = "com.example.lib"
buildscript {
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
classpath 'com.github.dcendents:android-maven-plugin:1.0'
}
}
repositories {
mavenLocal()
}
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://${System.env.HOME}/.m2/repository/")
}
}
}
运行 Android 工作室本身提供的终端中的任务作为 ./gradlew uploadArchives
然后在您的应用程序模块的 build.gradle 文件中,将库添加为依赖项
compile ('com.example.app:ExampleLibrary:1.0@aar') {
transitive = true;
}
我是 Gradle 构建系统的新手,我有一个库项目,其中包括 Retrofit、okhttp 等依赖项。
我编译了我的项目并创建了一个 aar 文件。我创建了一个虚拟项目并将我的库 aar 添加为依赖项。
现在,如果我不在我的虚拟应用程序的 build.gradle 文件中添加 Retrofit 和 okhttp 作为依赖项,我的应用程序就会崩溃并显示 class 未找到异常。
我的问题是:由于库 aar 文件已经包含 Retrofit 和 okhttp 作为依赖项,那么为什么我还需要在虚拟应用程序的 build.gradle 文件中显式添加它们?有解决办法吗。
这是我的图书馆build.gradle
apply plugin: 'com.android.library'
buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.+'
}
}
allprojects {
repositories {
jcenter()
}
}
android {
compileSdkVersion 22
buildToolsVersion "21.1.2"
defaultConfig {
minSdkVersion 14
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.+'
compile 'com.android.support:recyclerview-v7:21.+'
compile 'com.android.support:cardview-v7:21.+'
compile 'com.google.android.gms:play-services:6.5.87'
compile 'com.squareup.okhttp:okhttp:2.2.0'
compile 'com.squareup.retrofit:retrofit:1.9.0'
}
我能够通过将 aar 文件添加到本地 maven 存储库来解决这个问题。不知何故,仅在 libs 文件夹中添加 aar 并将其作为依赖项包含在内并不能解决问题。
如果您遇到类似问题,只需修改您的库项目 build.gradle 添加这些内容
apply plugin: 'maven'
version = "1.0"
group = "com.example.lib"
buildscript {
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
classpath 'com.github.dcendents:android-maven-plugin:1.0'
}
}
repositories {
mavenLocal()
}
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://${System.env.HOME}/.m2/repository/")
}
}
}
运行 Android 工作室本身提供的终端中的任务作为 ./gradlew uploadArchives
然后在您的应用程序模块的 build.gradle 文件中,将库添加为依赖项
compile ('com.example.app:ExampleLibrary:1.0@aar') {
transitive = true;
}