我在res/raw
中有一些html文件,我在WebView
打开了这些文件。但是在混淆之后它们无法加载。
答案 0 :(得分:9)
我遇到了同样的问题。我有我的帮助html文件在原始和混淆后我运行我的应用程序,并得到一个错误,无法找到该文件。
这是我的HelpActivity类:
public class HelpActivity extends BaseActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// requesting to turn the title OFF
//requestWindowFeature(Window.FEATURE_NO_TITLE);
// making it full screen
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.help);
setTitle(getString(R.string.help_title));
WebView webView = (WebView) findViewById(R.id.webView);
webView.loadUrl("file:///android_" + getString(R.raw.how_to_play_zeewee));
}
}
我通过在proguard.cfg文件中添加以下内容来修复此问题:
-keepclassmembers class **.R$* {public static <fields>;}
-keep class **.R$*
您可能已经拥有第一行,但这并不能解决问题。添加第二行完全消除了这个问题。我不认为第一行仍然需要,但我还没有测试过 - 而且因为它目前有效......;)。
答案 1 :(得分:1)
建议https://stackoverflow.com/a/19579355/6103242
-keep class **.R$*
不是最优雅的解决方案,因为它指示ProGuard保留所有R类,而不管它们所在的包。
与WebView有同样的问题,我在Logcat中看到的错误:
... E / AndroidProtocolHandler:无法打开资源网址:file:///android_res/raw/$MISSING_RESOURCE_NAME.css java.lang.ClassNotFoundException:没找到类 路径上的“my.app.package.R $ raw”:DexPathList [[...
我添加到proguard-rules.pro
文件的限制最多的指令:
-keepnames class my.app.package.R$raw { public static <fields>; }
显然,由于R
类只包含字段,而且所有这些字段都有public static
类型,实际上,上面的字段和
-keepnames class my.app.package.R$raw { *; }
但是,我在这里
R
以外的raw
中的所有其他内部类的收缩和混淆。 仅在一个特定包中定位R
。
如果您的项目中有多个模块提供了自己的资源,而您正在构建的某个特定的APK(例如,拥有多个android_application模块),那么该方法应该会更好。 APK来源 - 在您的项目中也是如此。
要了解-keepnames
和-keep
之间的区别,请参阅
'区分不同的ProGuard“-keep”指令' 5月29日星期二04:10:50 MSK 2018年 https://jebware.com/blog/?p=418
答案 2 :(得分:0)
在 proguard.cfg 中添加以下内容,看看它是否有任何区别
-keep public class com.yourPackageName.yourAppName.R
-keepclassmembers class **.R$ { public static ; }
答案 3 :(得分:0)
答案 4 :(得分:0)
也可以通过在包含内容的 xml
文件夹中创建一个 keep.xml
文件 raw
来完成
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@raw/*">
</resources>
它会将所有文件保存在 raw
文件夹中,如果您想将其限制为只能使用一个特定文件
tools:keep="@raw/fileName"
注意最后不要添加文件扩展名,所以不应该是filename.html