我最近将我们的 Expo 项目从 sdk 44 更新到了 46。 在这个过程中,我从
Expo build:android
变成了eas build -p android
。
一切都按预期运行,除了版本代码未正确编译到 aab/apk 文件中,因此我无法将更新推送到 google play。
版本代码已经设置为26,因为我们确实发布了之前的版本,目前semVer为1.1.1。 EAS 也不会在仪表板中显示正确的版本代码。 我尝试设置
"appVersionSource": "local"
以及 "remote"
,但都不起作用。 (据我了解,local应该是正确的参数。
eas build
通常似乎会忽略 app.config.js 中的其他参数,例如启动图像、应用程序图标和背景颜色(为了保持简短,我没有在下面的代码示例中包含这些行)
{
"cli": {
"version": ">= 2.3.0",
"appVersionSource": "local"
},
"build": {
...
"production": {
"channel": "production",
"env": {
"APP_ENV": "production"
},
"android": {
"buildType": "app-bundle",
"image": "latest"
}
}
},
"submit": {
"production": {}
}
}
import 'dotenv/config';
module.exports = {
expo: {
name: '...',
slug: '...',
version: '1.1.1',
assetBundlePatterns: ['**/*'],
android: {
package: '...',
versionCode: 26,
softwareKeyboardLayoutMode: 'pan',
},
extra: {
eas: {
projectId: '...',
},
releaseChannel: process.env.APP_ENV,
},
},
};
尝试运行
npx expo prebuild
或 npx expo run:android
这将生成本机 Android 项目,这基本上类似于 Bare 工作流程。
请参阅以下帖子了解更多详细信息以及您可以执行的操作: https://forums.expo.dev/t/should-i-exclude-ios/63094/4
就我而言 [sdk 47、eas-cli/3.9.2、darwin-x64、node-v19.6.1],在
"appVersionSource": "remote"
文件中使用 eas.json
,更改 runtimeVersion: { policy: 'appVersion' }
文件中的 app.config.ts
很有帮助。
更多内容请阅读
runtimeVersion
中的博览会文档。
就我而言,有时,在 app.json 代码中添加版本号似乎不起作用。为了解决这个问题,我让 Expo 自动为我处理这个问题。为此,只需添加:
"autoIncrement": true
到 eas.json 文件中的构建部分。例如,就我自己而言,文件的该部分如下所示:
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"distribution": "internal",
"android":{
"buildType": "app-bundle"
},
"autoIncrement": true
},
"production": {
"autoIncrement": true
}
production
下的内容会自动添加。我在preview
下添加了一个来解决这个问题。希望这对某人有帮助。