百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Expo SDK 53.0.7 的 超详细 app.json 和 eas.json 配置项说明

liuian 2025-06-09 23:33 62 浏览

以下是针对 Expo SDK 53.0.7超详细 app.jsoneas.json 配置项说明,包含所有可能的配置项和实际用例:


app.json 完整配置手册(Expo SDK 53)

{
  "expo": {
    // ========== 基础配置 ==========
    "name": "MyApp",                      // 应用名称(必填,显示在设备桌面)
    "slug": "my-app",                     // URL 标识符(必填,用于 expo publish)
    "owner": "your-username",             // 组织/个人账户名(多账户管理时需指定)
    "version": "1.0.0",                   // 用户可见版本号(语义化版本)
    "runtimeVersion": {
      "policy": "appVersion"              // OTA 更新策略 [sdkVersion|appVersion|nativeVersion]
    },
    "orientation": "portrait",            // 屏幕方向 [portrait|landscape|default]
    "privacy": "public",                  // 隐私设置 [public|unlisted|hidden]
    "platforms": ["ios", "android", "web"], // 目标平台

    // ========== 图标与界面 ==========
    "icon": "./assets/icon.png",          // 主图标(1024x1024 PNG,必填)
    "backgroundColor": "#ffffff",         // 通用背景色(用于启动屏过渡)
    "splash": {
      "image": "./assets/splash.png",     // 启动图(1242x2436 PNG)
      "resizeMode": "contain",            // [contain|cover|native]
      "backgroundColor": "#ffffff",       // 启动屏背景色
      "tabletImage": "./assets/splash-tablet.png" // iPad 专用启动图
    },
    "androidNavigationBar": {             // Android 导航栏配置
      "visible": "immersive",             // [leanback|immersive|sticky-immersive]
      "backgroundColor": "#000000"
    },

    // ========== Android 专属配置 ==========
    "android": {
      "package": "com.yourcompany.app",   // 包名(必填,反向域名格式)
      "versionCode": 1,                   // 整数版本号(每次提交递增)
      "adaptiveIcon": {                   // Android 8+ 自适应图标(必填)
        "foregroundImage": "./assets/adaptive-icon.png", // 前景图(108x108)
        "backgroundImage": "./assets/adaptive-bg.png",  // 背景图(可选)
        "backgroundColor": "#FFFFFF"      // 或纯色背景
      },
      "permissions": [                   // 精确权限控制(空数组表示不请求任何权限)
        "CAMERA",
        "android.permission.ACCESS_FINE_LOCATION",
        "RECORD_AUDIO"
      ],
      "blockedPermissions": [             // 显式屏蔽的权限
        "android.permission.READ_CONTACTS"
      ],
      "intentFilters": [                  // 深度链接配置
        {
          "action": "VIEW",
          "data": [
            {
              "scheme": "https",
              "host": "*.yourdomain.com",
              "pathPrefix": "/users"
            },
            {
              "scheme": "myapp",
              "host": "profile"
            }
          ],
          "category": ["BROWSABLE", "DEFAULT"]
        }
      ],
      "softwareKeyboardLayoutMode": "resize", // 键盘弹出行为 [resize|pan]
      "config": {
        "googleMaps": {                   // Google Maps API 配置
          "apiKey": "YOUR_GOOGLE_MAPS_KEY"
        }
      }
    },

    // ========== iOS 专属配置 ==========
    "ios": {
      "bundleIdentifier": "com.yourcompany.app", // Bundle ID(必填)
      "buildNumber": "1.0.0",             // 构建版本号(字符串)
      "supportsTablet": true,             // 是否支持 iPad
      "requireFullScreen": false,         // 是否强制全屏(iPad 多任务)
      "infoPlist": {                      // 自定义 Info.plist
        "NSLocationWhenInUseUsageDescription": "需要位置权限提供导航服务",
        "UIBackgroundModes": ["location", "fetch"],
        "ITSAppUsesNonExemptEncryption": false // 加密合规声明
      },
      "config": {
        "usesNonExemptEncryption": false, // 加密合规性
        "googleMapsApiKey": "YOUR_IOS_MAPS_KEY"
      },
      "entitlements": {                   // 特殊能力配置
        "aps-environment": "development", // 推送环境 [development|production]
        "com.apple.developer.networking.wifi-info": true
      },
      "usesAppleSignIn": true             // 是否启用 Apple 登录
    },

    // ========== Web 配置 ==========
    "web": {
      "favicon": "./assets/favicon.png",  // 网站图标(16x16 或 32x32 PNG)
      "bundler": "metro",                // 打包工具 [metro|webpack]
      "output": "static",                // 导出模式 [single|static]
      "lang": "en-US",                   // 默认语言
      "themeColor": "#ffffff",           // PWA 主题色
      "serviceWorker": {                 // PWA 配置
        "src": "./service-worker.js",
        "scope": "/",
        "useCache": true
      }
    },

    // ========== 插件配置 ==========
    "plugins": [
      "expo-camera",                     // 简单插件
      ["expo-notifications", {           // 带配置的插件
        "icon": "./assets/notif-icon.png",
        "color": "#ff0000",
        "sounds": ["./assets/notif-sound.wav"]
      }],
      ["expo-build-properties", {        // 原生构建配置覆盖
        "android": {
          "compileSdkVersion": 31,
          "targetSdkVersion": 31,
          "buildToolsVersion": "31.0.0"
        },
        "ios": {
          "deploymentTarget": "13.0"
        }
      }]
    ],

    // ========== 更新与资源 ==========
    "updates": {
      "enabled": true,                   // 是否启用 OTA
      "checkAutomatically": "ON_LOAD",   // [ON_LOAD|ON_ERROR_RECOVERY|WIFI_ONLY]
      "fallbackToCacheTimeout": 3000,    // 回退超时(毫秒)
      "url": "https://your-update-server.com" // 自定义更新服务器
    },
    "assetBundlePatterns": [             // 资源打包规则
      "**/*.png",
      "**/*.ttf",
      "fonts/**"
    ],

    // ========== 深度链接 ==========
    "scheme": "myapp",                   // 自定义协议 myapp://
    "detach": {                          // 分离模式配置(eject 时使用)
      "scheme": "detachedapp",
      "iosExpoViewUrl": "https://...",
      "androidExpoViewUrl": "https://..."
    },

    // ========== 额外配置 ==========
    "description": "应用描述(App Store/Play Store 展示)",
    "githubUrl": "https://github.com/your/repo",
    "primaryColor": "#6200ee",           // 主题色(Android 通知栏等)
    "extra": {                           // 自定义环境变量
      "apiUrl": "https://api.example.com",
      "encryptionKey": "@encryption_key" // 安全密钥(通过 app.config.js 注入)
    },
    "hooks": {                           // 构建钩子
      "postPublish": [
        {
          "file": "scripts/notify-slack.js",
          "config": {
            "channel": "#releases"
          }
        }
      ]
    }
  }
}

