Какие минимальные настройки Gradle необходимы для поддержки преобразования файлов Kotlin в приложении Android Studio в Javascript с помощью kotlin2js? - PullRequest
0 голосов
/ 29 сентября 2018

В настоящее время у меня есть два build.gradles.Один для приложения и один для проекта.

Для приложения build.gradle у меня есть:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

android {
    compileSdkVersion 19
    buildToolsVersion '28.0.2'
    defaultConfig {
        applicationId "someId"
        minSdkVersion 11
        targetSdkVersion 19
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile files('libs/someSDK.jar')
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

repositories {
    mavenCentral()
}

Для проекта build.gradle у меня есть:

buildscript {
    ext.kotlin_version = '1.2.71'
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'kotlin2js'

allprojects {
    repositories {
        mavenCentral()
        jcenter()
    }
}

sourceSets {
    main.kotlin.srcDirs += "${projectDir}/src/main/java/pathToFilesConvertedFromJavaToKotlin"

}

compileKotlin2Js {
    kotlinOptions.metaInfo = true
    kotlinOptions.outputFile = "$project.buildDir.path/js/${project.name}.js"
    kotlinOptions.sourceMap = true
    kotlinOptions.moduleKind = 'commonjs'
    kotlinOptions.main = "call"
}

ext {
    minSdkVersion = 15
    targetSdkVersion = 23
    compileSdkVersion = 23
    buildToolsVersion = '23.0.3'

    xmlunitVersion = '1.6'
    junitVersion = '4.12'
    mockitoVersion = '1.10.19'
    hamcrestVersion = '1.3'
}

Когда я компилирую и запускаю, приложение работает, и никаких ошибок не возникает.Тем не менее, я не вижу своего файла javascript, который должен был быть создан из этих файлов Kotlin.

Любые идеи о том, почему?

Обратите внимание, я пытался использовать: http://kotlinlang.org/docs/tutorials/javascript/getting-started-gradle/getting-started-with-gradle.html в качестве руководства.Проблема с этим примером заключается в том, что он предлагает использовать taskAssemble ниже.Тем не менее, он содержит файл, который по некоторым причинам не распознается как ключевое слово в моем build.gradle.

task assembleWeb(type: Sync) {
    configurations.compile.each { File file ->
        from(zipTree(file.absolutePath), {
            includeEmptyDirs = false
            include { fileTreeElement ->
                def path = fileTreeElement.path
                path.endsWith(".js") && (path.startsWith("META-INF/resources/") || 
                    !path.startsWith("META-INF/"))
            }
        })
    }
    from compileKotlin2Js.destinationDir
    into "${projectDir}/web"

    dependsOn classes
}

assemble.dependsOn assembleWeb

1 Ответ

0 голосов
/ 01 октября 2018

На данный момент я считаю, что проблема в том, что вы не можете скомпилировать Java-байт-код в Javascript через kotlin2js.Поскольку в моем коде есть ссылки на Android, и эти ссылки скомпилированы в байт-код Java, мои сценарии Kotlin не могут быть успешно преобразованы в Javascript.Однако я натолкнулся на интересную статью, которая может быть полезна всем, кто хочет создавать приложения на основе Kotlin, которые могут работать на нескольких платформах: https://kotlinlang.org/docs/reference/multiplatform.html

...