J'essaie d'utiliser les journaux Android dans mon code partagé, je voulais donc utiliser la fonctionnalité "attendu / réel" afin de permettre au côté Android d'utiliser les journaux à lire dans le chat de journal. Cependant, je ne peux pas obtenir le module android (pas le module d'application) pour importer le android.util.Log.
J'ai vu cette réponse mais cela n'a pas fonctionné pour moi. Je ne parviens pas à résoudre l’importation.
Je pense que j'ai besoin d'implémenter une dépendance spécifique pour avoir accès à l'importation mais je ne suis pas sûr de ce que c'est.
Voici mon build.gradle.kts
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget plugins { kotlin("multiplatform") } kotlin { //select iOS target platform depending on the Xcode environment variables val iOSTarget: (String, KotlinNativeTarget.() -> Unit) -> KotlinNativeTarget = if (System.getenv("SDK_NAME")?.startsWith("iphoneos") == true) ::iosArm64 else ::iosX64 iOSTarget("ios") { binaries { framework { baseName = "SharedCode" } } } jvm("android") sourceSets["commonMain"].dependencies { implementation("org.jetbrains.kotlin:kotlin-stdlib-common") implementation("io.ktor:ktor-client:1.0.0-beta-3") implementation ("org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.3.2") // implementation ("org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:0.14.0") } sourceSets["androidMain"].dependencies { implementation("org.jetbrains.kotlin:kotlin-stdlib") //Allows _androidMain to have java imports implementation("io.ktor:ktor-client-android:1.0.0-beta-3") api("org.jetbrains.kotlin:kotlin-stdlib:1.3.61") api("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61") implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61") } } val packForXcode by tasks.creating(Sync::class) { val targetDir = File(buildDir, "xcode-frameworks") /// selecting the right configuration for the iOS /// framework depending on the environment /// variables set by Xcode build val mode = System.getenv("CONFIGURATION") ?: "DEBUG" val framework = kotlin.targets .getByName<KotlinNativeTarget>("ios") .binaries.getFramework(mode) inputs.property("mode", mode) dependsOn(framework.linkTask) from({ framework.outputDirectory }) into(targetDir) /// generate a helpful ./gradlew wrapper with embedded Java path doLast { val gradlew = File(targetDir, "gradlew") gradlew.writeText("#!/bin/bash\n" + "export 'JAVA_HOME=${System.getProperty("java.home")}'\n" + "cd '${rootProject.rootDir}'\n" + "./gradlew \$@\n") gradlew.setExecutable(true) } } tasks.getByName("build").dependsOn(packForXcode)
3 Réponses :
Ici, vous avez une cible JVM avec le nom "android" au lieu de la cible Android. Le même problème s'est produit dans la question liée. Pouvez-vous dire ce qui se passe lorsque vous utilisez le script de la réponse? Il semble que celui-ci devrait fonctionner correctement.
Comme décrit dans la documentation , on a pour utiliser un plugin Gradle spécifique à Android pour rendre la cible Android disponible. Si vous voulez voir comment cela peut être fait, envisagez de jeter un œil à cet exemple a>.
J'ai essayé d'utiliser le script mais je commence à recevoir un tas d'autres erreurs. J'ai trois fichiers build.gradle, l'application habituelle et le projet un et un kotlin (pas groovy) qui, je suppose, est de faire fonctionner le mmp. Il semble que le script publié effectue une partie du travail de build.gradle (application). J'ai essayé de remplacer JVM ("android") par android () mais j'obtiens une erreur de construction. L'extension avec le nom "android" n'existe pas
J'ai eu le même problème. Essayez d'utiliser android ()
au lieu de seulement jvm ("android")
.
J'ai également ajouté mes dépendances à Android avec android.sourceSets.foreach {_ ->
dépendances {...}
}
J'ai essayé mais j'obtiens une erreur de construction: l'extension avec le nom «android» n'existe pas.
Essayez d'ajouter le plugin Android avec plugins {id ("com.android.library")}
Je viens de corriger le même problème, j'ai finalement utilisé ce tutoriel https://medium.com/icerock/how-to-start-use-kotlin-multiplatform-for-mobile-development-1d3022742178
donc mon build.gradle
ressemble à:
apply plugin: 'com.android.library' apply plugin: 'org.jetbrains.kotlin.multiplatform' android { compileSdkVersion 29 defaultConfig { minSdkVersion 14 targetSdkVersion 29 } } kotlin { targets { android() iosArm64() iosX64() } sourceSets { commonMain { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version" } } androidMain { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" } } } }