KSP 生成 OHOS NAPI 代码

Kotlin/Native 适配鸿蒙,除了改编译器,还有一块很重要:NAPI 桥接代码的自动生成

Kotlin/Native 和 NAPI 的关系

  • Kotlin/Native 的产物是平台二进制,在 OHOS 上就是 Linux ELF。
  • OHOS 上层用 ArkTS 开发,要调 so 里的逻辑,需要一层类似 JNI 的桥,用的就是 Node.js 那套 NAPI
  • 所以「从 ArkTS 调 Kotlin/Native」= 自己写一层 NAPI 桥。

一、为什么需要自动生成 NAPI

先看一个最简例子:K/N 里有个 hello_world(),要在 ArkTS 里调用,就要在 C++ 里注册 NAPI:

2024提前总结

为什么选这个奇怪的时间写下这篇文章呢?因为我终于确定了一个 offer 了!(当然后续可能也有幺蛾子,比如小米 offer call 以后,又说没有 hc,雷总……你们招人也太奇怪了……)。然后,这段时间的经历实在让我脑壳子嗡嗡的,又做了一次人生的错误决定来到传说中的宇宙条,不过人生的魔抗叠厚了不少……

ASM 和 JVM 关联知识

背景

最近做日志治理(其实也没啥治理的),发现日志存活时间很短,因为各个业务方的日志汇总在一个实例里,有任何无用日志频繁打印,都会把日志覆盖掉

那其实,治理的办法也很简单:

LearnJVM 有趣的发现

为了兑现自己立下的 flag 🤣,这两天刚好假期前,继续实现 JVM

打算定个小目标:每个月更新一次 LearnJVM 这个项目

第五章的指令好多好多,所以还在不断地 copy & paste

实现的途中发现了 ICONST_X 指令很有意思,如下图:

LearnJVM 重启

虽然今天是愚人节,但是还是要立下 flag,重启 JVM 项目

之前,一方面想学习 rust,一方面也想更深入的理解 JVM,于是这么一个项目就诞生了

源码来自 《自己动手写Java虚拟机》,我将 go 翻译为 rust(但是因为很多 rust 概念刚接触,写的结构很凌乱,也都不是最佳实践,只求编译通过)

maven publish dependency

​今天 pull 工程,发现有个库的源码看不到,在 gradle external libraries 中也找不到,只能找到一个 api 接口层的代码

于是,就研究了一下原因

pom 文件

我们在向 maven 发布 aar 时,会生成对应的 pom 文件,告诉我们具体依赖哪些额外 lib

Kotlin/Native

最近 KMP 或者说 KMM 在移动端挺火,我非常好奇它是如何跨端的

看了一下官方文档,只知道是通过 LLVM 把 Kotlin 转为 IR 再转为目标平台二进制。这部分我目前还没去分析,因为 LLVM 相关的知识我实在知之甚少,后面也会去补足

fp unwind

为了公司内部写一篇软文,所以这篇文章重写了一下~~

正文

今天给大家分享一种 arm64 平台下栈回溯的方式 —— fp(frame pointer) 回溯,同时会介绍一些基础概念和实现原理

首先,我们需要知道栈回溯是做什么的?
其实就是用于获取当前 thread 的调用堆栈的