gpt4 book ai didi

android - Proguard 破坏了 Android WebView,为什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:41:20 27 4
gpt4 key购买 nike

我的 Activity 中有一个 WebView,使用 Proguard 进行混淆似乎破坏了我的 WebView,我不明白为什么。

代码非常简单,我的 res/raw 目录中有 HTML 文件,下面是调试时加载它的代码。

WebView mv = (WebView)findViewById(R.id.webView1);
mv.loadUrl("file:///android_res/raw/wesite.html");

一旦我创建了要发布的 apk,通过 proguard 运行它就不起作用,我只得到无法加载页面。

我还没有在混淆配置文件中添加任何东西。

最佳答案

Proguard 混淆了目录,所以如果你正在寻找 android_res/raw,它可能不再叫那个了!

您可以向项目中的 proguard.cfg 文件添加规则,使其跳过某些文件。但在这种情况下,将原始资源移动到 Assets 文件夹就可以解决问题。

问题在于 Webkit FileLoader 将尝试使用反射加载您的 R$drawable 类。如果您不向 proguard.cfg 文件添加任何保留规则,该类将被重命名,因此 Webkit 将无法加载您的资源。(取自 Prevent Proguard to remove specific drawables )。

这就是 Android 为资源使用 R 类命名系统的原因 - 一个唯一的查找 ID,而不是通过文件的位置引用文件

通过将文件放入 assets 文件夹,您可以绕过 R 类引用系统,并且一切正常。

您应该将您的 website.html 文件移动到 Assets 文件夹中并调用:

mv.loadUrl("file:///android_asset/wesite.html");

正如上面链接中所建议的那样,应该可以将以下规则添加到您的 Proguard.cfg 文件中以停止混淆资源位置:

-keepclassmembers class **.R$* {
public static <fields>;
}

-keep class **.R$*

请记住,混淆的工作方式是有原因的!

希望对你有帮助

关于android - Proguard 破坏了 Android WebView,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12112102/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com