跳到主要内容
版本:dev

Android 支持

Apache Fory Kotlin 支持 Kotlin/JVM 和 Android。Android 支持建立在现有 Fory Java 运行时以及 fory-kotlin 提供的 Kotlin 运行时序列化器之上。Kotlin schema 序列化器由 fory-kotlin-ksp 在构建时生成。

本页说明 Android 设置和 release 构建约束。Kotlin KSP 序列化器模型本身请参见 静态生成序列化器。如果你的 Android 项目也包含 Java @ForyStruct 类,请使用 Java 静态生成序列化器中记录的 Java 注解处理器。

依赖

fory-kotlin 添加到使用 Fory 的 Android 模块。将 fory-kotlin-ksp 添加到 编译 Kotlin @ForyStruct 模型类的模块。

plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("com.google.devtools.ksp")
}

dependencies {
implementation("org.apache.fory:fory-kotlin:<fory-version>")
ksp("org.apache.fory:fory-kotlin-ksp:<fory-version>")
}

对于 Android 库模块,请在拥有这些带注解 Kotlin 类的库模块中应用 KSP。生成的 序列化器和生成的 consumer R8 规则必须随该库产物一起打包。

运行时设置

使用 ForyKotlin.builder().withXlang(true) 创建运行时,然后通过 Kotlin register<T> 扩展或普通 Fory Java 注册 API 注册应用类。

import org.apache.fory.kotlin.ForyKotlin
import org.apache.fory.kotlin.register

val fory = ForyKotlin.builder()
.withXlang(true)
.requireClassRegistration(true)
.build()

fory.register<User>("example", "User")

不要在应用代码中引用生成的序列化器类。运行时会从已注册的目标类解析生成的 序列化器。

Xlang Schema 模式

参与 Fory 跨语言 schema 序列化的 Android Kotlin 结构体应使用 KSP 生成序列化器。 生成序列化器会避免把运行时反射作为 Kotlin schema 元数据来源,并调用与其他 生成序列化器相同的 Fory Java 运行时基础设施。

Kotlin KSP 生成序列化器只用于 xlang/schema 序列化。它们不会替代 Java 原生对象 序列化器,也不会保留具体 JVM 集合实现身份。例如,Kotlin List<String> 字段的 schema 是 list<string>;反序列化只保证得到的值可以赋给声明的字段类型。

Minified Release 构建

请使用 minified release 构建验证 Fory Android 行为。Debug 构建不能证明生成的 序列化器、生成的构造函数入口点或 Kotlin 元数据能在 R8 后保留下来。

KSP 会在 META-INF/proguard/ 下输出生成的 consumer R8/ProGuard 规则,用于 Fory 所需的生成序列化器构造函数和 Kotlin 元数据。Android 应用不应需要为生成的 Kotlin 序列化器手写宽泛 keep 规则。如果自定义打包设置丢弃了生成的 META-INF/proguard/ 资源,应修复打包路径,而不是为每个生成序列化器添加宽泛 keep 规则。

Apache Fory 仓库通过 integration_tests/android_tests 验证这条路径,其中包括 release-minified instrumented tests。

Android 应用中的 Java 模型

Kotlin KSP 只处理 Kotlin 源码。如果 Android 应用包含带 @ForyStruct 注解的 Java 类,请为这些 Java 源码配置 Java fory-annotation-processor

当 Java 模型类在嵌套类型上使用 Fory 类型使用位置注解(例如 List<@UInt8Type Integer>)时,静态生成的 Java 序列化器在 Android 上也很重要。 这条路径请参见 Java 静态生成序列化器

不支持的目标

fory-kotlinfory-kotlin-ksp 只面向 Kotlin/JVM 和 Android。不支持 Kotlin/Native 和 Kotlin/JS。