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") } } }