eas.json 完整配置手册

{
  "cli": {
    "version": ">= 3.0.0",              // 最低 EAS CLI 版本要求
    "promptToConfigurePushNotifications": true // 是否提示配置推送
  },
  "build": {
    // ===== 预设配置 =====
    "development": {
      "distribution": "internal",       // 分发类型 [internal|simulator|store]
      "developmentClient": true,        // 是否启用开发客户端
      "channel": "dev",                // 更新通道
      "env": {
        "API_URL": "https://dev.api.com"
      }
    },
    "preview": {
      "extends": "development",         // 继承其他配置
      "channel": "preview",
      "android": {
        "buildType": "apk"             // [apk|app-bundle]
      },
      "ios": {
        "simulator": true              // 是否构建模拟器版本
      }
    },
    "production": {
      "channel": "production",
      "distribution": "store",
      "releaseChannel": "prod-v1",
      "android": {
        "image": "ubuntu-18.04-android-30-ndk-r19c", // 构建镜像
        "buildType": "app-bundle",
        "gradleCommand": ":app:bundleRelease",
        "credentialsSource": "remote", // 凭证来源 [remote|local]
        "withoutCredentials": false
      },
      "ios": {
        "image": "macos-big-sur-11.4-xcode-12.5",
        "autoIncrement": "version",     // [version|buildNumber|none]
        "enterpriseProvisioning": "universal", // 企业证书类型
        "cache": {
          "key": "prod-{{ .Branch }}-{{ checksum "package-lock.json" }}",
          "paths": ["node_modules", "ios/Pods"]
        }
      },
      "env": {
        "API_URL": "https://prod.api.com",
        "FIREBASE_KEY": "@prod_firebase_key" // 安全变量
      }
    }
  },
  
  // ===== 提交配置 =====
  "submit": {
    "production": {
      "android": {
        "serviceAccount": "path/to/google-service-account.json",
        "track": "internal",           // [internal|alpha|beta|production|rollout]
        "releaseStatus": "completed",  // [draft|completed|halted|inProgress]
        "rolloutFraction": 0.25,      // 分阶段发布比例(0-1)
        "changesNotSentForReview": false // 是否跳过审核
      },
      "ios": {
        "appleId": "your@apple.id",
        "ascAppId": "1234567890",
        "appleTeamId": "ABCDEFGHIJ",
        "ascApiKeyPath": "path/to/AuthKey.p8",
        "ascApiKeyId": "KEY_ID",
        "ascApiKeyIssuerId": "ISSUER_ID",
        "appSpecificPassword": "@apple_app_password" // 双因素认证密码
      }
    }
  },
  
  // ===== 通用配置 =====
  "env": {                             // 全局环境变量
    "NODE_ENV": "production"
  },
  "experiments": {                     // 实验性功能
    "turboModules": true
  }
}

