我有一些html文件res/raw
,我在其中打开WebView
.但是在混淆之后他们无法加载.
小智 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));
}
}
Run Code Online (Sandbox Code Playgroud)
我通过在proguard.cfg文件中添加以下内容来修复此问题:
-keepclassmembers class **.R$* {public static <fields>;}
-keep class **.R$*
Run Code Online (Sandbox Code Playgroud)
您可能已经拥有第一行,但这并不能解决问题.添加第二行完全消除了这个问题.我不认为第一行仍然是需要的,但我还没有测试过 - 而且因为它目前有效......;).
-keep class **.R$*
Run Code Online (Sandbox Code Playgroud)
不是最优雅的解决方案,因为它指示 ProGuard 保留所有R
类,而不管它们在哪个包中。
有同样的问题WebView
,我在我的 Logcat 中看到的错误:
... E/AndroidProtocolHandler:无法打开资源 URL: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>; }
Run Code Online (Sandbox Code Playgroud)
显然,由于R
类只包含字段并且所有这些字段都有public static
类型,因此在实践中,上面的和
-keepnames class my.app.package.R$raw { *; }
Run Code Online (Sandbox Code Playgroud)
然而,我在这里
R
除raw
.只针对R
一个特定的包。
如果您的项目中有多个模块提供自己的资源,而您正在构建的特定 APK 可能不需要这些资源(例如,有多个 android_application 模块 – APK 源 – ),那么这种方法应该会更好。在您的项目中也是如此)。
理解上的差异之间-keepnames
和-keep
,请参阅下面的内容。
区分不同的 ProGuard-keep
指令 - 2018 年 5 月 29 日星期二 04:10:50 MSK
归档时间: |
|
查看次数: |
4049 次 |
最近记录: |