警告:API'variant.getPackageLibrary()'已过时,已被'variant.getPackageLibraryProvider()'取代

时间:2019-04-12 07:24:59

标签: kotlin android-gradle

我刚刚将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
}

10 个答案:

答案 0 :(得分:22)

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

答案 1 :(得分:5)

正如@tommyboy所说,Kotlin插件正在调用此已弃用的API。 如果您不想在Kotlin进行此操作时收到此警告,则可以使用以前版本的Kotlin插件,例如:

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

答案 2 :(得分:2)

这可能是一个错误,很快就会解决

您可以还原到以前的版本,或将此行添加到gradle.properties

android.debug.obsoleteApi=true

答案 3 :(得分:1)

将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 :(得分:1)

问题是tracked here,并且已已修复。

只需使用Kotlin Gradle插件v 1.3.40或更高版本。

  

警告:API'variant.getPackageLibrary()'已过时,已被'variant.getPackageLibraryProvider()'取代。   它将在2019年底删除。

enter image description here

答案 5 :(得分:0)

这是Kotlin插件的问题,为mentioned here。它将在更高版本中得到修复。

答案 6 :(得分:0)

您可以在根项目“ gradlew -Pandroid.debug.obsoleteApi = true”中运行此命令,警告将消失。

答案 7 :(得分:0)

仅更新为“ v1.3.40-release-Studio3.4-1”插件。

您在the documentation中看到的

答案 8 :(得分:0)

当我将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 :(得分:0)

在我的项目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中解决了