首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多平台项目中的Android环境

多平台项目中的Android环境
EN

Stack Overflow用户
提问于 2019-01-16 16:30:21
回答 1查看 1.9K关注 0票数 4

我想知道是否可以使用kotlin多平台插件访问androidMain sourceSets中的Android上下文应用程序。

这是build.gradle文件

代码语言:javascript
复制
apply plugin: 'kotlin-multiplatform'

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

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

        fromPreset(presets.jvm, 'android')
    }

    sourceSets {

        commonMain {
            kotlin.srcDir('src')
            dependencies {
                implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
                // coroutine
                implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.1.0"
            }
        }

        androidMain {
            dependencies {
                implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
                // Timber
                implementation "com.jakewharton.timber:timber:$timber_version"
                // coroutine
                implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.0"
            }
        }
    }
}

我尝试过将'com.android.application‘插件添加到androidMain源代码中,但是同步失败了。

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-17 17:10:50

可以,停那儿吧。

在您的build.gradle文件中,您不是针对安卓本身(presets.android),而是针对jvm (presets.jvm),并称其为android。

现在,您的构建将生成一个JAR文件,而不是aar文件。

如果你想以android为目标,你还必须使用android插件。为了能够使用androidMain文件夹中的android框架,更新您的build.gradle文件。下面是一个例子:

代码语言:javascript
复制
apply plugin: 'org.jetbrains.kotlin.multiplatform'
apply plugin: 'com.android.library'

android {
    compileSdkVersion 28
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName '1.0'
    }
    buildTypes {
        release {
            minifyEnabled false
        }
    }

        // By default the android gradle plugin expects to find the kotlin source files in 
        // the folder `main` and the test in the folder `test`. This is to be able place 
        // the source code files inside androidMain and androidTest folders
    sourceSets {
        main {
            manifest.srcFile 'src/androidMain/AndroidManifest.xml'
            java.srcDirs = ['src/androidMain/kotlin']
            res.srcDirs = ['src/androidMain/res']
        }
        test {
            java.srcDirs = ['src/androidTest/kotlin']
            res.srcDirs = ['src/androidTest/res']
        }
    }
}

dependencies {
    implementation "com.jakewharton.timber:timber:$timber_version
}

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

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

        fromPreset(presets.android, 'android')
    }
    sourceSets {
        commonMain {
            dependencies {
                implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
                // coroutine
                implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.1.0"
            }
        }
        androidMain {
            dependencies {
                api "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
            }
        }
    }
}

task buildiOSFramework(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)
        }
    }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54221388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档