Kotlin Мультиплатформенность: плагин [id: 'com. android .library'] не найден - PullRequest
1 голос
/ 28 мая 2020

Я пытаюсь настроить Android Библиотеку через Kotlin Многоплатформенную библиотеку.

Я получаю сообщение об ошибке:

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
}

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Нельсон прав относительно блока 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 предоставит такой артефакт из коробки. См. соответствующий раздел документации Gradle для более подробной информации.

Чтобы переопределить разрешение модуля для любого плагина, вы можете использовать блок 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"
}

Конечно, для повторного использования одной и той же версии плагина во всех подмодулях вы можете go с обычным маршрутом 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")
    // ...
}
0 голосов
/ 28 мая 2020

Блок plugins получает свои зависимости от блока pluginManagement в settings.gradle, а не от блока build.gradle buildscript. Добавьте следующее в свой файл settings.gradle и повторите попытку.

pluginManagement {
    repositories {
        google()
        gradlePluginPortal()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...