Skip to content

Kotlin native support for OpenHarmony OS and HarmonyOS

Notifications You must be signed in to change notification settings

zxystd/Kotlin-OHOS

Repository files navigation

Kotlin-OHOS

Kotlin native support for OpenHarmony OS and HarmonyOS

HarmonyOS Beta1刚出的时候,抽了一点时间适配了HarmonyOS的native target,没什么时间继续搞太多,抛砖引玉啦。 仓库有点多,源代码还要整理下

Kotlin

  • Kotlin OHOS KN/Target
    • konan-cli
    • kotlin-compiler
    • kotlin-gradle-plugin

dependencies

  • stdlib
  • multiplatform
  • kotlinx.coroutines
  • kotlinx.serialization
    • kotlinx-serialization-core
    • kotlinx-serialization-bom
    • kotlinx-serialization-bom
    • kotlinx-serialization-hocon
    • kotlinx-serialization-json
    • kotlinx-serialization-json-io
    • kotlinx-serialization-properties
    • kotlinx-serialization-protobuf
    • kotlinx-serialization-json-okio
  • kotlinx-datetime
  • kotlinx-atomicfu
  • kotlinx-io
    • kotlinx-io-core
    • kotlinx-io-bytestring
  • binary-compatibility-validator

platform libs

  • posix
  • log
  • napi
  • zlib
  • gles
  • sles
  • ar
  • xengine
  • graphics_game_sdk
  • RemoteCommunicationKit

食用方法

目前prebuilt的都是基于HarmonyOS Beta1的command-line-tools进行编译的,在beta1上测试了一切正常,其他版本自行尝试。 宿主机是M系列的电脑,x86 mac和windows/linux暂时没加支持,支持也简单,就是没时间

  1. 去官网下载command-line-tools工具,或者已经下了DevEco-Studio也可以,将HarmonyOS的SDK的路径映射到~/.konan/目录下,没有这个目录就创建,最终的目录像这样 /Users/用户名/.konan/HarmonyOS-NEXT-DB1

  2. 解压kotlin-native-prebuilt-macos-aarch64-2.1.255-SNAPSHOT.tar.gz文件到~/.konan/目录下,最终的目录像这样 /Users/用户名/.konan/kotlin-native-prebuilt-macos-aarch64-2.1.255-SNAPSHOT

  3. 新建KMP Library工程,在settings.gradle仓库添加本地仓库地址,解压repo仓库,比如解压到Download文件夹了,那么就是

pluginManagement {
    repositories {
        maven {
            url = uri("/Users/用户名/Downloads/repo")
        }
        mavenLocal()
        google()
        gradlePluginPortal()
        mavenCentral()
    }
}

dependencyResolutionManagement {
    repositories {
        maven {
            url = uri("/Users/用户名/Downloads/repo")
        }
        mavenLocal()
        google()
        mavenCentral()
    }
}
  1. 修改依赖版本,改成本地的snapshot版本
[versions]
kotlin = "2.1.255-SNAPSHOT"
kotlinxCoroutinesCore = "1.9.0-RC.2-SNAPSHOT"
kotlinxDatetime = "0.6.1-SNAPSHOT"
kotlinxIo = "0.6.0-SNAPSHOT"
kotlinxSerialization = "1.7.3-SNAPSHOT"
atomicfu = "0.25.0-SNAPSHOT"`

[libraries]
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinxCoroutinesCore" }
kotlinx-io-core = { module = "org.jetbrains.kotlinx:kotlinx-io-core", version.ref = "kotlinxIo" }
kotlinx-io-bytestring = { module = "org.jetbrains.kotlinx:kotlinx-io-bytestring", version.ref = "kotlinxIo" }
kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinxDatetime" }
kotlinx-serialization-core = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version.ref = "kotlinxSerialization" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerialization" }
kotlin-atomicfu = { module = "org.jetbrains.kotlinx:atomicfu", version.ref = "atomicfu" }
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
  1. shared模块build.gradle中添加harmonyOS target,如
    harmonyOSArm64 {
        binaries.sharedLib {
            baseName = "hellokt"
        }
    }
  1. 在gradle task里构建,或者命令:
./gradlew shared:linkHarmonyOSArm64

Build成功的话,在shared/build/bin/harmonyOSArm64目录下会出现so文件和.h文件,可以在arkts中通过npai直接调用

注意,由于kotlin cinterop的要求,宿主机需要安装aarch64的Azul Zulu JDK8,详细可以去kotlin官方仓库查看

编译第三方库

。。。

About

Kotlin native support for OpenHarmony OS and HarmonyOS

Resources

Stars

Watchers

Forks

Packages

No packages published