428 字
2 分钟
安卓SDK封装笔记

安卓SDK封装笔记#

Go 项目生成 Android SDK (AAR) 并在 Kotlin 调用#

  1. 安装 gomobile
go install golang.org/x/mobile/cmd/gomobile@latest
go install golang.org/x/mobile/cmd/gobind@latest
gomobile init
  1. 安装安卓 NDK r29以上的版本 https://developer.android.com/ndk/downloads?hl=zh-cn

会自动满足16kb对齐的要求

  1. 生成 AAR
gomobile bind -v -target=android -androidapi 24 -trimpath -ldflags="-s -w -buildid=" -o mylib.aar ./
  1. 封装安卓SDK大致思路
  • GO 语言中导出函数的公开接口需要首字母为大写
  • 一般只需暴露 Go 项目的启动、停止、重启、日志、生命周期等函数接口即可
  • gobind 将 Go 名称直接转换为 Java 方法名,会遵循 Java 命名规范,也就是首字母是小写,调用方需要注意
  • 默认会生成一个多种架构的通用 AAR,里面会包含所有 Go 支持的多种架构,只需在业务端打包时拆分ABI即可

Rust 使用 uniffi 将项目打包为 Android AAR#

大致思路#

接口声明 → 工具生成绑定 → 标准 NDK 编译 → 打包,避免手写 JNI 胶水代码。

  • 原项目代码零修改
  • 包装项目只写接口转发,不写业务
  • 和 Go gomobile bind 思路完全一致

步骤#

  1. Rust 侧暴露接口

    • #[uniffi::export] 宏标注要公开的函数/类型
    • 或编写一个 UDL 文件描述接口
    • Cargo.toml 中设置 crate-type = ["cdylib"] 并添加 uniffi 依赖
  2. 生成 Kotlin 绑定

    • uniffi-bindgen 命令行工具
    • 根据上一步的接口定义自动生成 Kotlin 调用代码
  3. 编译原生 .so

    • 使用 cargo-ndk 编译出 arm64-v8a 等架构的 .so 动态库
  4. 在 Android 项目中集成

    • 将生成的 Kotlin 文件和 .so 文件放入 Android 项目目录
    • 或通过 Gradle 插件实现自动化

C 和 C++ 相关文档#

https://android-docs.cn/studio/projects/add-native-code

安卓SDK封装笔记
https://blog.emohe.cn/posts/安卓sdk封装/
作者
阿涛の小破站
发布于
2026-07-09
许可协议
CC BY-NC-SA 4.0