无法访问Android KitKat上WebView中的资产
我的项目中包含了一个库,它公开了资产目录中的一些资产。 在安卓7上运行应用程序时,它工作得很好,webview可以很好地加载资产。今天,我在Kitkat(API 19)上测试了该应用程序,并加载了无法访问Android KitKat上WebView中的资产,android,android-studio,webview,Android,Android Studio,Webview,我的项目中包含了一个库,它公开了资产目录中的一些资产。 在安卓7上运行应用程序时,它工作得很好,webview可以很好地加载资产。今天,我在Kitkat(API 19)上测试了该应用程序,并加载了file://android_asset/someAsset.png未加载 我已经检查了为我的库创建的aar文件,它包含这些文件[显然,因为APK在Android 7上运行良好] 以下是我的网站设置: WebSettings s = getSettings(); s.setAllowFi
file://android_asset/someAsset.png
未加载
我已经检查了为我的库创建的aar文件,它包含这些文件[显然,因为APK在Android 7上运行良好]
以下是我的网站设置:
WebSettings s = getSettings();
s.setAllowFileAccess(true);
s.setSupportZoom(false);
s.setBuiltInZoomControls(false);
s.setDomStorageEnabled(true);
s.setJavaScriptCanOpenWindowsAutomatically(true);
s.setUseWideViewPort(true);
s.setLoadWithOverviewMode(true);
s.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
s.setJavaScriptEnabled(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
s.setMediaPlaybackRequiresUserGesture(false);
}
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
s.setAllowFileAccessFromFileURLs(true);
s.setAllowUniversalAccessFromFileURLs(true);
}
s.setGeolocationEnabled(false);
调试chrome时出现的错误是:找不到文件
我已经阅读了SO上发布的一些问题,这些问题涉及IntelliJ设置:“将依赖项中的资产包含到APK”
,这在Android Studio中已经不存在了。然而,我发现这个文档页面:这表明,添加
dependencies {
compile project(':myLib')
}
足以向主项目提供资产[而且显然如此,因此AAR内容]
但是,我无法让这些资源出现
我还尝试将资产目录从库复制到主项目,但仍然没有成功。它们不是由webview加载的,我得到了相同的错误。我将回答我自己的问题,因为无论问题多么愚蠢,谁知道,也许有人会偶然发现类似的问题 我使用
WebViewClient
的shouldInterceptRequest
方法加载WebView
的文件,因为所有内容都是加密的,我必须先解密
从棒棒糖开始,该方法具有不同的签名:
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request)
而不是
public WebResourceResponse shouldInterceptRequest(final WebView view, String url)
由于我使用新设备编写代码,我只需要:
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { ... }
而且效果很好。在旧设备上进行测试时,该方法根本没有被触发,并且无法找到预期的文件
在我添加了对这个方法的支持之后,一切都开始起作用了
感谢@commonware的评论。尝试
文件://
,而不是文件://
。我一直在将内容从资产加载到WebView
,没有问题。例如,从中看到。