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 android
时this.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=preprod
、ionic 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
我用 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 android
时this.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=preprod
、ionic 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