EAS 构建
主要指令
//登录
eas login
//关联本地expo项目到EAS
eas init
//init后eas-cli在app.json中添加以下信息
"extra": {
"router": {},
"eas": {
"projectId": "26c57684-5321-43c5-99d1-4d723929718e"
}
},
"owner": "devin"
}
//开发构建所需要的安装包
npx expo install expo-dev-client
//结果:"expo-dev-client": "~x.x.x" will be added into package.json
// 初始化构建配置信息,运行后创建eas.json保存构建配置
eas build:configure
//查看eas.json中不同的构建profile
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"distribution": "internal"
},
"production": {
"autoIncrement": true
}
},
//构建时输入构建参数,使用开发构建
eas build --platform android --profile development
//使用预览构建,得到apk文件
eas build --platform android --profile preview
//使用生产构建
eas build --platform android --profile producion
//使用EAS本地构建,要求linux或者Mac操作系统
eas build --platform android - --local
帮助指令
//查看当前eas版本
eas --version
// 示例输出:eas-cli/16.15.0 win32-x64 node-v22.14.0
//安装eas-cli
npm install -g eas-cli
//查看当前用户
eas whoami
//新建和查看keystore
eas credentials
//查看当前项目信息
eas project:info
//查看当前用户和项目的构建列表
eas build:list
在WSL上EAS本地构建网络问题
request to <https://api.expo.dev/graphql> failed, reason:
本地gradle构建[1]
前提条件
-
jdk
-
Android studio
-
ndk
-
其他相关SDK
-
-
gradle
1 准备keystore
keystore 是安装包的安全签名,向应用商店提交时需要,只需要创建一次
//生成android目录
npx expo prebuild -p android
//生成和移动keystore
keytool -genkeypair -v -storetype PKCS12 -keystore my.keystore -alias release-key -storepass android -keypass android -keyalg RSA -keysize 2048 -validity 10000
mv my-upload-key.keystore /directory/to/android/app
2 更新gradle配置(android/gradle.properties)
MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=android
MYAPP_UPLOAD_KEY_PASSWORD=android
3 更新签名配置(android/app/build.gradle)
signingConfigs {
//添加release部分
release {
if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
storeFile file(MYAPP_UPLOAD_STORE_FILE)
storePassword MYAPP_UPLOAD_STORE_PASSWORD
keyAlias MYAPP_UPLOAD_KEY_ALIAS
keyPassword MYAPP_UPLOAD_KEY_PASSWORD
}
}
debug {
storeFile file('debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
}
4 开始构建
cd android
//获取apk文件
./gradlew assembleRelease
//获取aab文件(可选)
./gradlew app:bundleRelease
输出文件位置:android\app\build\outputs\apk\release\app-release.apk
本地构建常见问题
1.OOM内存不足
Error occurred during initialization of VM,Could not reserve enough space for 2097152KB object heap
编辑testbuild\android\gradle.properties,降低vm内存要求
org.gradle.jvmargs=-Xmx512m -XX:MaxMetaspaceSize=256m
2.NDK问题, 缺失NDK/版本不对/找不到 source.properties file
NDK at C:\Users\MSI-NB\AppData\Local\Android\Sdk\ndk\27.1.12297006 did not have a source.properties file
- 确认安装ndk

- 对NDK进行升降级
* 配置文件(android\app\build.gradle)中直接指定现有ndk版本[3]
...
android {
ndkVersion "26.0.10792818"
...
}
3依赖下载网络问题
配置镜像地址[4]
4 Task : react-native-reanimated FAILED
> Task :react-native-reanimated:buildCMakeRelWithDebInfo[arm64-v8a][reanimated,worklets] FAILED
C/C++: ninja: error: mkdir(src/main/cpp/worklets/CMakeFiles/worklets.dir/C_/Users/MSI-NB/Desktop/code/react/testbuild/testbuild/node_modules/react-native-reanimated): No such file or directory
...
可能的原因[5]:
-
版本兼容问题
-
文件夹路径名太长导致创建失败
解决:
- 将项目移动到短路径的根目录
参考资料
[1] https://docs.expo.dev/guides/local-app-production/
[2] https://sunshj.top/articles/expo-local-app-prod
[4] https://zhuanlan.zhihu.com/p/27276225044
启示
本地win11机器上gradle构建有概率OOM,推荐EAS构建或者其他云端构建