【问题标题】:Cordova Android 7 calling to unknown pluginsCordova Android 7 调用未知插件
【发布时间】:2018-06-20 19:45:07
【问题描述】:

运行cordova-android@7.1 版本的应用程序时会收到各种错误:

D/PluginManager: exec() call to unknown plugin: Badge
D/PluginManager: exec() call to unknown plugin: File
D/PluginManager: exec() call to unknown plugin: Keyboard
D/PluginManager: exec() call to unknown plugin: BuildInfo
D/PluginManager: exec() call to unknown plugin: Device

W/SystemWebViewClient: URL blocked by whitelist

似乎是最相关的。我认为白名单问题类似于其他无法访问的插件,因为它也是一个插件。 res/xml/config.xml 文件中的每个插件都没有 <feature> 方面,我认为过去是必需的。

我的config.xml 文件中确实安装了cordova-plugin-whitelist<access origin="*" />allow-navigationallow-intent,这些确实传播到res/xml/config.xml 文件。

所有插件都已安装,并且它们的源代码在 android 目录中可见。

我目前也在使用 ionic v1,但在我的研究中,我找不到任何关于 ionic v1 和 cordova-android v7 的问题,但我认为值得一提。

我尝试过的一些事情:

  • 删除并重新安装插件
  • 完全删除cordova白名单插件(我现在读过一些关于android cordova的东西,包括这个)
  • 使用带有 device + buildinfo 插件的 android@7 启动一个新应用,它运行良好,并且插件可以访问
  • 只有两个插件没问题,但我只是尝试了 所有 插件,它抛出了同样的错误,所以我目前正在进一步调查这条路径...
  • 用头撞混凝土墙
  • 对平台目录进行了几次手动更改
  • 几个cordova platform rm android && cordova platform add android 命令
  • 将 cordova cli 版本重新安装到最新版本(当前为 8)

项目中的插件列表:

<plugin name="cordova-plugin-actionsheet" spec="^2.3.3" />
<plugin name="cordova-plugin-camera" spec="^3.0.0" />
<plugin name="cordova-plugin-datepicker" spec="^0.9.3" />
<plugin name="cordova-plugin-geolocation" spec="^3.0.0" />
<plugin name="cordova-plugin-badge" spec="^0.8.5" />
<plugin name="ionic-plugin-keyboard" spec="^2.2.1" />
<plugin name="cordova-plugin-splashscreen" spec="^4.1.0" />
<plugin name="cordova-plugin-3dtouch" spec="^1.3.5" />
<plugin name="cordova-plugin-touchid" spec="^0.4.0" />
<plugin name="cordova-plugin-compat" spec="^1.2.0" />
<plugin name="ionic-plugin-deploy" spec="^0.6.7" />
<plugin name="cordova-plugin-dialogs" spec="^1.3.4" />
<plugin name="cordova-plugin-inappbrowser" spec="^2.0.2" />
<plugin name="cordova-plugin-file-transfer" spec="^1.7.1" />
<plugin name="cordova-plugin-screen-orientation" spec="^3.0.1" />
<plugin name="cordova-plugin-buildinfo" spec="^2.0.1" />
<plugin name="phonegap-plugin-push" spec="^2.2.3"/>
<plugin name="cordova-plugin-whitelist" spec="^1.3.3" />
<plugin name="cordova-plugin-device" spec="^2.0.2" />
... and some other unneeded plugins now that we have an answer.

此时我完全能够构建应用程序,这对于cordova-android@7 来说是一个需要克服的主要障碍,我想在 7+ 上构建它,因此不需要建议降级到 6.4 的答案。

当我运行只包含插件的测试应用程序时,我几乎可以无一例外地访问它们,但只有在某些随机的情况下,构建结果证明我无法访问任何插件。下次我构建它时效果很好!

同样,在构建应用程序的初始过程中,我遇到了几个AndroidManifest.xml 不存在的错误,我修复了所有错误。因此,即使插件不兼容并引发应用程序错误,应用程序仍会像一切正常一样构建!

解决方案是分叉每个插件,并修复plugin.xml 文件各个部分的目标目录。请参阅@bshaps 答案以了解此问题的原始指示,并查看@forrestmid 的答案以了解有关所需更改的更多说明。

【问题讨论】:

    标签: android cordova ionic-framework


    【解决方案1】:

    解决方案正如@bshaps 所说,一些插件仍然与cordova-android@7 不兼容。当我问我的问题时,我不相信这是这种情况的原因是,不兼容的插件有时仍然在 cordova-android@7 上工作!

    要修复所有插件,您不仅需要像在cordova blogpost 中那样更新AndroidManifest.xml 位置,还必须在每个插件的plugin.xml 文件中更改以下字符串:

    • res/xml/config.xmlapp/src/main/res/xml/config.xml

    • res/values/strings.xmlapp/src/main/res/values/strings.xml

    • res/xml/strings.xmlapp/src/main/res/xml/strings.xml

    当然还有

    • AndroidManifest.xmlapp/src/main/AndroidManifest.xml

    这确实是一个非常简单的修复。让我失望的是phonegap-plugin-push 插件需要cordova-android@7.1.0 或更高版本,但它也没有使用上面的字符串进行适当的配置。

    我为此归功于@bshaps,因为如果他没有特别指出cordova-plugin-badge 无效,我会认为,由于应用程序构建良好,插件必须是兼容的。 情况并非如此。您仍然可以使用不兼容的插件构建应用程序,这些插件会在运行时引发错误。

    【讨论】:

    • 抱歉,是哪篇博文?
    • @BenCoffin 刚刚添加了。
    • 谢谢,我得到 07-20 13:53:30.908: D/PluginManager(24001): exec() call to unknown plugin: Camera with cordova- plugin-camera,我会努力听从你的建议,用 cordova-android@7.1.0 解决这个问题
    • 这些修改允许我在 Cordova 8.0.0 中使用文件传输插件 (cordova-plugin-file-transfer)。
    【解决方案2】:

    人们建议降级到平台版本 6.4.0 的原因是因为 7+ 包含的更改破坏了当时大多数现有插件。此时很多已经更新,但是cordova-plugin-badge等插件不兼容android平台7+,最近没有更新。

    如果您不想降级到 6.4.0,您的选择:

    1. 等待作者更新插件兼容Android Platform 7+
    2. 在 Github 上 fork 插件并进行更改以兼容 Android 7+
    3. 移除在 Android 7+ 上不是最新的插件

    我从其他人那里听说,如果您知道自己在做什么,那么更新插件以兼容 Android 7+ 非常简单。

    【讨论】:

    • 确实是一个简单的改变。请参阅我修改后的问题和答案,以进一步说明为什么我认为插件兼容,但为什么这确实是应用程序在运行时失败的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    相关资源
    最近更新 更多