【问题标题】:WARNING: API 'variant.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'警告:API 'variant.getPackageLibrary()' 已过时,已替换为 'variant.getPackageLibraryProvider()'
【发布时间】:2019-09-02 21:59:48
【问题描述】:

我刚刚将 kotlin 更新到 1.3.30,现在在同步 gradle 时出现此错误:

警告:API 'variant.getPackageLibrary()' 已过时且已被 替换为“variant.getPackageLibraryProvider()”。这将是 于 2019 年底删除。有关详细信息,请参阅 https://d.android.com/r/tools/task-configuration-avoidance。到 确定调用 variant.getPackageLibrary() 的内容,使用 -Pandroid.debug.obsoleteApi=true 在命令行上显示堆栈跟踪。受影响的模块:hydatabase

这是我的build.gradle

apply plugin: 'com.squareup.sqldelight'
apply plugin: 'kotlin-multiplatform'
apply plugin: 'com.android.library'

android {
    compileSdkVersion 28
    defaultConfig {
        minSdkVersion 19
    }
    lintOptions {
        abortOnError false
    }
}

sqldelight {
    Database {
        packageName = "com.company.hydatabase"
    }
}

kotlin {
    targets {
        fromPreset(presets.jvm, 'jvm')
        fromPreset(presets.android, 'android')
    }

    sourceSets {
        commonMain.dependencies {
            api 'org.jetbrains.kotlin:kotlin-stdlib-common'
        }
        jvmMain.dependencies {
            api 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
            // ICU4J: Use DecimalFormat
            // Get rid of this when minSDKLevel = API 24 - Nougat (7.0)
            // https://developer.android.com/guide/topics/resources/internationalization.html
            api 'com.ibm.icu:icu4j:60.2'
        }
        androidMain.dependencies {
            implementation 'org.jetbrains.kotlin:kotlin-stdlib'
            api "com.squareup.sqldelight:android-driver:1.1.1"
        }
        androidMain.dependsOn jvmMain
    }
}

task copyDatabase(type: Copy) {
    from "${rootProject.file('hyappcommon/Databases/').path}"
    into "${rootProject.file('hydatabase/src/main/assets/databases/').path}"
    include '**/*.sqlite'
}

preBuild.dependsOn(copyDatabase)

// workaround for https://youtrack.jetbrains.com/issue/KT-27170
configurations {
    compileClasspath
}

