Devin
发布于 2025-07-25 / 4 阅读
0
0

expo构建打包

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

![image.png](https://note.youdao.com/yws/res/4/WEBRESOURCE0adbe613b2c7b1d338fd3d256b2c4524)

  • 对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

[3] https://stackoverflow.com/questions/64372383/ndk-at-library-android-sdk-ndk-bundle-did-not-have-a-source-properties-file

[4] https://zhuanlan.zhihu.com/p/27276225044

[5] https://docs.swmansion.com/react-native-reanimated/docs/guides/building-on-windows/#-use-appropriate-version-of-android-ndk

启示

本地win11机器上gradle构建有概率OOM,推荐EAS构建或者其他云端构建


评论