当我使用在移动设备中运行应用程序时,我正在使用expo 43
和Amplify
expo run:android
我可以看到我的应用程序在手机上运行。
但当我尝试为同一创建构建时
eas build -p android
我的低于错误
Gradle build failed with unknown error. Please see logs for the "Run gradlew" phase
这里是eas-json
{
"cli": {
"version": ">= 0.46.0"
},
"build": {
"development": {
"distribution": "internal",
"android": {
"gradleCommand": ":app:assembleDebug"
},
"ios": {
"buildConfiguration": "Debug"
}
},
"preview": {
"distribution": "internal"
},
"production": {}
},
"submit": {
"production": {}
}
}
这是eas-build 的日志
[stderr] 40 | import { enableScreens } from "react-native-screens";
Error: Unable to resolve module ./aws-exports from /root/workingdir/build/App.js:
None of these files exist:
* aws-exports(.native|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json)
* aws-exports/index(.native|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json)
40 | import { enableScreens } from "react-native-screens";
41 | import Amplify from 'aws-amplify'
> 42 | import config from './aws-exports'
我在根目录中有aws-exports.js,它适用于expo运行:android
日志中显示了根本问题:EAS构建无法解决模块./aws-exports
。
这有两个原因:
- a(此文件在存储库中被忽略,因为它包含敏感数据(这是由
.gitignore
中的amplify进行的默认配置( - b( EAS在其服务器上上传存储库的副本,因此由于a(
aws-exports.js
不被复制。因此产生了构建错误
我使用EAS Secret功能解决了这个问题。诀窍是在一个变量中对aws-exports.js
的内容进行base64编码,称为AWS_EXPORTS
。这个变量可以在名为eas-build-pre-install
的预安装挂钩中使用,因此我们可以告诉EAS解码该值并将其写回aws-exports.js
中,这样该文件将在构建时可用。
这是通过在package.json
:中添加这两个脚本来完成的
"aws-export": "echo 'Update Expo AWS_EXPORTS secret with value: nn' && cat aws-exports.js |base64"
运行aws-export
脚本,然后通过世博会网站上的"秘密"选项卡或使用eas secret:create
命令设置编码内容。不要忘记每次更改amplify中的内容时都要更新值,以反映aws-exports.js
中的局部变化!
然后预安装挂钩将解码该值(这由EAS自动运行(:
"eas-build-pre-install": "echo $AWS_EXPORTS | base64 -d > ./aws-exports.js"
再次运行生成。
正如colinuxEAS在其服务器上上传存储库的副本,由于aws导出是.gitignore的一部分,因此它没有在服务器上上传,因此我们出现了构建错误。有关更多详细信息,请阅读colinux的答案。
这里的解决方案是在包JSON中添加这两行。
1. "aws-export": "echo 'Update Expo AWS_EXPORTS secret with value: nn' && cat aws-exports.js |base64"
2. "eas-build-pre-install": "echo $AWS_EXPORTS | base64 -di > ./aws-exports.js"
注意:步骤2中有一个小的更改。我们必须使用base64-di而不是base64-d。这是因为旧的cli无法解码换行符和其他字符。您可以在此处查看更多详细信息:解码base64:无效输入这部分解决了我发布的构建问题。我收到了更多与app:mergeReleaseResources FAILED
相关的构建错误
这个链接应该在重复资源错误的情况下帮助你:重复资源错误
在解决这些错误后,您应该从EAS获得一个成功的构建。
如果你想要一个.apk文件而不是.aap。请创建一个如下所述的开发配置文件:配置配置文件以构建apks