我使用 Ionic Framework 已经有一段时间了,但最近我遇到了这个错误 plugin_not_installed
对于 Health Kit 插件,我知道我有基于我的 ionic cordova 插件列表
输出。
$ ionic cordova plugin list
> cordova plugin ls
com.telerik.plugins.healthkit 0.5.5 "HealthKit"
cordova-plugin-apprate 1.3.0 "AppRate"
cordova-plugin-badge 0.8.5 "Badge"
cordova-plugin-device 1.1.4 "Device"
cordova-plugin-dialogs 1.3.4 "Notification"
cordova-plugin-globalization 1.0.8 "Globalization"
cordova-plugin-google-analytics 1.8.3 "Google Universal Analytics Plugin"
cordova-plugin-inappbrowser 1.7.2 "InAppBrowser"
cordova-plugin-ionic-webview 1.1.16 "cordova-plugin-ionic-webview"
cordova-plugin-local-notification 0.9.0-beta.1 "LocalNotification"
cordova-plugin-splashscreen 4.0.3 "Splashscreen"
cordova-plugin-statusbar 2.3.0 "StatusBar"
cordova-plugin-whitelist 1.3.1 "Whitelist"
ionic-plugin-keyboard 2.2.1 "Keyboard"
我的代码包含在 platform.ready()
中,因此我知道所有内容都已加载。我还有我的健康工具包代码,它在 healthKit.available()
和 healthKit.requestAuthorization
中抛出错误,但没有错误。
getWeight.then(function () {
alert("Healthkit is ready!");
alert(weight);
healthKitReady = true;
}).catch(function(err) {
if (err) {
console.log(err); // This is where the error is returned.
}
});
getWeight 函数是这样的:
const getWeight = new Promise(function(resolve, reject) {
var error;
healthKit.readWeight({
unit: "lb"
}).then(function (out) {
weight = Math.round(out.value);
alert("weight: " + weight);
resolve(weight);
}, function (err) {
error = err;
reject(error);
});
});
以防万一这是一个版本问题,这是 ionic 信息的输出:
cli packages: (/usr/local/share/.config/yarn/global/node_modules)
@ionic/cli-utils : 1.19.0
ionic (Ionic CLI) : 3.19.0
global packages:
cordova (Cordova CLI) : 7.1.0
local packages:
@ionic/app-scripts : 3.1.4
Cordova Platforms : ios 4.5.4
Ionic Framework : ionic-angular 3.9.2
System:
ios-deploy : 1.9.2
ios-sim : 6.1.2
Node : v8.9.1
npm : 2.15.12
OS : macOS High Sierra
Xcode : Xcode 9.2 Build version 9C40b
Environment Variables:
ANDROID_HOME : not set
Misc:
backend : pro
最佳答案
如果您来到这里却没有任何效果,请不要担心,这不是您的错。
您可能已经按照官方文档执行了这两个命令来安装插件:
$ ionic cordova plugin add <your plugin>
$ npm install --save @ionic-native/<your plugin>
您还在 app-module.ts
文件中添加了插件:
@NgModule({
...
providers: [
...
Your plugin
...
]
...
})
您已经在调用您的插件,该插件已正确导入并注入(inject)到调用类的构造函数中。
您甚至在等待 deviceReady 事件开始使用您的插件:
this.platform.ready().then(() => {
//Use plugin now
});
然后您仍然收到 plugin_not_installed
错误。可能发生的一件事是,尽管有这个多 MB 的节点和配置文件,但该插件是最近添加的,而该项目是在一段时间前创建的。当您添加插件时,它会下载存储库中可用的最新版本 (!!!) 并且对于您项目中安装的某些平台(android 或 ios),此插件需要比您现在拥有的版本更高的 Cordova 版本。再次输入第一条命令:
$ ionic cordova plugin add <your plugin>
然后仔细查看输出。看起来一切正常,但如果您向上滚动,您可能会发现一个错误,指出您下载的这个插件需要 Cordova android(或 ios)版本 X,而您拥有 Cordova android(或 ios)版本 Y,Y < X。示例:
Fetching plugin "phonegap-plugin-push@~2.1.0" via npm
Installing "phonegap-plugin-push" at "2.1.0" for android
Plugin doesn't support this project's cordova version. cordova: 7.0.2, failed version requirement: >=7.1.0
Skipping 'phonegap-plugin-push' for android
更糟糕的是,该插件已被部分添加,它可能存在于根插件文件夹和 config.xml
中,并列在 cordova 插件列表
中> 命令输出,但它不存在于 platform_www\plugins
文件夹中。
如果是这种情况,您需要更新有问题的平台。并且 cordova platform update
已被弃用,因此您现在需要执行此操作:
ionic cordova platform remove android
ionic cordova platform add android@X
其中 X 是插件需要的版本或更高版本,例如“7.1.0”。
现在您需要再次正确安装插件:
$ ionic cordova plugin add <your plugin>
$ npm install --save @ionic-native/<your plugin>
我们还没有完成。在 Android 中,您现在可能会在设备上运行时遇到此错误:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [:CordovaLib]
更新平台后,部分新代码需要更高的新minSDK。对于 ionic,您需要在 config.xml
中更改它:
<preference name="android-minSdkVersion" value="19" />
希望你现在一切都好。 Cordova 在依赖管理方面真的很糟糕。此外,文档的编写就好像每个人都拥有最新的一切一样。
关于angular - 为什么 Ionic Framework 插件 healthkit 出现错误 plugin_not_installed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48065114/