在 Android 上使用 Compose Multiplatform 的 Skia(Skiko)版本。
项目名称源自于魔法少女ノ魔女裁判中的角色二階堂ヒロ
- 使得更低版本的安卓设备(API 24+)都尽可使用 GPU 渲染与 SkSl 的 Shader,弥补低版本安卓设备没办法吃上特殊效果(如液态玻璃、华丽质感材料)的缺憾。
- 这使得您(样式创建者)只需要提供一套适用于
skiko或desktop(继承自skiko)的样式(SkSl Shader等),无需另外改动您的库或提供 AndroidX(AGSL)的版本,即可通过让他们(样式使用者)在安卓上套用完整的效果。
- 由于这走的是 Skia,打包相应的
.so(动态共享库)不可避,这将导致您的安装包增大 20MB 左右。 - 目前接入体系尚不完善,在一些较冷门的使用场景可能有 Bug/Todo,且性能未必最优。
- Hiro Skia:对 Skia(Skiko)的打包,在安卓上提供
SkiaLayer和SkiaSurfaceView。这也是 Hiro Compose 的根基。 - Hiro Compose:对 Compose Multiplatform 的 UI/Runtime/Foundation 等的 Skia(Skiko)/Desktop(即 Jvm)进行打包,并补齐了在安卓上的体验(接入各种事件,并提供 HiroComposeView等)。
- Hiro Material 3:对 Compose Multiplatform 的 Material 3 的 Skia(Skiko)/Desktop(即 Jvm)的打包与体验补齐。
- Hiro Gradle Plugin:帮助用户实现无感对第三方 Compose 包的 Skia(Skiko)/Desktop 模块转用( Android 转用 Skia(Skiko)/Desktop,并阻断对 AndroidX Compose / Compose Multiplatform 的 Android 的依赖引入)。
- Examples,几个使用例:普通 Hiro Compose、Hiro Compose Material 3、Hiro Compose + 第三方包。
- 创建一个标准的 Android 项目。
- 配置 Maven 仓库:在项目根目录的
settings.gradle.kts文件中进行以下配置: 在pluginManagement和dependencyResolutionManagement的repositories块中均添加我的仓库:在maven("https://earzuchan.github.io/Maven/") // 注意:请确保“Maven”中的字母“M”为大写
dependencyResolutionManagement的repositories块中再添加 JetBrains Compose Dev 的仓库:maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") - 应用 Gradle 插件:在根目录
build.gradle.kts文件的plugins块中添加:在您的 Android 模块的id("me.earzuchan.hiro") version "<VERSION>" apply false
build.gradle.kts文件的plugins块中添加:id("me.earzuchan.hiro") - 添加依赖:在您的 Android 模块的
build.gradle.kts文件的dependencies块中添加:关于其他模块的说明:implementation("me.earzuchan.hiro:compose:<VERSION>")- Hiro Skia:
hiro:compose内部使用了hiro:skia,但未将其 API 显式暴露给您的项目。如需直接访问 Skia API(高级用法),须显式添加该依赖。 - Hiro Material 3:Material 3 组件未捆绑在
hiro:compose中。如需使用它们,须添加此模块。
// 仅在需要时添加: implementation("me.earzuchan.hiro:skia:<VERSION>") // 用于直接调用 Hiro Skia API implementation("me.earzuchan.hiro:material-3:<VERSION>") // 用于使用 Material 3 组件
- Hiro Skia:
- 使用方法:在您的 Activity 中导入
me.earzuchan.hiro.compose.setHiroComposeContent,然后在onCreate中使用:setHiroComposeContent { // Compose 内容 }
- 上游更新与依赖关系:本项目的 Compose 和 Skiko 内部上游依赖会随 Compose Multiplatform(CMP)的主要稳定版本一同更新。此外,当使用 Hiro Compose 或 Hiro Material 3 时,您无需引入官方(原始)的Compose 依赖项(无论是 AndroidX 还是 CMP)。这能确保所有 Compose 内容都基于我们特定的类路径(Hiro 独家的 Android Compose Skiko)进行解析。我们的 Hiro Gradle 插件(HGP)也会帮您使您和您的依赖不额外引入原版 Compose。
- Material 3 水波纹复刻:我们根据 AOSP Material 3 水波纹动画的底层原理,为 Compose Skiko 复刻该效果。这使得在低版本 Android、魔改 ROM 上也能有一致的 Material 3 水波纹体验。这个复刻已内含在 Hiro Material 3 中,我们或许之后会另外贡献给上游CMP
- JNI 修复:我们修复了 JetBrains Skiko Android 原生库中存在的
JNI Critical Section Violation: using JNI after critical get问题。Hiro Skia 也已含有我们修复后构建的本机库(x64 和 Arm64)。我们或许之后会另外贡献给上游仓库 - Hiro Skia 的局限性:Hiro Skia 基本上是为 Hiro Compose 打造的。我们没有直接依赖存在已知 Bug 的 JetBrains 官方 Android 示例,而是实现了一套轻量级的 Skia 的 Layer 和 SurfaceView,对于 Hiro Compose 的显示是基本够用,而独立的 Skia 承载用途,则未经深度测试
参见我的待办项。
- 基于 MIT 协议开源,若对您有帮助,请 Star
- 在开发过程中使用了 OpenAI Codex 等人工智能辅助
- 是实验性质的,我不作任何生产环境可用性保证,请您自行评估是否取用于生产环境,使用风险需自行承担
- 仍在持续优化中,为尽力给您提供“能用、可用”的体验
