【发布时间】:2021-11-05 05:39:29
【问题描述】:
我正在尝试更新我的 cordova 应用程序以使用 SDK 30 而不是 29,但我遇到了一个无法解决的问题。
显然,在 Android SDK 29 和 30 之间,webview 的 setAllowAccessFile 的默认值从 true 更改为 false。问题是,在我的 cordova 应用程序中,我无法访问 WebView API,因此需要更改它config.xml 文件的值。但我找不到任何合适的选项。
或者至少,我认为问题来自这里。
App 是一个使用 Cordova 10 为 Android 打包的 Angular 应用程序。我尝试从 Android 8.1.0 切换到 Android 10,以添加新的 MANAGE_EXTERNAL_STORAGE 权限,以及一些我很确定不会工作的其他东西但是,嗯...但是什么都没有改变。
如果您对如何做到这一点有任何想法,或者问题可能出在哪里,我很乐意听取您的建议。
非常感谢。
config.xml:
<?xml version='1.0.0' encoding='utf-8'?>
<widget xmlns:android="http://schemas.android.com/apk/res/android" id="my.package.name" version="1.0.6" xmlns="http://www.w3.org/ns/widgets">
<name>My package name</name>
<description>
</description>
<author email="my.email@email.com" href="https://my.website">
My website
</author>
<content src="index.html"/>
<plugin name="cordova-plugin-whitelist" spec="1"/>
<plugin name="cordova-plugin-wkwebview-engine" spec="https://github.com/driftyco/cordova-plugin-wkwebview-engine.git"/>
<plugin name="cordova-plugin-wkwebview-engine" spec="1.2.1"/>
<plugin name="cordova-plugin-device" spec="~1.1.5"/>
<plugin name="cordova-plugin-statusbar" spec="~2.2.2"/>
<plugin name="cordova-plugin-splashscreen" spec="~4.0.2"/>
<plugin name="cordova-plugin-file" spec="~6.0.0"/>
<plugin name="cordova-plugin-zip" spec="~3.1.0"/>
<plugin name="cordova-plugin-app-version" spec="~0.1.9"/>
<plugin name="cordova-plugin-network-information" spec="~3.0.0"/>
<plugin name="cordova-plugin-save-image" spec="0.2.5"/>
<plugin name="cordova-plugin-customurlscheme" spec="https://github.com/EddyVerbruggen/Custom-URL-scheme.git">
<variable name="URL_SCHEME" value="my.package.name" />
</plugin>
<plugin name="cordova-plugin-intent" spec="https://github.com/napolitano/cordova-plugin-intent.git" />
<feature name="StatusBar">
<param name="ios-package" value="CDVStatusBar" onload="true"/>
</feature>
<preference name="Fullscreen" value="true" />
<preference name="StatusBarOverlaysWebView" value="false"/>
<preference name="DisallowOverscroll" value="true"/>
<preference name="SplashScreen" value="screen"/>
<preference name="SplashScreenDelay" value="3000"/>
<preference name="SplashMaintainAspectRatio" value="true"/>
<preference name="SplashScreenBackgroundColor" value="white"/>
<preference name="android-minSdkVersion" value="21"/>
<preference name="android-targetSdkVersion" value="30"/>
<preference name="Orientation" value="landscape"/>
<access origin="*"/>
<allow-navigation href="http://localhost:8080/*"/>
<feature name="CDVWKWebViewEngine">
<param name="ios-package" value="CDVWKWebViewEngine"/>
</feature>
<preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine"/>
<allow-intent href="http://*/*"/>
<allow-intent href="https://*/*"/>
<allow-intent href="tel:*"/>
<allow-intent href="sms:*"/>
<allow-intent href="mailto:*"/>
<allow-intent href="geo:*"/>
<platform name="android">
<edit-config file="AndroidManifest.xml" target="/manifest/application" mode="merge">
<application android:allowBackup="false"/>
</edit-config>
<edit-config file="AndroidManifest.xml" target="/manifest/application" mode="merge">
<application android:fullBackupContent="false"/>
</edit-config>
<edit-config file="AndroidManifest.xml" target="/manifest/application" mode="merge">
<application android:largeHeap="true" />
</edit-config>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<preference name="AndroidLaunchMode" value="singleTask"/>
<allow-intent href="market:*"/>
<intent-filter>
<action name="android.intent.action.SEND"/>
<action name="android.intent.action.SEND_MULTIPLE"/>
<category name="android.intent.category.DEFAULT"/>
<data mimeType="*/*"/>
</intent-filter>
<intent-filter label="@string/launcher_name">
<action name="android.intent.action.MAIN" />
<category name="android.intent.category.LAUNCHER" />
</intent-filter>
</platform>
<platform name="ios">
<allow-intent href="itms:*"/>
<allow-intent href="itms-apps:*"/>
<preference name="WKWebViewOnly" value="true" />
<feature name="CDVWKWebViewEngine">
<param name="ios-package" value="CDVWKWebViewEngine" />
</feature>
<preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" />
</platform>
<engine name="ios" spec="~5.1.1"/>
<engine name="android" spec="~10.0.0"/>
</widget>
【问题讨论】:
-
其他几个问题:(1) 您是否还要求在您的应用中获得 Android 运行时权限? (2) 在您的应用程序中,您是否只是在范围内的存储沙箱(即 cordova.plugin.file dataDirectory 和 externalDataDirectory)中寻找文件?
-
1:不知道您所说的“Android 运行时权限”是什么意思,抱歉。您的意思是在运行时询问清单中的其他权限吗?如果是这样,不,我不知道。 2:不行,我只读取externalApplicationStorageDirectory里面的文件,我试过改成externalDataDirectory也没用。