Gradle Multiplatform целевой неоднозначности или не может импортировать - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь собрать проект Kotlin Native на основе сборки Gradle.Моя цель - 2 цели для Android и 1 цель для ios.Я могу получить это, чтобы правильно построить цели и правильно ссылаться на общие / платформенные коды.Что я не добился успеха, так это в приложениях для Android (я не пробовал IOS да) со ссылкой на выходную сборку из многоплатформенной сборки gradle.

SharedCode / build.gradle:

apply plugin: 'kotlin-multiplatform'


def mobilePlatformAttribute = Attribute.of('com.inspirefitness.mobile', String)
def consolePlatformAttribute = Attribute.of('com.inspirefitness.console', String)



configurations {


    mobileConfiguration {
        extendsFrom configurations.default

        attributes.attribute(mobilePlatformAttribute, 'mobile')
    }


    consoleConfiguration {

        extendsFrom configurations.default

        attributes.attribute(consolePlatformAttribute, 'console')
    }
}

kotlin {
    targets {
        final def iOSTarget = System.getenv('SDK_NAME')?.startsWith("iphoneos") \
                              ? presets.iosArm64 : presets.iosX64

        fromPreset(iOSTarget, 'iOS') {
            compilations.main.outputKinds('FRAMEWORK')
        }
    }



    jvm('android').attributes {
        attribute(mobilePlatformAttribute, 'mobile')
    }

    jvm('console').attributes {
        attribute(consolePlatformAttribute, 'console')
    }


    sourceSets {
        commonMain.dependencies {
            api 'org.jetbrains.kotlin:kotlin-stdlib-common'
        }

        androidMain.dependencies {
            api 'org.jetbrains.kotlin:kotlin-stdlib'
        }

        consoleMain.dependencies {
            api 'org.jetbrains.kotlin:kotlin-stdlib'
        }

    }
}

// workaround for https://youtrack.jetbrains.com/issue/KT-27170
configurations {
    compileClasspath
}

task packForXCode(type: Sync) {
    final File frameworkDir = new File(buildDir, "xcode-frameworks")
    final String mode = project.findProperty("XCODE_CONFIGURATION")?.toUpperCase() ?: 'DEBUG'

    inputs.property "mode", mode
    dependsOn kotlin.targets.iOS.compilations.main.linkTaskName("FRAMEWORK", mode)

    from { kotlin.targets.iOS.compilations.main.getBinary("FRAMEWORK", mode).parentFile }
    into frameworkDir

    doLast {
        new File(frameworkDir, 'gradlew').with {
            text = "#!/bin/bash\nexport 'JAVA_HOME=${System.getProperty("java.home")}'\ncd '${rootProject.rootDir}'\n./gradlew \$@\n"
            setExecutable(true)
        }
    }
}

tasks.build.dependsOn packForXCode

app / build.gradle:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.jetbrains.jonnyzzz.myapplication"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}




dependencies {

    implementation project(path: ':SharedCode', configuration: 'mobileConfiguration')


    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

Поскольку у меня есть 2 цели для Android, я наложил на них псевдонимы и прикрепил атрибуты, а также создал конфигурации для ссылок в приложениях.Когда я пытаюсь импортировать пакет в Kotlin, я не могу разрешить зависимость, которая будет представлять собой модуль из общего пространства имен.Прежде чем я что-то сделаю с конфигурациями, у меня нет проблемы, но в тот момент, когда проблема возникает, у меня возникает двусмысленность между двумя целями android.

...