|
| 1 | +# Kotlin-OHOS |
| 2 | +Kotlin native support for OpenHarmony OS and HarmonyOS |
| 3 | + |
| 4 | +HarmonyOS Beta1刚出的时候,抽了一点时间适配了HarmonyOS的native target,没什么时间继续搞太多,抛砖引玉啦。 |
| 5 | +仓库有点多,源代码还要整理下 |
| 6 | + |
| 7 | +### Kotlin |
| 8 | + - [x] Kotlin OHOS KN/Target |
| 9 | + - [x] konan-cli |
| 10 | + - [x] kotlin-compiler |
| 11 | + - [x] kotlin-gradle-plugin |
| 12 | + |
| 13 | +### dependencies |
| 14 | + - [x] stdlib |
| 15 | + - [x] multiplatform |
| 16 | + - [x] kotlinx.coroutines |
| 17 | + - [x] kotlinx.serialization |
| 18 | + - [x] kotlinx-serialization-core |
| 19 | + - [x] kotlinx-serialization-bom |
| 20 | + - [x] kotlinx-serialization-bom |
| 21 | + - [x] kotlinx-serialization-hocon |
| 22 | + - [x] kotlinx-serialization-json |
| 23 | + - [x] kotlinx-serialization-json-io |
| 24 | + - [x] kotlinx-serialization-properties |
| 25 | + - [x] kotlinx-serialization-protobuf |
| 26 | + - [ ] kotlinx-serialization-json-okio |
| 27 | + - [x] kotlinx-datetime |
| 28 | + - [x] kotlinx-atomicfu |
| 29 | + - [x] kotlinx-io |
| 30 | + - [x] kotlinx-io-core |
| 31 | + - [x] kotlinx-io-bytestring |
| 32 | + - [x] binary-compatibility-validator |
| 33 | + |
| 34 | +### platform libs |
| 35 | + - [x] posix |
| 36 | + - [x] log |
| 37 | + - [x] napi |
| 38 | + - [x] zlib |
| 39 | + - [ ] gles |
| 40 | + - [ ] sles |
| 41 | + - [ ] ar |
| 42 | + - [ ] xengine |
| 43 | + - [ ] graphics_game_sdk |
| 44 | + - [ ] RemoteCommunicationKit |
| 45 | + |
| 46 | +### 食用方法 |
| 47 | + 目前prebuilt的都是基于HarmonyOS Beta1的command-line-tools进行编译的,在beta1上测试了一切正常,其他版本自行尝试。 |
| 48 | + 宿主机是M系列的电脑,x86 mac和windows/linux暂时没加支持,支持也简单,就是没时间 |
| 49 | + |
| 50 | +1. 去官网下载command-line-tools工具,或者已经下了DevEco-Studio也可以,将HarmonyOS的SDK的路径映射到`~/.konan/`目录下,没有这个目录就创建,最终的目录像这样 |
| 51 | +`/Users/用户名/.konan/HarmonyOS-NEXT-DB1` |
| 52 | + |
| 53 | +2. 解压`kotlin-native-prebuilt-macos-aarch64-2.1.255-SNAPSHOT.tar.gz`文件到`~/.konan/`目录下,最终的目录像这样 |
| 54 | +`/Users/用户名/.konan/kotlin-native-prebuilt-macos-aarch64-2.1.255-SNAPSHOT` |
| 55 | + |
| 56 | +4. 新建KMP Library工程,在`settings.gradle`仓库添加本地仓库地址,解压repo仓库,比如解压到Download文件夹了,那么就是 |
| 57 | + |
| 58 | +``` |
| 59 | +pluginManagement { |
| 60 | + repositories { |
| 61 | + maven { |
| 62 | + url = uri("/Users/用户名/Downloads/repo") |
| 63 | + } |
| 64 | + mavenLocal() |
| 65 | + google() |
| 66 | + gradlePluginPortal() |
| 67 | + mavenCentral() |
| 68 | + } |
| 69 | +} |
| 70 | +
|
| 71 | +dependencyResolutionManagement { |
| 72 | + repositories { |
| 73 | + maven { |
| 74 | + url = uri("/Users/用户名/Downloads/repo") |
| 75 | + } |
| 76 | + mavenLocal() |
| 77 | + google() |
| 78 | + mavenCentral() |
| 79 | + } |
| 80 | +} |
| 81 | +``` |
| 82 | + |
| 83 | +3. 修改依赖版本,改成本地的snapshot版本 |
| 84 | +``` |
| 85 | +[versions] |
| 86 | +kotlin = "2.1.255-SNAPSHOT" |
| 87 | +kotlinxCoroutinesCore = "1.9.0-RC.2-SNAPSHOT" |
| 88 | +kotlinxDatetime = "0.6.1-SNAPSHOT" |
| 89 | +kotlinxIo = "0.6.0-SNAPSHOT" |
| 90 | +kotlinxSerialization = "1.7.3-SNAPSHOT" |
| 91 | +atomicfu = "0.25.0-SNAPSHOT"` |
| 92 | +
|
| 93 | +[libraries] |
| 94 | +kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinxCoroutinesCore" } |
| 95 | +kotlinx-io-core = { module = "org.jetbrains.kotlinx:kotlinx-io-core", version.ref = "kotlinxIo" } |
| 96 | +kotlinx-io-bytestring = { module = "org.jetbrains.kotlinx:kotlinx-io-bytestring", version.ref = "kotlinxIo" } |
| 97 | +kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinxDatetime" } |
| 98 | +kotlinx-serialization-core = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version.ref = "kotlinxSerialization" } |
| 99 | +kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerialization" } |
| 100 | +kotlin-atomicfu = { module = "org.jetbrains.kotlinx:atomicfu", version.ref = "atomicfu" } |
| 101 | +androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } |
| 102 | +``` |
| 103 | + |
| 104 | +4. shared模块build.gradle中添加harmonyOS target,如 |
| 105 | +``` |
| 106 | + harmonyOSArm64 { |
| 107 | + binaries.sharedLib { |
| 108 | + baseName = "hellokt" |
| 109 | + } |
| 110 | + } |
| 111 | +``` |
| 112 | + |
| 113 | +5. 在gradle task里构建,或者命令: |
| 114 | +``` |
| 115 | +./gradlew shared:linkHarmonyOSArm64 |
| 116 | +``` |
| 117 | +Build成功的话,在shared/build/bin/harmonyOSArm64目录下会出现so文件和.h文件,可以在arkts中通过npai直接调用 |
| 118 | + |
| 119 | +注意,由于kotlin cinterop的要求,宿主机需要安装aarch64的Azul Zulu JDK8,详细可以去kotlin官方仓库查看 |
| 120 | + |
| 121 | +### 编译第三方库 |
| 122 | + 。。。 |
0 commit comments