Ionic,"cordova" 不包含在平台中,本机插件不工作

Ionic, "cordova" not included in platforms, native plugins not working

我用 Angular 和 Cordova 继承了一个 Ionic 5 项目——不是 Capacitor。它使用了几个原生插件,即 QR Scanner 和 In-app Browser。该应用程序在 Android 模拟器中启动时运行良好,使用:

ionic cordova run android

现在我想构建一个 APK,我可以将其分发给一些测试人员来试用该应用程序。必须使用特定配置构建此 APK 以连接到预生产环境(使用 Firebase,但我想这应该无关紧要)。我使用的流程是:

ionic build --prod --platform=android --configuration=preprod
ionic cordova prepare android --no-build --prod
ionic cordova build android --no-build --release
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <PATH_TO_KS> <PATH_TO_APK> <KEY_NAME>
zipalign -v 4 <PATH_TO_APK> <PATH_TO_SIGNED_APK>

现在,已签名的 APK 已正确安装到模拟器,应用程序启动并连接到预生产环境。 但原生插件(例如 QR 扫描仪)不起作用。 我得到的 错误 原生:尝试调用 QRScanner.prepare,但 Cordova 不可用。确保在 device/simulator 中包含 cordova.js 或 运行。似乎 Cordova 不活跃,因为在打印平台时,它们不包含 "cordova" 字符串:

import { Platform } from '@ionic/angular';

constructor(private platform: Platform) {...}

ngOnInit() {
  this.platforms = this.platform.platforms().join(',');
}

当运行ionic cordova run androidthis.platforms的结果是android,phablet,cordova,desktop,hybrid,但是安装我用上述过程构建的 APK 时只是 android,phablet,desktop

你知道为什么吗?我对移动开发还很陌生,所以你完全可以假设我犯了新手错误。如果您觉得任何其他信息有用,请告诉我,我会很乐意添加。


编辑: 为了支持 preprod 配置,我在 angular.json:

中添加了以下部分
{
  "projects": {
    "app": {
      "architect": {
        "build": {
          "configurations": {
            "preprod": {
              ...
}}}}}}}

仅使用 ionic cordova build android 构建会产生以下错误:

> ng run app:ionic-cordova-build:preprod --platform=android
An unhandled exception occurred: Configuration 'preprod' is not set in the workspace.

这就是我分 3 个阶段构建的原因,ionic build ... --configuration=preprodionic cordova prepare ...ionic cordova build android --no-build。我的目的是第一个以正确的配置构建应用程序,第二个用配置构建的 Web 文件更新 Android 项目,第三个构建最终的 APK。

构建用于调试的新应用程序 (apk) 的简单常规方法就是调用

ionic cordova build android

这会在内部调用 prepare,因此不需要另一个调用。它将生成一个 apk 文件,您可以使用该文件在设备(以及可能的模拟器,具体取决于功能)上进行测试。

当需要发布到商店时,考虑到这是一个新的应用程序并且 Google 的要求已经改变,您需要构建一个 .aab 文件。以下将执行此操作:

ionic cordova build android --release

至于签名,您需要将密钥提供给Google,他们将通过提供的.aab 为您签名。这在此处有更详细的解释:

https://ionicframework.com/blog/google-play-android-app-bundle-requirement-for-new-apps/

现在,如果您需要创建自定义配置(您指的是 preprod),因为您有一些非常具体的 angular 环境更改或要求,如您在评论中发现的默认设置之外,您将需要编辑 angular.json 文件以添加它。

Ionic 默认为环境变量提供结构,可以在 src/environments 中找到。有关其工作原理的更多详细信息,请参见此处:

https://medium.com/swlh/environment-variables-in-angular-ionic-8aa1698f2cc5