【问题标题】:Android dependency is set to compileOnly/provided which is not supportedAndroid 依赖项设置为 compileOnly/provided 不受支持
【发布时间】:2018-04-17 23:07:11
【问题描述】:

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

当我使用 compileOnly 依赖项时,其中一些不会编译,有些会。 例如

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)。这两个库都有传递依赖。

任何帮助将不胜感激。

【问题讨论】:

  • 为什么要使用compileOnly?这就是说“针对库进行编译,但不要将内容包含在 APK 中”。
  • 这只是一个例子。实际上,我会将 releaseCompileOnly 用于 Stetho 库。我希望示例尽可能简单。
  • 另一个示例(真实示例)是:productionCompileOnly 'com.bugsee:bugsee-android:1.11.9' 生产环境是我用于生产构建的风格
  • 使用 Gradle 4.4,我从您的问题中得到与 compileOnly "com.android.support:support-v4:27.1.1" 相同的错误。鉴于错误消息,可能限制在 AAR 上。我已经成功地将 compileOnly 与 AutoValue 一起使用,但那是一个 JAR,因为那是一个纯 Java 库。
  • 好吧,我的 AAR 想法只是一个理论。 This answer 反映了我的想法。至于为什么没有记录这种限制... 很多 Android 中的东西没有记录。

标签: android gradle


【解决方案1】:

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

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

我的猜测是不清楚“仅编译”对于清单条目、资源、资产等意味着什么。所以,they officially punted

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

【讨论】:

    【解决方案2】:

    在“动态功能模块”的曙光中,compileOnly Android 库模块可能是有意义的,以便在安装时从基础应用轻松访问功能模块。

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

    请随意给它加注星标并用您的用例发表评论。

    【讨论】:

      【解决方案3】:

      我在一个包含许多库的项目中遇到了类似的问题。

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

      重构后,我在发布同步时遇到了类似的错误,关于我的 libX。

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

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

      问题是由于一个 lib 始终使用 libX 作为源 (implementation project(':libX'))。所以在发布时,gradle 很困惑,因为它在某些库中将 libX 实现为源,而在其他库中实现为已发布的库。

      【讨论】:

        猜你喜欢
        • 2020-12-01
        • 2015-01-13
        • 1970-01-01
        • 1970-01-01
        • 2018-06-05
        • 2021-07-28
        • 2017-12-23
        • 1970-01-01
        • 2019-05-13
        相关资源
        最近更新 更多