Android依赖项设置为compileOnly / provided,不支持

时间:2018-04-17 23:07:11

标签: android gradle

我正在使用com.android.tools.build:gradle:3.1.1和最新的Gradle版本(https://services.gradle.org/distributions-snapshots/gradle-4.8-20180417000132+0000-all.zip)。

当我使用compileOnly依赖时,其中一些不会编译,有些会。 E.g。

compileOnly "com.android.support:support-v4:27.1.1"

完美地运作

compileOnly "com.facebook.stetho:stetho:1.5.0"

给出了编译错误:

Android dependency 'com.facebook.stetho:stetho:1.5.0' is set to compileOnly/provided which is not supported

我的印象比任何依赖都可以编译。没有其他表示(https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#new_configurations)。这两个库都具有传递依赖性。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:7)

作为一项实验,我创建了一个新的Android Studio 3.1.1项目。然后,我将lib模块作为普通Java库模块添加到其中。我可以将compileOnly project(":lib")添加到a​​pp模块,然后编译。我将lib模块更改为具有最小清单的Android库模块(apply plugin: 'com.android.library'),现在compileOnly project(":lib")收到您所犯的错误:“Android依赖项目:lib'是设置为compileOnly / provided,不支持“。

由于lib模块中没有其他重大更改,compileOnly限制在Android库模块上。

我的猜测是,目前还不清楚“仅编译”对清单条目,资源,资产等意味着什么。因此,they officially punted

我提交了an issue, requesting documentation of this limitation。我对文件的要求通常被置若罔闻。

答案 1 :(得分:2)

在“动态功能模块”诞生之初,compileOnly Android库模块才有意义,可以在安装时从基础应用程序轻松访问功能模块。

这就是我创建此功能请求的原因:https://issuetracker.google.com/issues/109894265

随意加注并对您的用例进行评论。

答案 2 :(得分:2)

provided/compileOnly

依赖项未打包到APK或AAR中,因此尝试从这些依赖项访问类将导致运行时错误。此范围有两个重要限制:

  1. 依赖项不是可传递的,因此不包含在依赖项中
  2. 依赖项只能是JAR,不能是AAR,这意味着它们不能包含Android资源,资产,清单等。

在此处了解更多-https://www.thedroidsonroids.com/blog/android/android-gradle-configurations

答案 3 :(得分:0)

在一个有很多库的项目中,我遇到了类似的问题。

我有一个libX,我可以在debugImplementation project(':libX')的调试中实现以与源一起使用,但是在发行版中,我的目标是发布的版本releaseImplementation "com.company:libX:1.0.0"

重构之后,在关于我的libX的发布同步期间出现了类似的错误。

  

Android依赖项'com.company:libX:1.0.0'设置为compileOnly / provided,不支持。

但是,我没有使用任何compileOnly ...

问题是由于一个库始终使用libX作为源(implementation project(':libX'))。因此,在发行版中,gradle在将libX实施为某些库的源代码而将其实施为其他库的发布库时感到困惑。