Capacitor v3 插件无法在 android build 上运行
Capacitor v3 plugins not working on android build
我正在使用电容器 v3 测试版,在网络和 iOS 中工作没有问题,但不能 运行 android 应用程序。
构建很好,但是当 运行ning 应用程序出现此错误时:
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 插件。但是当我使用其他插件时,例如 Keyboard,出现错误说 Keyboard plugin is not implemented on android.
所以我想 Android 构建或项目配置存在一些问题。
这些是我 package.json
中的节点依赖项
"@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 版本适用于此配置。
创建新项目并查看文件差异后发现我没有安装
"@capacitor/cli": "^3.0.0-beta.6"
所以我安装了它并且所有编译都成功了。
我从电容2升级到3也遇到了同样的问题
原来是忘记执行了:
npx cap sync android
这解决了问题
您必须在 mainActivity 中:添加(StoragePlugin.class);
在 Capacitor 的 v2 文档中,在专用于存储插件 (https://capacitorjs.com/docs/apis/storage) 的页面中,导入是这样完成的:
import { Storage } from '@capacitor/storage';
然后在 Capacitor 的 v2 文档中使用插件 (https://capacitorjs.com/docs/v2/apis) 你会发现:
- Import the Plugins object. It represents the registry of all Capacitor plugins.
import { Plugins } from '@capacitor/core';
- Get a plugin from the Plugin Registry (Plugins object).
const { Browser } = Plugins;
- Use the plugin API:
async openBrowser() {
// On iOS, for example, open the URL in SFSafariViewController (the in-app browser)
await Browser.open({ url: "https://ionicframework.com" });
}
A common mistake is to import a plugin directly, then use the plugin API >immediately, resulting in the web implementation being used:
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" });
}
By using the plugins from the plugin registry (Plugins object), the native implementation of the plugin is used (if available), with fallback to the web version.
因此,如果您将 Quasar 与 Capacitor v2 一起使用,您可能会像我一样疯狂。只需将浏览器替换为存储即可。
也许在 v3 中这个问题已经解决,这就是 legomolina 的答案有效的原因。
从 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);
}
}
对于 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
中一样
我发现只需启动 Android Studio 即可解决问题。它会自动同步 Gradle,然后我重新启动了我的 Android 开发环境 - 错误消失了,我能够按照 capaitor 插件文档访问存储。
见https://capacitorjs.com/docs/android/troubleshooting#plugin-not-implemented
我正在使用电容器 v3 测试版,在网络和 iOS 中工作没有问题,但不能 运行 android 应用程序。 构建很好,但是当 运行ning 应用程序出现此错误时:
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 插件。但是当我使用其他插件时,例如 Keyboard,出现错误说 Keyboard plugin is not implemented on android.
所以我想 Android 构建或项目配置存在一些问题。
这些是我 package.json
中的节点依赖项"@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 版本适用于此配置。
创建新项目并查看文件差异后发现我没有安装
"@capacitor/cli": "^3.0.0-beta.6"
所以我安装了它并且所有编译都成功了。
我从电容2升级到3也遇到了同样的问题
原来是忘记执行了:
npx cap sync android
这解决了问题
您必须在 mainActivity 中:添加(StoragePlugin.class);
在 Capacitor 的 v2 文档中,在专用于存储插件 (https://capacitorjs.com/docs/apis/storage) 的页面中,导入是这样完成的:
import { Storage } from '@capacitor/storage';
然后在 Capacitor 的 v2 文档中使用插件 (https://capacitorjs.com/docs/v2/apis) 你会发现:
- Import the Plugins object. It represents the registry of all Capacitor plugins.
import { Plugins } from '@capacitor/core';
- Get a plugin from the Plugin Registry (Plugins object).
const { Browser } = Plugins;
- Use the plugin API:
async openBrowser() {
// On iOS, for example, open the URL in SFSafariViewController (the in-app browser)
await Browser.open({ url: "https://ionicframework.com" });
}
A common mistake is to import a plugin directly, then use the plugin API >immediately, resulting in the web implementation being used:
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" });
}
By using the plugins from the plugin registry (Plugins object), the native implementation of the plugin is used (if available), with fallback to the web version.
因此,如果您将 Quasar 与 Capacitor v2 一起使用,您可能会像我一样疯狂。只需将浏览器替换为存储即可。
也许在 v3 中这个问题已经解决,这就是 legomolina 的答案有效的原因。
从 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);
}
}
对于 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
我发现只需启动 Android Studio 即可解决问题。它会自动同步 Gradle,然后我重新启动了我的 Android 开发环境 - 错误消失了,我能够按照 capaitor 插件文档访问存储。
见https://capacitorjs.com/docs/android/troubleshooting#plugin-not-implemented