主题
原生能力
运行环境边界
| 能力 | Expo Go | Development 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 --cleanPrebuild 根据应用配置和 Config Plugin 生成 android、ios。--clean 会删除并重新生成原生目录,只适用于原生目录可重建且没有未迁移的手工修改时。
Continuous Native Generation 模式通常不提交原生目录,配置变化通过应用配置与插件表达。若团队决定直接维护原生目录,则应提交这些文件并按普通 Android/iOS 工程管理。
自定义 Expo Module
应用需要自定义 Swift、Kotlin 或原生 View 时,可以创建本地 Expo Module:
bash
npx create-expo-module@latest --local本地模块只服务当前应用;需要跨项目共享或发布到 npm 时,使用独立模块。原生模块应提供清晰的异步边界、错误类型和平台能力检测。
权限
权限分为构建时声明和运行时请求:
- 应用配置或 Config Plugin 声明系统用途与权限描述;
- 业务代码在真正使用能力前请求运行时权限;
- 拒绝、永久拒绝和系统不支持必须分别处理;
- 权限文案应说明具体用途,不应在应用启动时批量请求无关权限。
