我们在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:
{
"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"
}
}发布于 2021-05-24 11:50:42
这两个答案都是错误的。
电容3允许android插件自动注册,但为此,您需要从MainActivity.java中删除init方法,如果它在那里,自动注册将无法工作,因为init是传统的插件注册方式。
所以你有两个选择:
add(DatepickPlugin.class); )上所做的那样正如答案1所建议的那样,通过删除android文件夹,init方法就会被删除,这就是为什么这个答案有效,但它具有破坏性,它将删除项目中的所有手动更改。
正如答案2所建议的那样,添加插件也很有效,但是如果使用自动插件注册,这种方法确实适用于非npm插件,所以没有必要这样做。
发布于 2021-04-27 08:34:31
尝试删除android平台(重要的是:删除之前备份android目录)。
然后跑:
npm install @capacitor/core@next @capacitor/cli@next
npx cap init
npm install @capacitor/android@next
npx cap add android然后构建您的项目,并:
npx cap sync发布于 2021-04-27 11:26:05
我也有同样的问题
您需要在MainActivity.java中手动添加插件
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);
// ---
}
}https://stackoverflow.com/questions/67226076
复制相似问题