【问题讨论】:

    标签: kotlin android-gradle-plugin


    【解决方案1】:

    这可能是一个错误,很快就会修复

    您可以恢复到以前的版本或将此行添加到gradle.properties

    android.debug.obsoleteApi=true
    

    【讨论】:

      【解决方案2】:

      如果你调试,它会显示 REASON: The Kotlin plugin is currently calling this API. We are working to solve this.

      要查看此错误,请运行 ./gradlew -Pandroid.debug.obsoleteApi=true --stacktrace

      【讨论】:

      • 你在哪里看到的?
      • ./gradlew -Pandroid.debug.obsoleteApi=true --stacktrace
      • 我将 'kotlin-gradle-plugin' 版本从 1.3.31 升级到 1.3.41 并删除了警告谢谢
      • 我应该在哪里运行./gradlew ...
      • 我使用的是 1.3.61 版本,然后也遇到了这个问题。请帮我解决问题。谢谢你编码愉快。。
      【解决方案3】:

      我将 Kotlin 更新为 1.3.30 后,以下依赖导致错误:

      dependencies {
          classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
          classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
          // ... other dependencies
      }
      

      我在这里报告了这个问题:

      https://github.com/bintray/gradle-bintray-plugin/issues/284

      https://github.com/dcendents/android-maven-gradle-plugin/issues/81

      顺便说一句,您可以忽略该错误消息。

      【讨论】:

        【解决方案4】:

        正如 tommyboy 所说,Kotlin 插件正在调用这个已弃用的 API。 如果您不想在 Kotlin 处理此问题时收到此警告,则可以使用以前版本的 Kotlin 插件,例如:

        dependencies {
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.21"
        }
        

        【讨论】:

          【解决方案5】:

          这是 Kotlin 插件的问题,如 mentioned here。它将在以后的版本中得到修复。

          【讨论】:

          • 欢迎提供解决方案链接,但请确保您的答案在没有它的情况下有用:add context around the link 这样您的其他用户就会知道它是什么以及为什么会出现,然后引用最相关的您链接到的页面的一部分,以防目标页面不可用。 Answers that are little more than a link may be deleted.
          • @double-beep 简答不是坏答案的同义词。
          • “这是 Kotlin 插件的问题”并没有真正回答这个问题。您可以扩展答案 - 请这样做。
          【解决方案6】:

          你可以在根项目中运行这个命令

          gradlew -Pandroid.debug.obsoleteApi=true
          

          警告将消失。

          【讨论】:

            【解决方案7】:

            刚刚更新到“v1.3.40-release-Studio3.4-1”插件。

            正如您在https://youtrack.jetbrains.com/issue/KT-30784 中看到的那样

            【讨论】:

              【解决方案8】:

              我在使用带有库插件的 kotlin 插件时遇到了这个问题。我发现如果您将 kotlin 插件与应用程序插件一起使用,效果会很好。但是如果你使用 kotlin 插件和库插件,就会导致这个问题。这意味着:

              // work well:
              apply plugin: 'com.android.application'
              apply plugin: 'kotlin-android'
              apply plugin: 'kotlin-kapt'
              apply plugin: 'kotlin-android-extensions'
              
              // error:
              apply plugin: 'com.android.library'
              apply plugin: 'kotlin-android'
              apply plugin: 'kotlin-kapt'
              apply plugin: 'kotlin-android-extensions'
              

              由于错误显示,您可以使用./gradlew -Pandroid.debug.obsoleteApi=true --stacktrace 查找模块导致此问题。

              然后我发现我的一个模块使用了错误的插件组合。这似乎是 kotlin 插件的错误。所以最后,我升级了 kotlin 插件,然后它运行良好。下面是我最终使用的kotlin插件:

              buildscript {
                  ext.kotlin_version = '1.3.40'
                  repositories {
                      google()
                      jcenter()
                  }
                  dependencies {
                      classpath 'com.android.tools.build:gradle:3.4.1'
                      classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
                  }
              }
              

              【讨论】:

                【解决方案9】:

                在我的项目 gradle 文件中

                buildscript {
                    ext.kotlin_version = '1.3.31'
                    repositories {
                        google()
                        jcenter()
                    }
                    dependencies {
                        classpath 'com.android.tools.build:gradle:3.3.2'
                        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
                
                        // NOTE: Do not place your application dependencies here; they belong
                        // in the individual module build.gradle files
                    }
                }
                

                简单的改变 ext.kotlin_version = '1.3.31'ext.kotlin_version = '1.3.41' 解决了问题

                在使用 1.3.31 版本时,我尝试过 gradlew -Pandroid.debug.obsoleteApi=true

                提到了

                警告:API 'variant.getPackageLibrary()' 已过时且已被 替换为“variant.getPackageLibraryProvider()”。这将是 于 2019 年底删除。 有关详细信息,请参阅https://d.android.com/r/tools/task-configuration-avoidance

                原因:Kotlin 插件当前正在调用此 API。我们正在努力解决这个问题。

                警告:调试过时的 API 调用可能需要一些时间 配置。建议不要一直开着。

                看起来它在 1.3.41 中解决了

                【讨论】:

                  【解决方案10】:

                  问题是tracked here,它已修复。

                  只需使用 1.3.40 或更高版本的 Kotlin Gradle 插件即可。

                  警告:API 'variant.getPackageLibrary()' 已过时,已替换为 'variant.getPackageLibraryProvider()'。 将于 2019 年底移除。

                  【讨论】:

                    猜你喜欢
                    • 2019-11-12
                    • 2019-11-13
                    • 2019-11-23
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2019-05-23
                    相关资源
                    最近更新 更多