Capacitor v3 插件不适用于 android 版本

发布时间:2021-03-04 15:11

我使用的是电容 v3 测试版,在 web 和 iOS 上运行没有问题,但无法运行 android 应用程序。 构建完成,但运行应用程序时出现此错误:

E/Capacitor/Console: File: http://localhost/vendor-es2015.js - Line 41296 - Msg: ERROR Error: Uncaught (in promise): Error: "Storage" plugin is not implemented on android
    Error: "Storage" plugin is not implemented on android

为了解决这个错误,我删除了存储插件并替换为离子/存储插件。但是当我使用其他插件(例如键盘)时,出现错误提示键盘插件未在 android 上实现。

所以我认为 Android 构建或项目配置存在一些问题。

这些是我的 package.json 中的 de node 依赖

"@capacitor/android": "^3.0.0-beta.6",
"@capacitor/core": "^3.0.0-beta.1",
"@capacitor/storage": "^0.3.1",

还有我的capacitor.config.json文件

{
    "appId": "net.flowww.me",
    "appName": "FLOWwwMe",
    "bundledWebRuntime": false,
    "npmClient": "npm",
    "webDir": "www",
    "cordova": {}
}

iOS 版本在此配置下运行良好。

回答1

你必须在 mainActivity : add(StoragePlugin.class);

回答2

创建新项目并查看文件差异后发现我还没有安装

"@capacitor/cli": "^3.0.0-beta.6"

所以我安装了它并且全部编译成功。

回答3

Ionic v3 从 v2 升级后,存储插件不起作用。 它在为我手动添加插件到 MainActivity.java 后工作:

package com.ionic.app;

import android.os.Bundle;

import com.getcapacitor.BridgeActivity;
import com.capacitorjs.plugins.storage.StoragePlugin;

public class MainActivity extends BridgeActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    registerPlugin(StoragePlugin.class);
  }
}
回答4

从电容 2 升级到 3 时我也遇到了同样的问题

结果,我忘记执行了:

npx cap sync android

解决了这个问题

回答5

在 Capacitor 的 v2 文档中,在专门用于存储插件 (https://capacitorjs.com/docs/apis/storage) 的页面中,导入是这样完成的:

import { Storage } from '@capacitor/storage';

然后在 Capacitor's v2 doc for Using Plugins (https://capacitorjs.com/docs/v2/apis) 中,您会发现:

<块引用>
  1. 导入插件对象。它代表所有 Capacitor 插件的注册表。
import { Plugins } from '@capacitor/core';
<块引用>
  1. 从插件注册表(插件对象)获取插件。
const { Browser } = Plugins;
<块引用>
  1. 使用插件 API:
async openBrowser() {
  // On iOS, for example, open the URL in SFSafariViewController (the in-app browser)
  await Browser.open({ url: "https://ionicframework.com" });
}
<块引用>

一个常见的错误是直接导入一个插件,然后立即使用插件API,导致web实现被使用:

import { Browser } from '@capacitor/core';

async openBrowser() {
  // On iOS, for example, this will open the URL in Safari instead of
  // the SFSafariViewController (in-app browser)
  await Browser.open({ url: "https://ionicframework.com" });
}
<块引用>

通过使用插件注册表(Plugins 对象)中的插件,使用插件的本机实现(如果可用),并回退到网络版本。

因此,如果您将 Quasar 与 Capacitor v2 一起使用,您可能会像我一样发疯。只需将浏览器替换为存储即可。

也许在 v3 中这个问题得到了解决,这就是 legomolina 的答案有效的原因。