Capacitor v3 插件不适用于 android 构建

Posted

技术标签:

【中文标题】Capacitor v3 插件不适用于 android 构建【英文标题】:Capacitor v3 plugins not working on android build 【发布时间】:2021-06-03 06:23:27 【问题描述】:

我正在使用电容器 v3 beta,在 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

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

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

这些是我的 package.json 中的节点依赖项

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

还有我的电容器.config.json 文件


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

iOS 版本适用于此配置。

【问题讨论】:

也许尝试使用最新的。 npm install @capacitor/storage@latest 【参考方案1】:

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

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

所以我安装了它,所有编译成功。

【讨论】:

您好,就我而言,这似乎不起作用。你有更多关于要遵循的程序的细节吗?谢谢。 不,可能错误不一样。您是否尝试按照电容器站点上的安装指南卸载所有与电容器相关的软件包来安装它们?也许一些旧的 lib 仍然保留在您的 node_modules 文件夹中.. 我不明白为什么电容器封装的关键部分被视为可选依赖项。【参考方案2】:

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

结果我忘了执行:

npx cap sync android

这样就解决了问题

【讨论】:

【参考方案3】:

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

【讨论】:

这对我有用,但为什么按照官方存储插件指南的最低限度说明它不起作用? MainActivity 是否会在我每次执行“ionic build”或“npx cap sync”时自动生成? 据我所知,使用 Capacitor v3 无需在主要活动中将项目推送到 List ,因为 Capacitor 会动态导入它们。 capacitorjs.com/docs/updating/…【参考方案4】:

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

import  Storage  from '@capacitor/storage';

然后在 Capacitor 的使用插件的 v2 文档 (https://capacitorjs.com/docs/v2/apis) 中,您会发现:

    导入插件对象。它代表所有 Capacitor 插件的注册表。
import  Plugins  from '@capacitor/core';
    从插件注册表(插件对象)获取插件。
const  Browser  = Plugins;
    使用插件 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 的答案有效。

【讨论】:

【参考方案5】:

从 v2 升级 Ionic v3 后,存储插件不起作用。 为我手动将插件添加到 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);
  

【讨论】:

【参考方案6】:

适用于 Capacitor V3 插件(在 Android 11 和 Ionic 5 上测试)

    capacitor.plugins.json 有存储插件的入口, MainActivity.java 不应该有 onCreate 函数,其中 CapV3 使用原生 API, 尝试在build.gradle 中设置minifyEnabled=false

如果错误消失,请在 proguard-rules.pro 中创建 pro-guard 规则,就像在 https://github.com/ionic-team/capacitor/issues/739 中一样

【讨论】:

以上是关于Capacitor v3 插件不适用于 android 构建的主要内容,如果未能解决你的问题,请参考以下文章

升级到 Capacitor v3 包 com.getcapacitor.annotation 后报错不存在

用于 DynamoDB 查询的 Python 代码适用于 v3.6,但不适用于 python 2.7

Python wave 模块仅适用于 v2.7,不适用于 v3.4 linux

Youtube Data API v3 PlaylistItems 更新不适用于“稍后观看”播放列表

与 Hasura 的 WebSocket 连接不适用于 Node.js 上的 ApolloClient v3

新的 Google API 密钥“Google Maps API v3”不适用于 Google Places API?