Собственный Kotlin не компилируется должным образом с Gradle

Я создаю свой первый KN, как показано ниже, gradle init, затем обновляю build.gradle с помощью приведенного ниже кода, а затем запускаю gradle build, используя свой Mac:

build.gradle:

buildscript {
    repositories {
        mavenCentral()
        maven {
            url "https://dl.bintray.com/jetbrains/kotlin-native-dependencies"
        }
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-native-gradle-plugin:+"
    }
}

apply plugin: 'konan'

// Compile this component for 64-bit MacOS, Linux and Windows.
 konan.targets = [
                'wasm32',
                'android_arm32', 'android_arm64',
               //  'mingw_x64',
                //  'linux_x64', 'linux_arm32_hfp',
                 'macos_x64',
               //  'ios_x64', 'ios_arm32', 'ios_arm64'
                 ]

konanArtifacts {
    library('utils') {
        srcFiles fileTree('src/libs/utils')
    }
    program('hello') {
        libraries {
            artifact 'utils'
        }
    }
}

Моя структура приложения:

! [kn | 249x366] (загрузить: //86qqoABKdE1jIJ2kl08UegGq2FR.png)

hello.kt (приложение):

fun main() {
    println("Hello Gradle!")
}

foo.kt (библиотека):

fun foo(){
    println("Hello Gradle! again")
}

запустив gradle build: я получил библиотеки и исполняемые файлы, как в дереве ниже:

введите описание изображения здесь

У меня есть следующие вопросы:

  1. Для следующих целей ничего не было создано, поэтому я сделал их в виде комментариев: iOS: ios_x64, ios_arm32, ios_arm64 Raspberry: linux_arm32_hfp Windows: mingw_x64 Linux: linux_x64

  2. Все ли сгенерированные библиотеки utils.Klib одинаковы, поэтому я могу выбрать любую из них и использовать ее где угодно, или я должен выбрать в соответствии с требуемой целью.

  3. Как вызвать функцию foo, которая является частью библиотеки в функции main, я попробовал import utils, а затем вызвал utils.foo(), но не сработало.


person Hasan A Yousef    schedule 12.10.2018    source источник


Ответы (2)


Gradle DSL для новой мультиплатформенной модели Kotlin описан здесь: http://kotlinlang.org/docs/reference/building-mpp-with-gradle.html

(извините за отдельную ветку, у меня просто недостаточно репутации, чтобы оставить комментарий к существующей)

person Liliia    schedule 15.10.2018

  1. Пожалуйста, прочтите документ примечаний к выпуску, описывающий, какие целевые объекты поддерживаются на каком хосте: https://github.com/JetBrains/kotlin-native/blob/master/RELEASE_NOTES.md#supported-platforms
  2. Нет, используйте для каждой цели .klib
  3. Чтобы использовать библиотеку, вам необходимо сообщить об этом компилятору, т.е. -l utils.klib для командной строки или library DSL-глагол.

Также рекомендуется использовать новый мультиплатформенный Gradle DSL, а не тот, который вы здесь используете.

person Nikolay Igotti    schedule 13.10.2018
comment
Спасибо, любая ссылка, по которой я могу найти четкую информацию о новой многоплатформенной Gradle DSL. - person Hasan A Yousef; 13.10.2018