我正在使用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)。这两个库都具有传递依赖性。
非常感谢任何帮助。
答案 0 :(得分:7)
作为一项实验,我创建了一个新的Android Studio 3.1.1项目。然后,我将lib
模块作为普通Java库模块添加到其中。我可以将compileOnly project(":lib")
添加到app模块,然后编译。我将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中,因此尝试从这些依赖项访问类将导致运行时错误。此范围有两个重要限制:
在此处了解更多-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
实施为某些库的源代码而将其实施为其他库的发布库时感到困惑。