关键配置深度解析

1. Android 权限精细化控制

"android": {
  "permissions": [
    "CAMERA",
    "android.permission.ACCESS_BACKGROUND_LOCATION", // 精确指定权限
    {
      "name": "RECORD_AUDIO",
      "maxSdkVersion": 28 // 仅对 API 28 及以下设备请求
    }
  ],
  "blockedPermissions": [
    "android.permission.READ_EXTERNAL_STORAGE" // 显式屏蔽
  ]
}

2. iOS 后台模式配置

"ios": {
  "infoPlist": {
    "UIBackgroundModes": [
      "audio",           // 音频后台
      "location",        // 位置更新
      "fetch",           // 后台刷新
      "remote-notification" // 推送处理
    ],
    "NSPhotoLibraryAddUsageDescription": "需要保存图片到相册" // iOS 11+
  }
}

3. EAS 构建缓存优化

"cache": {
  "key": "{{ .OS }}-{{ .Branch }}-{{ checksum \"package-lock.json\" }}", // 动态缓存键
  "paths": [
    "node_modules",
    "android/.gradle",
    "ios/Pods",
    ".cache"
  ],
  "cacheDefaultPaths": false // 是否禁用默认缓存路径
}

4. 安全敏感变量处理

// 在 eas.json 中引用本地环境变量
"env": {
  "FIREBASE_KEY": "@firebase_prod_key" // 从 .env 或 eas secret 注入
}

// 终端命令添加密钥
eas secret:create --name firebase_prod_key --value your_key

5. 多环境配置策略

// app.config.js 动态配置
module.exports = ({ config }) => {
  const isProd = process.env.APP_ENV === "production";
  return {
    ...config,
    extra: {
      apiUrl: isProd ? "https://prod.api" : "https://dev.api",
      enableAnalytics: isProd
    },
    android: {
      ...config.android,
      versionCode: isProd ? 100 : 1
    }
  };
};

完整工作流示例

1. 开发构建

# 生成开发版 APK
eas build --platform android --profile development

# 启动开发服务器
expo start --dev-client

2. 生产发布

# 设置生产环境密钥
eas secret:create --name api_prod_key --value xyz123

# 构建并提交到商店
eas build --platform all --profile production
eas submit --platform ios --profile production

3. OTA 更新管理

# 发布更新到 production 通道
expo publish --release-channel prod-v1

# 回滚到指定版本
expo publish --release-channel prod-v1 --republish

