Android Proguard Javascript界面​​失败

Den*_*nis 38 java obfuscation android proguard

我在我的项目中使用了这里描述的一段代码

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

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

关于那个我的proguard配置

-keep public class com.mypackage.MyClass.MyJavaScriptInterface
-keep public class * implements com.mypackage.MyClass.MyJavaScriptInterface
-keepclassmembers class * implements com.mypackage.MyClass.MyJavaScriptInterface { 
    <methods>; 
}
Run Code Online (Sandbox Code Playgroud)

根据这个答案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>; 
}
Run Code Online (Sandbox Code Playgroud)

现在我的项目完美无缺.

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

-keepattributes JavascriptInterface
Run Code Online (Sandbox Code Playgroud)

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

Eri*_*une 32

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

  • 嗨埃里克,我解决了这个问题.我在Proguard配置文件中出错了.我写道:-keepclassmembers class*implements com.mypackage.MyClass $ MyJavaScriptInterface {<methods>; } -keepclassmembers类com.mypackage.MyClass $ MyJavaScriptInterface {<methods>; 感谢支持. (3认同)