Skip to content

原生能力

运行环境边界

能力Expo GoDevelopment build本地原生工程
Expo Go 已内置模块支持支持支持
带原生代码的第三方库受限支持支持
Config Plugin不能改变 Expo Go支持支持
自定义 Swift/Kotlin不支持支持支持
直接修改原生工程不支持可选支持

JavaScript 依赖通常只需重新启动 Metro;增加原生库、修改权限、Config Plugin 或原生代码后,必须重新构建 development build。

安装原生库

bash
npx expo install package-name

安装前应确认:

  • 是否支持当前 Expo SDK 和 React Native 版本;
  • 是否包含 Config Plugin;
  • Android 与 iOS 是否都支持;
  • 是否需要权限、系统能力或额外原生配置;
  • 是否能在 Expo Go 中运行,还是必须使用 development build。

Config Plugin

Config Plugin 在 Prebuild 阶段修改 Android 和 iOS 工程。插件配置通常位于应用配置中:

json
{
  "expo": {
    "plugins": [
      [
        "expo-camera",
        {
          "cameraPermission": "允许应用使用相机"
        }
      ]
    ]
  }
}

配置变更不会由 Metro 热更新应用到已安装客户端,必须重新生成或构建原生应用。

Prebuild 与 CNG

bash
npx expo prebuild
npx expo prebuild --clean

Prebuild 根据应用配置和 Config Plugin 生成 androidios--clean 会删除并重新生成原生目录,只适用于原生目录可重建且没有未迁移的手工修改时。

Continuous Native Generation 模式通常不提交原生目录,配置变化通过应用配置与插件表达。若团队决定直接维护原生目录,则应提交这些文件并按普通 Android/iOS 工程管理。

自定义 Expo Module

应用需要自定义 Swift、Kotlin 或原生 View 时,可以创建本地 Expo Module:

bash
npx create-expo-module@latest --local

本地模块只服务当前应用;需要跨项目共享或发布到 npm 时,使用独立模块。原生模块应提供清晰的异步边界、错误类型和平台能力检测。

权限

权限分为构建时声明和运行时请求:

  • 应用配置或 Config Plugin 声明系统用途与权限描述;
  • 业务代码在真正使用能力前请求运行时权限;
  • 拒绝、永久拒绝和系统不支持必须分别处理;
  • 权限文案应说明具体用途,不应在应用启动时批量请求无关权限。

参考资料

基于 MIT 许可发布