SDK 53 特别注意事项

  1. React Native 兼容性
  2. // package.json 必须匹配
    "react-native": "0.63.4",
    "expo": "~53.0.7",
    "react": "16.13.1"
  3. 遗留配置迁移
  4. exp.jsonapp.json (SDK 53 已完全弃用旧格式)
  5. expo.ios.config.googleSignIn 已移至插件 expo-google-sign-in
  6. 弃用警告
  7. expo.assetBundlePatterns 中的 !**/*.mp4 语法已弃用,改用 android.packagingOptions

app.json根级配置

字段

类型

说明

示例

name

string

应用名称(显示在设备主屏幕)

"MyApp"

slug

string

URL 唯一标识(用于 OTA 更新和分享链接)

"my-app"

version

string

应用版本号(语义化版本)

"1.0.0"

orientation

string

屏幕方向:"portrait"(竖屏)、"landscape"(横屏)

"portrait"

icon

string

应用图标路径(推荐 1024×1024 PNG)

"./assets/icon.png"

splash

object

启动屏配置(含 imageresizeMode 等)

见下方示例

platforms

array

支持平台:["ios", "android", "web"]

["ios", "android"]

plugins

array

插件列表(如 ["expo-camera"]

["expo-location"]

extra

object

自定义环境变量(通过 expo-constants 访问)

{ "apiUrl": "https://api.example.com" }

相关推荐

驱动网卡(怎么从新驱动网卡)
驱动网卡(怎么从新驱动网卡)

网卡一般是指为电脑主机提供有线无线网络功能的适配器。而网卡驱动指的就是电脑连接识别这些网卡型号的桥梁。网卡只有打上了网卡驱动才能正常使用。并不是说所有的网卡一插到电脑上面就能进行数据传输了,他都需要里面芯片组的驱动文件才能支持他进行数据传输...

2026-01-30 00:37 liuian

win10更新助手装系统(微软win10更新助手)

1、点击首页“系统升级”的按钮,给出弹框,告诉用户需要上传IMEI码才能使用升级服务。同时给出同意和取消按钮。华为手机助手2、点击同意,则进入到“系统升级”功能华为手机助手华为手机助手3、在检测界面,...

windows11专业版密钥最新(windows11专业版激活码永久)

 Windows11专业版的正版密钥,我们是对windows的激活所必备的工具。该密钥我们可以通过微软商城或者通过计算机的硬件供应商去购买获得。获得了windows11专业版的正版密钥后,我...

手机删过的软件恢复(手机删除过的软件怎么恢复)
手机删过的软件恢复(手机删除过的软件怎么恢复)

操作步骤:1、首先,我们需要先打开手机。然后在许多图标中找到带有[文件管理]文本的图标,然后单击“文件管理”进入页面。2、进入页面后,我们将在顶部看到一行文本:手机,最新信息,文档,视频,图片,音乐,收藏,最后是我们正在寻找的[更多],单击...

2026-01-29 23:55 liuian

一键ghost手动备份系统步骤(一键ghost 备份)

  步骤1、首先把装有一键GHOST装系统的U盘插在电脑上,然后打开电脑马上按F2或DEL键入BIOS界面,然后就选择BOOT打USDHDD模式选择好,然后按F10键保存,电脑就会马上重启。  步骤...

怎么创建局域网(怎么创建局域网打游戏)

  1、购买路由器一台。进入路由器把dhcp功能打开  2、购买一台交换机。从路由器lan端口拉出一条网线查到交换机的任意一个端口上。  3、两台以上电脑。从交换机任意端口拉出网线插到电脑上(电脑设置...

精灵驱动器官方下载(精灵驱动手机版下载)

是的。驱动精灵是一款集驱动管理和硬件检测于一体的、专业级的驱动管理和维护工具。驱动精灵为用户提供驱动备份、恢复、安装、删除、在线更新等实用功能。1、全新驱动精灵2012引擎,大幅提升硬件和驱动辨识能力...

一键还原系统步骤(一键还原系统有哪些)

1、首先需要下载安装一下Windows一键还原程序,在安装程序窗口中,点击“下一步”,弹出“用户许可协议”窗口,选择“我同意该许可协议的条款”,并点击“下一步”。  2、在弹出的“准备安装”窗口中,可...

电脑加速器哪个好(电脑加速器哪款好)

我认为pp加速器最好用,飞速土豆太懒,急速酷六根本不工作。pp加速器什么网页都加速,太任劳任怨了!以上是个人观点,具体性能请自己试。ps:我家电脑性能很好。迅游加速盒子是可以加速电脑的。因为有过之...

任何u盘都可以做启动盘吗(u盘必须做成启动盘才能装系统吗)

是的,需要注意,U盘的大小要在4G以上,最好是8G以上,因为启动盘里面需要装系统,内存小的话,不能用来安装系统。内存卡或者U盘或者移动硬盘都可以用来做启动盘安装系统。普通的U盘就可以,不过最好U盘...

u盘怎么恢复文件(u盘文件恢复的方法)

开360安全卫士,点击上面的“功能大全”。点击文件恢复然后点击“数据”下的“文件恢复”功能。选择驱动接着选择需要恢复的驱动,选择接入的U盘。点击开始扫描选好就点击中间的“开始扫描”,开始扫描U盘数据。...

系统虚拟内存太低怎么办(系统虚拟内存占用过高什么原因)

1.检查系统虚拟内存使用情况,如果发现有大量的空闲内存,可以尝试释放一些不必要的进程,以释放内存空间。2.如果系统虚拟内存使用率较高,可以尝试增加系统虚拟内存的大小,以便更多的应用程序可以使用更多...

剪贴板权限设置方法(剪贴板访问权限)
剪贴板权限设置方法(剪贴板访问权限)

1、首先打开iphone手机,触碰并按住单词或图像直到显示选择选项。2、其次,然后选取“拷贝”或“剪贴板”。3、勾选需要的“权限”,最后选择开启,即可完成苹果剪贴板权限设置。仅参考1.打开苹果手机设置按钮,点击【通用】。2.点击【键盘】,再...

2026-01-29 21:37 liuian

平板系统重装大师(平板重装win系统)

如果你的平板开不了机,但可以连接上电脑,那就能好办,楼主下载安装个平板刷机王到你的个人电脑上,然后连接你的平板,平板刷机王会自动识别你的平板,平板刷机王上有你平板的我刷机包,楼主点击下载一个,下载完成...

联想官网售后服务网点(联想官网售后服务热线)

联想3c服务中心是联想旗下的官方售后,是基于互联网O2O模式开发的全新服务平台。可以为终端用户提供多品牌手机、电脑以及其他3C类产品的维修、保养和保险服务。根据客户需求层次,联想服务针对个人及家庭客户...