我是Gradle构建系统的新手,我有一个库项目,其中包含Retrofit,okhttp等依赖项.
我编译了我的项目并创建了一个aar文件.我创建了一个虚拟项目,并将我的库添加为依赖项.
现在,如果我不在我的虚拟应用程序的build.gradle文件中添加Retrofit和okhttp作为依赖项,那么我的应用程序会因类未找到异常而崩溃.
我的问题是:由于库aar文件已经包含Retrofit和okhttp作为依赖,那么为什么我还需要在dummy app的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
然后在app模块的build.gradle文件中,将库添加为依赖项
compile ('com.example.app:ExampleLibrary:1.0@aar') { transitive = true; }