【问题标题】:How to access LibraryExtension in custom gradle plugin如何在自定义 gradle 插件中访问 LibraryExtension
【发布时间】:2023-02-05 09:17:35
【问题描述】:

我想编写一个自定义 gradle 插件来操作 com.android.build.gradle.AppExtension 或 com.android.build.gradle.LibraryExtension。插件的基本形式是:

class AndroidLibrary : Plugin<Project> {
   override fun apply(project: Project) {

      var lib: LibraryExtension = project.extensions.getByName("android")  as LibraryExtension
      lib.minSdkVersion = "26"
   }
}

问题是无法解析类 LibraryExtension。该类包含在“com.android.tools.build:gradle:7.1.2”中。请注意,在 gradle.build.kts 脚本文件中访问这些类中的任何一个都没有问题。我只是无法从上面看到的自定义插件中访问这些类中的任何一个。我尝试在构建脚本中添加对 com.android.tools.build.gradle 7.1.2 的依赖,但这不起作用。我还尝试将其添加为 buildscript 依赖项,但这也无济于事。我也得到了 com.android.tools.build:gradle jar 文件并将其添加为依赖项,但这也不起作用。

在我看来,期望自定义插件能够操纵 android 构建设置是合理的,但我只是找不到从自定义插件项目中解析 LibraryExtension 或 AppExtension 的方法。

如果有人知道我需要做什么来解决这两个类,那将不胜感激。我目前的印象是,这是 android 的 gradle 插件的架构限制,我真的无法使用自定义插件和 dsl 中的 LibraryExtension 或 AppExtension 访问“android”构建部分。如果是这样的话,那也将很有用。

【问题讨论】:

  • libraryExtension 的相同代码对我有用

标签: android kotlin gradle


【解决方案1】:

最初我使用 IDEA 构建插件。我可以使用“gradlew build”命令构建项目。我注意到每当我尝试同步项目时都会收到以下消息:

 This version of the Android Support plugin for IntelliJ IDEA (or Android Studio) cannot open this project, please retry with version 2020.1.1 or newer

我一直忽略这个问题,因为我可以使用 gradle 命令成功构建项目。这是一个解释消息含义的链接:https://intellij-support.jetbrains.com/hc/en-us/community/posts/4405168877202-This-version-of-the-Android-Support-plugin-for-IntelliJ-IDEA-or-Android-Studio-cannot-open-this-project-please-retry-with-version-2020-3-1-or-newer-

针对此问题的建议之一是在 Android Studio 中构建项目,而不是等待 IDEA 合并以后的 android 构建。我这样做了,确实解决了这个问题。额外的副作用是我现在可以构建插件了。我能够为 gradleApi 和 com.android.build.gradle 添加依赖项,并且能够解析 LibraryExtension 的 AppExtension。我在使用 IDEA IDE 时添加了相同的依赖项。我一直习惯性地使用 IDEA 构建我的自定义 gradle 插件。这是我要操作“android”构建配置的第一个自定义 gradle 插件。

【讨论】:

  • 同样的问题开始再次出现在我身上,但这次我使用的是 android studio。同样,观察到的问题是无法解析类 LibraryExtension。我确实依赖于包含该类的 android gradle 插件库,但导入不会解析。事实证明,我使用 Nick 提供的解决方案使用 stackoverflow.com/questions/39841532/… 上发布的解决方案解决了这个问题。
【解决方案2】:

您需要将 gradle 库添加到您的 buildSrc 或 buildLogic gradle 文件依赖项中:

compileOnly("com.android.tools.build:gradle:7.4.0")

然后它会找到 LibraryExtension 类

【讨论】:

    猜你喜欢
    • 2022-10-18
    • 1970-01-01
    • 2021-08-23
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2022-07-31
    相关资源
    最近更新 更多