android 文件传输和白名单之间的Cordova插件冲突

zdwk9cvp  于 2023-01-03  发布在  Android
关注(0)|答案(1)|浏览(292)

文件传输和白名单插件之间似乎存在冲突,一些其他用户也报告了这一点。我的插件列表如下(还有一些需要安装):

cordova-plugin-android-permissions 1.1.5 "Permissions"
cordova-plugin-app-event 1.2.2 "Application Events"
cordova-plugin-device 2.1.0 "Device"
cordova-plugin-file-md5 0.3.3 "MD5 Checksum"
cordova-plugin-file-transfer 1.7.1 "File Transfer"
cordova-plugin-file 7.0.0 "File"
cordova-plugin-inappbrowser 5.0.0 "InAppBrowser"
cordova-plugin-launcher 0.2.2 "Launcher"
cordova-plugin-media 6.1.0 "Media"
cordova-plugin-network-information 3.0.0 "Network Information"
cordova-plugin-splashscreen 6.0.2 "Splashscreen"
cordova-plugin-whitelist 1.3.5 "Whitelist"
cordova-plugin-x-socialsharing 6.0.4 "SocialSharing"
cordova-plugin-zip 3.1.0 "cordova-plugin-zip"
es6-promise-plugin 4.2.2 "Promise"

安装cordova-plugin-file-transfer后,构建拒绝完成其作业,并给出以下错误:

D:\PhoneGap\qforall\platforms\android\app\src\main\java\org\apache\cordova\filetransfer\FileTransfer.java:48: error: cannot find symbol
import org.apache.cordova.Whitelist;
                         ^
  symbol:   class Whitelist
  location: package org.apache.cordova
D:\PhoneGap\qforall\platforms\android\app\src\main\java\org\apache\cordova\filetransfer\FileTransfer.java:691: error: cannot find symbol
                Whitelist whitelist = (Whitelist)gwl.invoke(webView);
                ^
  symbol:   class Whitelist
  location: class org.apache.cordova.filetransfer.FileTransfer
D:\PhoneGap\qforall\platforms\android\app\src\main\java\org\apache\cordova\filetransfer\FileTransfer.java:691: error: cannot find symbol
                Whitelist whitelist = (Whitelist)gwl.invoke(webView);
                                       ^
  symbol:   class Whitelist
  location: class org.apache.cordova.filetransfer.FileTransfer
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
3 errors

我还尝试将白名单替换为允许名单,如@Siddhartha Mukherjee建议的in this帖子所示,但这也会产生相同的cannot find symbol错误。
这是工作正常早些时候,但只要我创建了一个新的项目与最新的 cordova 和Gradle最新的Android它停止。任何帮助将不胜感激。

ivqmmu1c

ivqmmu1c1#

你使用的是哪一个版本的cordova-android?白名单包含在cordova-android 10+中,所以你应该删除插件。这确实会破坏cordova-plugin-filetransfer。要解决这个问题,你有两个选择。
1:我用补丁删除了对白名单的所有引用。像之前一样下载插件。删除node-modules文件夹中插件中对白名单的所有引用(因此,node-modules/cordova-plugin-file-transfer),然后用补丁包创建一个补丁(npm i patch-package并按照自述文件https://www.npmjs.com/package/patch-packagenpx patch-package cordova-plugin-file-transfer,这将创建一个补丁文件,该文件在安装插件时应用,因此位于/node-modules和/plugins之间)。
2:从git下载插件比从NPM下载更容易。devloper已经删除了主分支上对白名单的引用,但没有为此做标记/发布,所以它不会在NPM上更新。
仅供参考:在我的项目中,我使用cordova插件文件传输ios-fix:https://www.npmjs.com/package/cordova-plugin-file-transfer-ios-fix不确定你是否(仍然)需要使用这一个。但是如果你在iOS上遇到麻烦,你可以试试。
另请参见此SO问题:android 10 doesn't support whitelist plugin
这个问题在git repo中:https://github.com/apache/cordova-plugin-file-transfer/issues/345 PS:我之前提到的钩子是用于从android-manifest中删除权限的,Patch-package是修复插件的最佳方法

相关问题