Ne0*_*Ne0 6 android proguard webview
我的活动中有一个WebView,使用Proguard进行混淆似乎打破了我的WebView,我不明白为什么.
代码非常简单,我在res/raw目录中有HTML文件,这里是调试时加载它的代码.
WebView mv = (WebView)findViewById(R.id.webView1);
mv.loadUrl("file:///android_res/raw/wesite.html");
Run Code Online (Sandbox Code Playgroud)
一旦我创建apk发布,通过proguard运行它不起作用,我只是得到无法加载页面.
我还没有在proguard配置文件中添加任何内容.
bid*_*h.r 10
Proguard会混淆目录,所以如果你正在寻找android_res/raw,它可能不再被称为!
您可以将规则添加到项目中的proguard.cfg文件中,以使其跳过某些文件.但在这种情况下,将原始资源移动到assets文件夹就可以了.
问题是Webkit FileLoader将尝试使用反射加载您的R $ drawable类.如果您没有向proguard.cfg文件添加任何保留规则,那么将重命名该类,因此Webkit将无法加载您的资源.(取自Prevent Proguard删除特定的drawables).
这就是Android为资源使用R类命名系统的原因 - 一个独特的查找ID,而不是按位置引用文件
通过将文件放入assets文件夹,您可以绕过R类引用系统,一切都可以正常工作.
您应该将您的website.html文件移动到assets文件夹并调用:
mv.loadUrl("file:///android_asset/wesite.html");
Run Code Online (Sandbox Code Playgroud)
正如上面的链接所示,应该可以将以下规则添加到Proguard.cfg文件中,以阻止资源位置被取代:
-keepclassmembers class **.R$* {
public static <fields>;
}
-keep class **.R$*
Run Code Online (Sandbox Code Playgroud)
请记住混淆的方式是有原因的!
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
4759 次 |
| 最近记录: |