初次尝试用 Reactive Native 尝试手机开发,简单记录一下
官方推荐的是使用 Expo 框架进行 RN 开发,Expo 提供了很强的开发工具,能够让 App 的开发过程变得更方便,这里就不在赘述了。
我的 node 版本:
$ node -v
v20.19.6
项目脚手架:
$ npx create-expo-app@latest
该命令可以快速创建一个基于 expo 的 reactive native 项目。
官方提供两种开发方式:
我选择了 development build 这种方式。
首先在 Expo 注册一个账号,注意账号名不要包含特殊符号,否则开发时可能会出现莫名其妙的问题,建议只用字母。
安装 EAS CLI:
$ npm install -g eas-cli
使用提前注册好的 Expo 账号在终端登录 :
$ eas login
配置项目:
$ eas build:configure
Expo 有一个后台专门负责管理 app 的,所以本地项目需要配置,配置后可以利用 Expo 服务提供的能力,比如手机远程调试预览项目,Expo 云端构建 app 等等
创建 Build,下面的命令会通过 Expo 云端构建一个安卓 app 的包,可以登录账号查看 build 记录。
$ eas build --platform android --profile development
Expo 的 EAS Build (免费版) 需要排队,比较恶心,但是能够理解公司,毕竟需要占用服务端的资源。

可以选择升级到 Expo 的付费计划(Production Plan,每月 $29 起)。这将让你进入优先队列,通常几秒钟内就能开始构建。也可以选择本地构建:
eas build --local --platform android
# 或者
eas build --local --platform ios
构建 Android 需要安装 Android Studio 和 JDK 构建 IOS 需要你有 mac 电脑并安装 Xcode
安装 Build,build 完成后,终端会显示一个 QRCode,用手机扫描后打开网页,下载安装包 .apk 文件,进行安装。
在 Expo 后台可以看到 build 记录

安装 Apk 后,在项目终端启动服务:
$ npx expo start
...
› Metro waiting on
exp+onsketch://expo-development-client/?url=https%3A%2F%2Fmwikwww-fangyann-8081.exp.direct
› Scan the QR code above to open the project in a development build. Learn more:
exp+onsketch://expo-development-client/?url=https%3A%2F%2Fmwikwww-fangyann-8081.exp.direct
› Scan the QR code above to open the project in a development build. Learn more:
https://expo.fyi/start
› Web is waiting on http://localhost:8081
› Using development build
› Press s │ switch to Expo Go
› Press a │ open Android
› Press w │ open web
› Press j │ open debugger
› Press r │ reload app
› Press m │ toggle menu
› shift+m │ more tools
› Press o │ open project code in your editor
› Press ? │ show all commands
启动后,终端会显示一个 QRCode,使用 Expo Go 扫描即可打开 app 进行调试。
这个命令需要手机设备和电脑在同一 wifi 下,
Expo 也支持 web 端 Web is waiting on http://localhost:8081,打开这个地址,就可以显示 App 了。

appId 是安卓应用在 google play 商店和安卓设备上的唯一身份标识,是 App 的身份证号码。
可以在 Expo 的 app.json 中配置,建议 ios.bundleIdentifier 和 android.package 保持一致。
{
"expo": {
"name": "我的应用名称",
"slug": "my-app-slug",
"version": "1.0.0",
"android": {
"package": "com.yourcompany.yourappname",
"versionCode": 1
},
"ios": {
"bundleIdentifier": "com.yourcompany.yourappname"
}
}
}
它的重要性:
versionCode 是安卓(Android)系统用来判断“哪个版本更新”的一个整数。它和我们在 App Store 看到的“1.0.0”这种版本号不一样。
安卓应用有两个关于“版本”的字段,version 和 versionCode。
version (或 versionName):
versionCode:
首次使用 EAS(Expo 云端构建服务)构建时,在云端没有找到项目的历史版本记录,EAS 为了方便管理,会自动接管这个号码,默认从 1 开始计数。以后当你再次运行 eas build 时,EAS 会自动把这个数字变成 2,下次变成 3,以此类推。这样就不用每次都手动去 app.json 里修改它了,非常方便。
Keystore(密钥库)是一款 APP 的“身份证”和“私章”。它是 Android 开发中非常关键的一个文件(通常以 .jks 或 .keystore 结尾),主要有两个作用。
当你的 APP 发布到应用商店(如 Google Play)或者是安装到手机上时,安卓系统会检查这个 Keystore。
Keystore 会对你的代码包(APK 或 AAB)进行数字签名。这就像是在文件上盖了一个私章,证明“这个 APP 是原厂出品,中间没有被篡改过”。
在进行 Expo 项目配置时,EAS CLI 会提问:Generate a new Android Keystore?
如果是新的项目。
如果我们是在接受旧项目/迁移项目
在 build 时遇到了云端构建需要等待 20 分钟。
遇到这个问题,我们不必等着,关闭终端窗口并不会终止 build,仅仅是断开了你本地终端与 Expo 云端服务器的日志连接,云端的构建任务(包括排队状态)依然会在 Expo 的服务器上继续进行。
在 google play 上下载 Expo Go 后,扫描 Expo Go 二维码提示:" This project requires a newer version of Expo Go。"
表示从 google play 上安装的 Expo Go 版本过低:项目用的 Expo SDK 版本太新了,商店里的 Expo Go 还没来得及更新支持它。
建议直接从官网下载最新版:expo.dev/tools
(完)