【问题标题】:Kotlin Multiplatform : Plugin [id: 'com.android.library'] was not foundKotlin Multiplatform:找不到插件 [id: 'com.android.library']
【发布时间】:2020-09-15 06:45:33
【问题描述】:

我正在尝试通过 Kotlin 多平台库设置 Android 库。

我收到错误:

Plugin [id: 'com.android.library'] was not found in any of the following sources:

请帮助我指出问题所在以及如何解决此问题。

我的插件设置是这样的(应该是正确的构建脚本):

plugins {
    id("org.jetbrains.kotlin.plugin.serialization").version("1.3.72")
    id("com.android.library")
    id("org.jetbrains.kotlin.multiplatform").version("1.3.72")
    id("com.squareup.sqldelight")
}

当我用以下替换它时

plugins {
    id("org.jetbrains.kotlin.multiplatform").version("1.3.72")
    id("org.jetbrains.kotlin.plugin.serialization").version("1.3.72")
}

apply plugin: 'com.android.library'
apply plugin: 'com.squareup.sqldelight'

它工作正常。 我不确定是什么导致了这个问题。

以下是完整的 build.gradle:

buildscript {
    repositories {
        mavenCentral()
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.squareup.sqldelight:gradle-plugin:1.3.0'
        classpath 'com.android.tools.build:gradle:3.6.3'
    }
}

plugins {
    id("org.jetbrains.kotlin.plugin.serialization").version("1.3.72")
    id("com.android.library")
    id("org.jetbrains.kotlin.multiplatform").version("1.3.72")
    id("com.squareup.sqldelight")
}

repositories {
    mavenCentral()
    jcenter()
    google()
}

group 'com.jolas.sdk.kn.newsycore'
version '0.0.1'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles 'consumer-rules.pro'
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

def ktor_version = '1.3.2'
kotlin {
    android {
        publishLibraryVariants("release", "debug")
    }
    // This is for iPhone simulator
    // Switch here to iosArm64 (or iosArm32) to build library for iPhone device
    iosX64("ios") {
        binaries {
            framework()
        }
    }
    sourceSets {
        commonMain {
            dependencies {
                implementation kotlin('stdlib-common')
                implementation "io.ktor:ktor-client-core:$ktor_version"
                implementation "io.ktor:ktor-client-serialization:$ktor_version"
            }
        }
        commonTest {
            dependencies {
                implementation kotlin('test-common')
                implementation kotlin('test-annotations-common')
            }
        }
        androidMain {
            dependencies {
                implementation kotlin('stdlib')
                implementation "io.ktor:ktor-client-okhttp:$ktor_version"
                implementation "io.ktor:ktor-client-serialization-jvm:$ktor_version"
                implementation "com.squareup.sqldelight:sqlite-driver:1.3.0"
            }
        }
        iosMain {
            dependencies {
                implementation kotlin('stdlib')
                implementation "io.ktor:ktor-client-ios:$ktor_version"
                implementation "io.ktor:ktor-client-serialization-native:$ktor_version"
                implementation "com.squareup.sqldelight:native-driver:1.3.0"
            }
        }
    }
}

sqldelight {
    NewsyDatabase {
        packageName = "com.jolas.sdk.kn.newsycore"
    }
}

configurations {
    compileClasspath
}

【问题讨论】:

  • 你好,@Harley!您能否添加有关您的错误的更多详细信息?还应该有一个来源列表,可能缺少这个插件的那个。
  • 当然。 @ArtyomDegtyarev。请下载这个项目github.com/jolasjoe/newsy-core你会在root-dir中找到build.gradle文件。在该文件中,如果您删除行 apply plugin: 'com.android.library' 并在 plugins 部分添加 id("com.android.library") 您将能够重现该问题。

标签: android gradle android-library gradle-plugin kotlin-multiplatform


【解决方案1】:

Nelson 关于pluginManagement 块是正确的,但是在没有额外配置的情况下找到插件还有一个额外的要求。如果您需要plugins { id("com.android.application") version "3.6.1" },Gradle 将搜索以下 Maven 工件:com.android.application:com.android.application.gradle.plugin:3.6.1。这是一个约定。在开发您的自定义插件时,Gradle 的默认 java-gradle-plugin 将提供这样一个开箱即用的工件。详情请见the corresponding section of Gradle docs

要覆盖任何插件的模块解析,您可以使用resolutionStrategy 块。我有以下 Android 插件:

pluginManagement {
    repositories {
        google()
        gradlePluginPortal()
        jcenter()
    }
    resolutionStrategy {
        eachPlugin {
            if (requested.id.namespace == "com.android") {
                useModule("com.android.tools.build:gradle:${requested.version}")
            } else if(requested.id.namespace == "com.google.gms") {
                useModule("com.google.gms:${requested.id.name}:${requested.version}")
            }
        }
    }
}

在您的settings.gradle.kts 中包含此内容将允许您使用通常的plugins 块,如下所示:

plugins {
    id("com.android.application") version "3.6.1"
    id("com.google.gms.google-services") version "4.3.3"
}

当然,要在所有子模块中重复使用相同版本的插件,您可以使用通常的路线apply false

/build.gradle.kts

plugins {
    id("com.android.application") version "3.6.1" apply false
    id("com.android.library") version "3.6.1" apply false
    // ...
}

/lib/build.gradle.kts

plugins {
    id("com.android.library")
    // ...
}

【讨论】:

    【解决方案2】:

    插件块从settings.gradle 中的pluginManagement 块而不是build.gradle buildscript 块中获取其依赖项。 请将以下内容添加到您的 settings.gradle 文件中,然后重试。

    pluginManagement {
        repositories {
            google()
            gradlePluginPortal()
        }
    }
    

    【讨论】:

    猜你喜欢
    • 2015-09-05
    • 2021-06-25
    • 2016-10-04
    • 2016-02-04
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 2021-03-06
    相关资源
    最近更新 更多