Android Proguard Javascript Interface Fail

2022-09-01 04:38:51

我在我的项目中使用了一段代码,如此处所述

http://lexandera.com/2009/01/extracting-html-from-a-webview/

我创建了.apk文件,将其安装在我的设备上,它就可以正常工作。如果我尝试使用带有proguard的混淆,项目将失败,则无法到达MyJavaScriptInterface的方法showHTML(String html)。

关于这一点,我的前卫配置

-keep public class com.mypackage.MyClass.MyJavaScriptInterface
-keep public class * implements com.mypackage.MyClass.MyJavaScriptInterface
-keepclassmembers class * implements com.mypackage.MyClass.MyJavaScriptInterface { 
    <methods>; 
}

根据这个答案 Android proguard Javascript Interface 问题

解决。

正如Eric所建议的那样,我像这样更改了Proguard配置文件:

-keep public class com.mypackage.MyClass$MyJavaScriptInterface
-keep public class * implements com.mypackage.MyClass$MyJavaScriptInterface
-keepclassmembers class com.mypackage.MyClass$MyJavaScriptInterface { 
    <methods>; 
}

现在我的项目运行完美。

对于 API 17+,您还需要保留@JavascriptInterface注释:

-keepattributes JavascriptInterface

http://developer.android.com/reference/android/webkit/JavascriptInterface.html


答案 1

如果 MyJavaScriptInterface 是 MyClass 的内部类,ProGuard 需要一个完全限定的名称。的命名约定在 ProGuard 操作的已编译类文件中使用。请注意,ProGuard 在配置中提到了在输入 jar 中找不到的类名,这表明这些名称可能拼写错误。com.mypackage.MyClass$MyJavaScriptInterface$


答案 2
    -keepclassmembers class com.mypackage.MyClass$JavaScriptInterface {    
public *;
     }

仅使用此项。它对我有用。


推荐