首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电容3.0升级插件“未实现”异常(Nx Monorepo)

电容3.0升级插件“未实现”异常(Nx Monorepo)
EN

Stack Overflow用户
提问于 2021-04-23 07:56:51
回答 8查看 15.3K关注 0票数 14

我们在nx单磁极中使用角,其中我们使用电容2.4已经有半年了。到目前为止,我们只使用android平台。现在,我们需要升级到电容3.0。然而,该应用程序本身再次运行,但是,一旦我使用任何插件,我总是得到以下例外:ERROR Error: "Device" plugin is not implemented on android

对于我尝试使用的每个插件来说,这都是一样的。因此,如果我使用Storage,我只会得到"Storage“的相同例外。我已经详细地遵循了电容迁移指南(https://capacitorjs.com/docs/v3/updating/3-0),但是我不知道我哪里出错了。一般来说,应用程序现在可以工作,只要我有任何代码使用电容插件注释掉。在升级之前,使用插件的代码确实可以工作。

根据迁移指南,我在main.ts文件中添加了main.ts,尽管我也尝试将它放入app.module.ts中,但在那里也没有成功。我已经为整个应用程序(根)和nx-电容应用程序(电容器应用程序添加了@nx趋向电容)安装了所有插件,如https://nxtend.dev/docs/capacitor/getting-started/所建议的那样。我还更新了电容cli,电容核心和电容安卓版本的两个package.json文件。此外,根据android升级指南,我还更新了gradle和android插件。我也相应地更新了Android变量。

老实说,我没有太多的经验或深入的知识电容器,我知道电容3仍然在贝塔到这一点。然而,也许有人已经偶然发现了这个问题,并找到了解决办法。我也不确定,这个问题是否可以由nx中的这种monorepo方法引起。是否有人在使用Nx时将电容升级到3.0?

作为参考,这是电容器应用程序的当前package.json:

代码语言:javascript
复制
{
  "name": "app-cap",
  "dependencies": {
    "@capacitor-community/electron": "^1.3.2",
    "@capacitor/android": "^3.0.0-rc.0",
    "@capacitor/app": "^0.3.6",
    "@capacitor/camera": "^0.4.3",
    "@capacitor/cli": "^3.0.0-rc.0",
    "@capacitor/core": "^3.0.0-rc.0",
    "@capacitor/device": "^0.5.6",
    "@capacitor/filesystem": "^0.5.2",
    "@capacitor/ios": "^3.0.0-rc.0",
    "@capacitor/local-notifications": "^0.6.0",
    "@capacitor/push-notifications": "^0.3.6",
    "@capacitor/storage": "^0.3.6",
    "capacitor-secure-storage-plugin": "^0.5.0",
    "com-darryncampbell-cordova-plugin-intent": "^2.0.0",
    "com.darktalker.cordova.screenshot": "^0.1.6",
    "cordova-plugin-advanced-http": "^3.1.0",
    "cordova-plugin-app-launcher": "^0.4.0",
    "cordova-plugin-appcenter-analytics": "^0.5.1",
    "cordova-plugin-appcenter-crashes": "^0.5.1",
    "cordova-plugin-appcenter-shared": "^0.5.1",
    "cordova-plugin-device": "^2.0.3",
    "cordova-plugin-dialogs": "^2.0.2",
    "cordova-plugin-file": "^6.0.2",
    "cordova-plugin-file-opener2": "^3.0.5",
    "cordova-plugin-zip": "^3.1.0",
    "jetifier": "^1.6.6"
  }
}
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2021-05-24 11:50:42

这两个答案都是错误的。

电容3允许android插件自动注册,但为此,您需要从MainActivity.java中删除init方法,如果它在那里,自动注册将无法工作,因为init是传统的插件注册方式。

所以你有两个选择:

  1. 从MainActivity.java中删除init方法,如在电容器3更新文档上解释的那样
  2. 保留遗留的init方法,并添加插件,就像在电容2 (即add(DatepickPlugin.class); )上所做的那样

正如答案1所建议的那样,通过删除android文件夹,init方法就会被删除,这就是为什么这个答案有效,但它具有破坏性,它将删除项目中的所有手动更改。

正如答案2所建议的那样,添加插件也很有效,但是如果使用自动插件注册,这种方法确实适用于非npm插件,所以没有必要这样做。

票数 26
EN

Stack Overflow用户

发布于 2021-04-27 08:34:31

尝试删除android平台(重要的是:删除之前备份android目录)。

然后跑:

代码语言:javascript
复制
npm install @capacitor/core@next @capacitor/cli@next

npx cap init

npm install @capacitor/android@next

npx cap add android

然后构建您的项目,并:

代码语言:javascript
复制
npx cap sync
票数 7
EN

Stack Overflow用户

发布于 2021-04-27 11:26:05

我也有同样的问题

您需要在MainActivity.java中手动添加插件

代码语言:javascript
复制
public class MainActivity extends BridgeActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // --- Remove bridge init as it's deprecated and add these lines
    registerPlugin(com.capacitorjs.plugins.app.AppPlugin.class);
    registerPlugin(com.capacitorjs.plugins.device.DevicePlugin.class);
    // ---
  }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67226076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档