У меня есть мультиплатформенный проект kotlin. Настройка для iOS и Android, она работает хорошо. Он имеет модуль common
для совместного использования бизнес-логики и модуль platform-android
и platform-ios
для реализации API платформы.
После добавления модуля common
и platform-android
из проекта A в другой проект Android B среда IDE Android Studio сообщает о множестве синтаксических ошибок, но коды создаются и запускаются из студии Android без проблем.
Синтаксис выглядит так: kotlin-stdlib
не существует, хотя он действительно находится в build.gradle
, иначе он не будет собираться.
Например:
val filterMap = mutableMapOf<String, MenuFilter>()
Студия Android скажет Unresolved reference: mutableMapOf
Некоторые факты:
common
модуль имеет проблему
- без проблем для
platform-android
.
- и, конечно, нет проблем, когда я использую IDEA для редактирования проекта A
мой build.gradle
для common
модуль выглядит следующим образом:
apply plugin: 'kotlin-platform-common'
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
testCompile "org.jetbrains.kotlin:kotlin-test-annotations-common:$kotlin_version"
testCompile "org.jetbrains.kotlin:kotlin-test-common:$kotlin_version"
}
sourceSets {
main.kotlin.srcDirs += 'main/'
test.kotlin.srcDirs += 'test/'
}
task sourcesJar(type: Jar) {
classifier = 'sources'
from sourceSets.main.kotlin
}
artifacts {
archives sourcesJar
}
kotlin {
experimental {
coroutines "enable"
}
}
Корневой проект build.gradle
в Android Studio:
buildscript {
ext{
kotlin_version = '1.2.41'
anko_version = '0.10.4'
dagger_version = '2.15'
support_lib_version = '27.1.1'
}
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
jcenter()
mavenCentral()
maven { url "https://jitpack.io" }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
А это settings.gradle
файл для проекта Android B
def projectA_path = "path/to/projectA"
include(":common")
project(":common").projectDir = new File("$projectA_path/common")
include(":platforms:android")
project(":platforms:android").projectDir = new File("$projectA_path/platforms/android")
Даже два из разных проектов, в соответствии с настройкой здесь. Разве эти два не должны работать? Что мне здесь не хватает?
Версия IDE:
- IDEA Ultimate 2018.1
- Android studio 3.1.2