科尔多瓦Android 7调用未知插件

时间:2018-06-20 19:45:08

标签: android cordova ionic-framework

运行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

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

我确实安装了cordova-plugin-whitelist,并且在我的<access origin="*" />文件中安装了allow-navigationallow-intentconfig.xml,它们确实传播到了{{1 }}文件。

所有插件均已安装,并且其来源在android目录中可见。

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

我尝试过的一些事情:

  • 删除并重新安装插件
  • 完全删除cordova白名单插件(我现在读过有关android cordova的内容)
  • 使用android @ 7和设备+ buildinfo插件启动一个新的应用程序,并且运行良好,并且可以访问这些插件
  • 仅使用这两个插件就可以了,但是我只是尝试了 all 个插件,并抛出了相同的错误,因此我目前正在对此路径进行进一步调查...
  • 在混凝土墙上打我的头
  • 针对平台目录的几次手动更改
  • 几个res/xml/config.xml命令
  • 将cordova cli版本重新安装到最新版本(当前为8)

项目中的插件列表:

cordova platform rm android && cordova platform add android

目前,我完全能够构建应用程序,这通常是<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. 要克服的主要障碍,我想在7+上构建它,因此不需要建议降级到6.4的答案

  

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

     

同样,在刚开始构建应用程序的最初过程中,我遇到了几个cordova-android@7不存在的错误,并修复了所有这些错误。因此,即使插件不兼容并抛出应用程序内错误,该应用程序仍可以正常运行!

     

解决方案是派生每个插件并修复AndroidManifest.xml文件各个部分的目标目录。有关此内容的原始说明,请参见@bshaps答案;有关所需更改的其他说明,请参见@forrestmid的答案。

2 个答案:

答案 0 :(得分:2)

解决方案就像@bshaps所说的那样,其中某些插件 still 与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是无效的,我会认为,由于该应用程序运行良好,因此插件必须兼容。 并非如此。您仍然可以使用不兼容的插件构建应用程序,这些插件会在运行时抛出错误。

答案 1 :(得分:1)

人们之所以建议将其降级到6.4.0版,是因为7+包含的更改会破坏当时大多数现有插件。至此,许多更新,但cordova-plugin-badge之类的插件与android 7+平台不兼容,并且最近未更新。

如果您不想降级到6.4.0,则可以选择:

  1. 等待作者更新插件以与Android Platform 7+兼容
  2. 在Github上分叉插件,并进行更改以与Android 7+兼容
  3. 删除不是最新版本的Android 7+插件

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