我的项目中包含了一个库,它在资源目录中公开了一些资产。
在Android 7上运行应用程序时,它运行良好,webview可以很好地加载资产。今天我在Kitkat上测试了应用程序(API 19),并且没有加载像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时遇到的错误是:File not found
。
我已经阅读了SO上发布的一些问题,这些问题涉及IntelliJ设置:"Include assets from dependencies into APK"
,这在Android Studio中已不存在了。我找到了这个文档页面:https://developer.android.com/studio/projects/android-library.html表示添加
dependencies {
compile project(':myLib')
}
足以为主项目提供资产[而且显然也是如此,因此AAR内容]。
但是,我无法将这些资源显示出来。
我还尝试将资产目录从库复制到主项目,但仍然没有运气。它们没有被webview加载,我得到了同样的错误。
答案 0 :(得分:0)
我将回答我自己的问题,因为无论问题多么愚蠢,谁知道,也许有人会偶然发现类似问题。
我使用shouldInterceptRequest
WebViewClient
方法加载WebView
的文件,因为所有内容都已加密,我必须先解密。
从Lollipop开始,该方法具有不同的签名:
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) { ... }
它工作正常。在旧设备上进行测试时,该方法根本没有被触发,并且找不到它预期的文件。
我添加了对此方法的支持后,一切都开始起作用了。
感谢@CommonsWare的评论。