使用app.config.js运行Expo推送命令遇Manifest未初始化错误的解决方法
解决Expo推送Android密钥上传时的Manifest未初始化错误(app.config.js场景)
问题描述
开发聊天应用时用Expo配置推送通知,执行命令 expo push:android:upload --api-key <你的Firebase令牌> 后,收到错误提示 Manifest (app.json) not initialized,确认是使用动态配置文件app.config.js而非静态app.json导致的问题。
解决方案
- 升级Expo CLI到最新版
旧版CLI对动态配置的支持存在缺陷,先升级到稳定版:
npm install -g expo-cli # 或使用yarn yarn global add expo-cli
- 执行命令时指定配置文件路径
给上传命令加上--config参数,明确指向动态配置文件:
expo push:android:upload --api-key <你的Firebase令牌> --config app.config.js
验证配置文件有效性
确认app.config.js的导出结构正确,你的配置已包含expo.android.package和googleServicesFile(这两项是Android推送功能必需的)。另外可临时在配置文件中添加console.log(process.env),运行expo config命令验证环境变量是否正确加载,避免因变量缺失导致配置不完整。临时生成静态app.json(备选方案)
如果上述方法无效,先生成静态的app.json:
expo export:manifest -p android
生成后再执行上传命令,完成操作后删除该静态app.json即可,避免和动态配置文件冲突。
附用户提供的app.config.js代码
import "dotenv/config"; export default { expo: { name: "XXX", slug: "XXX", version: "1.0.0", scheme: "com.XXXXXXXXX.XXXX", orientation: "portrait", icon: "./assets/icon.png", userInterfaceStyle: "light", splash: { image: "./assets/splash.png", resizeMode: "contain", backgroundColor: "#ffffff", }, updates: { fallbackToCacheTimeout: 0, }, assetBundlePatterns: ["**/*"], ios: { supportsTablet: true, }, android: { package: "com.XXXXXXXXX.XXXX", googleServicesFile: "./google-services.json", adaptiveIcon: { foregroundImage: "./assets/adaptive-icon.png", backgroundColor: "#FFFFFF", }, }, web: { favicon: "./assets/favicon.png", }, extra: { apiKey: process.env.API_KEY, authDomain: process.env.AUTH_DOMAIN, projectId: process.env.PROJECT_ID, storageBucket: process.env.STORAGE_BUCKET, messagingSenderId: process.env.MESSAGING_SENDER_ID, appId: process.env.APP_ID, measurementId: process.env.MEASUREMENT_ID, oneSignalAppId: process.env.ONESIGNAL_APP_ID, }, plugins: [ [ "expo-image-picker", { photosPermission: "The app accesses your photos to let you share them with your friends.", }, ], ], }, };
内容的提问来源于stack exchange,提问作者Laspeed
相关产品推荐
相关产品推荐

