无法在Android KitKat上访问WebView中的资产

时间:2017-03-22 14:34:29

标签: android android-studio webview

我的项目中包含了一个库,它在资源目录中公开了一些资产。 在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加载,我得到了同样的错误。

1 个答案:

答案 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的评论。