Proguard打破Android WebView,为什么?

Proguard打破Android WebView,为什么?,第1张

概述我的活动中有一个WebView,使用Proguard进行混淆似乎打破了我的WebView,我不明白为什么. 代码非常简单,我在res / raw目录中有HTML文件,这里是调试时加载它的代码. WebView mv = (WebView)findViewById(R.id.webView1);mv.loadUrl("file:///android_res/raw/wesite.html"); 一 我的活动中有一个WebVIEw,使用Proguard进行混淆似乎打破了我的WebVIEw,我不明白为什么.

代码非常简单,我在res / raw目录中有HTML文件,这里是调试时加载它的代码.

WebVIEw mv = (WebVIEw)findVIEwByID(R.ID.webVIEw1);mv.loadUrl("file:///androID_res/raw/wesite.HTML");

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

我还没有在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$*

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

希望这可以帮助

总结

以上是内存溢出为你收集整理的Proguard打破Android WebView,为什么?全部内容,希望文章能够帮你解决Proguard打破Android WebView,为什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1140845.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存