J'ai créé un nouveau projet Kotlin Multiplatform pour Andrid et iOS (Mobile shared Library). Le projet fonctionne bien, mais chaque fois que j'exécute la synchronisation Gradle , cela prend plus de 5 minutes à chaque fois. Il reste toujours bloqué sur la même ligne:
Gradle: Construisez le modèle 'org.jetbrains.kotlin.gradle.KotlinMPPGradleModel' pour le projet racine 'MyProject'
Pourquoi cela prend-il autant de temps chaque fois?
J'utilise Gradle version 5.1.
Voici mon fichier build.gradle :
buildscript {
ext.kotlin_version = '1.3.11'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.8.1"
}
}
plugins {
id 'kotlin-multiplatform' version '1.3.11'
}
repositories {
google()
jcenter()
mavenCentral()
maven { url 'https://jitpack.io' }
}
repositories {
mavenCentral()
}
group 'com.example'
version '0.0.1'
apply plugin: "com.android.library"
apply plugin: "com.jfrog.artifactory"
apply plugin: 'maven-publish'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName version
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions.incremental = false
}
kotlin {
targets {
fromPreset(presets.android, 'android')
// This preset is for iPhone emulator
// Switch here to presets.iosArm64 to build library for iPhone device
fromPreset(presets.iosX64, 'ios') {
compilations.main.outputKinds('FRAMEWORK')
}
}
sourceSets {
commonMain {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-stdlib-common'
}
}
commonTest {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-test-common'
implementation 'org.jetbrains.kotlin:kotlin-test-annotations-common'
}
}
androidMain {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-stdlib'
}
}
androidTest {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-test'
implementation 'org.jetbrains.kotlin:kotlin-test-junit'
}
}
iosMain {
}
iosTest {
}
}
}
configurations {
compileClasspath
}
Capture d'écran du problème:
3 Réponses :
Essayez d'exécuter la tâche Gradle à partir des lignes de commande avec l'option --parallel.
Sinon, parcourez ce guide pour profiler l'exécution de Gradle https://guides.gradle.org/performance/ < / a>
J'ai déjà tout essayé dans ce guide. Le problème n'est pas avec la construction qui est rapide, c'est seulement avec la synchronisation.
Il existe un problème connu où les dépendances Kotlin / Native sont de nouveau récupérées à chaque synchronisation, ce qui peut être ce que vous voyez. Vous pouvez voir les détails et les suivre ici .
Comme indiqué sur ce problème, il existe une solution de contournement que vous pourrez peut-être essayer, qui consiste essentiellement à ajouter {content {excludeGroup ("Kotlin / Native"}} à chaque élément de vos dépôts. bloc.
La mise à niveau vers la dernière version (Kotlin 1.3.21 et Gradle 5.2.1 ) a résolu ce problème pour moi.
Comme @Brucelet l'a souligné, il s'agit d'un problème connu . Pour compléter sa réponse, voici une implémentation complète de la solution de contournement dans Groovy:
repositories {
mavenLocal().apply {
content {
excludeGroup("Kotlin/Native")
}
}
maven {
url = uri("https://dl.bintray.com/soywiz/soywiz")
content {
includeGroup("com.soywiz")
excludeGroup("Kotlin/Native")
}
}
jcenter() {
content {
excludeGroup("Kotlin/Native")
}
}
google().apply {
content {
excludeGroup("Kotlin/Native")
}
}
}
et dans Kotlin DSL :
repositories {
mavenCentral().content() {
excludeGroup "Kotlin/Native"
}
google().content() {
excludeGroup "Kotlin/Native"
}
jcenter() {
content {
excludeGroup("Kotlin/Native")
}
}
maven {
url 'https://jitpack.io'
content {
excludeGroup("Kotlin/Native")
}
}
}