我正在尝试通过Kotlin Multiplatform库设置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
}
plugins块从settings.gradle
中的pluginManagement块而不是build.gradle
buildscript块获取其依赖项。请将以下内容添加到settings.gradle
文件中,然后重试。
pluginManagement {
repositories {
google()
gradlePluginPortal()
}
}
[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")
// ...
}