使用 App Center 和 CodePush 成为 React Native DevOps 开发人员
目录
1. 为什么选择移动 DevOps?
2. 自动化您的移动应用程序开发生命周期
3. 使用 CodePush 实时更新您的应用
为什么选择移动 DevOps?
与其他平台不同,移动是一个独特的环境,需要对开发生命周期有全面的了解。
在 CI/CD 之前,移动开发人员必须处理许多繁琐的工作才能将应用交付给用户设备。因此,采用移动 DevOps 流程是移动开发领域的游戏规则改变者。它允许所有团队在尽可能短的时间内执行分配的任务,从而确保平稳运行。
本文重点介绍如何使用 App Center 和 CodePush 设置 CI/CD 流程,将其集成到 React Native Android 应用程序中,以自动化每个构建、测试和分发流程。
► 阅读更多: 移动应用程序开发
自动化您的移动应用程序开发生命周期
在以下位置注册 App Center 帐户 应用中心.ms
添加您的移动应用程序。在本文中,我使用React Native在 Android 操作系统上部署移动应用程序。
选择左侧菜单中的构建部分,然后选择您的存储库服务。
成功将 App Center 链接到您的项目仓库后,它将在此处显示您的仓库的分支。您可以为每个分支选择和配置构建。
您可以配置许多有用的任务,例如:
皮棉源代码
运行单元测试
运行自定义构建脚本
在真实设备上测试
自动化应用程序的构建过程后,您需要使用密钥库对其进行签名,以便将构建版本分发给测试人员和用户
App Center 支持为 Android 应用程序设置代码签名的三种不同配置。首先,在分支配置中启用Sign builds开关。在此处关注并阅读完整文档:
最后,尝试向你的 repo 推送一个新的提交,App Center 将运行测试并根据你的配置构建一个新版本,然后它会通知你的用户下载你的应用程序的新创建版本。
使用 CodePush 实时更新您的应用
代码推送是一种云服务,使 React Native 开发人员能够将移动应用程序更新直接部署到用户的设备上。
这允许您在解决错误和/或添加不需要您重新构建二进制文件并通过相应应用程序商店重新分发它的小功能时,与您的用户群建立更确定和直接的互动模型。
简而言之,CodePush 通过以下方案帮助您将 React Native 应用程序的实时更新交付给用户:
开发人员对 Javascript 代码进行了一些更改。
执行 CodePush CLI 将新的更新推送到 App Center(CodePush 将您应用的每个 JS bundle 文件存储在 App Center 上)。
根据您的 CodePush 配置,您的应用程序将通过更新对话框提示用户或静默下载新的 JS 包文件并替换旧文件,从而为您的应用程序提供全新更新。
如果您不小心推送了包含崩溃的更新,它可以回滚以确保您的最终用户始终拥有您的应用程序的功能版本。
CodePush 显着减少了许多重复性任务,例如:
开发人员无需重建任何 ipa、apk 或 aab 文件。
开发人员无需将新版本上传或重新分发到商店。
用户无需从商店手动下载新版本。相反,他们会即时收到新的更新。
要设置 CodePush,请打开 App Center 并按照以下说明操作:
我强烈建议你阅读完整文档在这里,或克隆示例代码.
在本文中,我重点讨论了将 CodePush 集成到我的 React Native Android 应用程序中时遇到的一些令人沮丧的问题。
如果您的应用因此异常而崩溃:
java.lang.IllegalStateException:本地模块 CodePush 试图覆盖 CodePushNativeModule。检查MainApplication.java中的getPackages () 方法,可能是该模块被创建了两次。如果这是您的意图,请设置 canOverrideExistingModule=true
→ 通过在项目的根目录下创建一个 包含以下内容的react-native.config.js文件来解决:
模块.exports = {
依赖项:{
“反应本机代码推送”:{
平台:{
机器人:空
}
}
}};
后续GitHub问题:#1666
无法同步新更新
调用 CodePush.sync时,您的应用程序没有更新,您在回调中收到的状态是 CodePush.SyncStatus.UNKNOWN_ERROR。
如果您看到此错误,请尝试检查 Android Studio Logcat:
更新无效——在下载的内容中找不到名为“null”的JS 包文件。请检查您发布的 CodePush 更新是否使用与您的应用程序二进制文件一起提供的完全相同的JS 包文件名。
→ 通过覆盖ReactNativeHost的getJSBundleFile方法来解决:
完成配置后,按照这个CLI 文档关于如何将新更新推送到登台或生产。