Android Proguard Javascript界面失败
我在我的项目中使用了这里描述的一段代码
http://lexandera.com/2009/01/extracting-html-from-a-webview/
我创build.apk文件,将其安装在我的设备上并正确工作。 如果我尝试使用proguard进行混淆,则项目失败,但未达到MyJavaScriptInterface的showHTML(String html)方法。
我的proguardconfiguration
-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接口的问题 。
解决了。
正如埃里克build议,我改变了Proguardconfiguration文件,像这样:
 -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
 如果MyJavaScriptInterface是MyClass的内部类,则ProGuard需要一个完全限定的名称com.mypackage.MyClass$MyJavaScriptInterface 。 使用$的命名约定用于ProGuard所运行的已编译的类文件中。 请注意,ProGuard在configuration中提到无法在inputjar中find的类名,表明这些名称可能拼写错误。 
  -keepclassmembers class com.mypackage.MyClass$JavaScriptInterface { public *; } 
只使用这个。 这个对我有用。
那些懒散地提供整个包path的人。
 -keepclassmembers class **.*$PaymentJavaScriptInterface{ public *; } 
正如编辑提出的那样,在这些build议中,只有使用
 -keepclassmembers class com.mypackage.MyClass$MyJavaScriptInterface { public *; } 
与重要 –
对于API 17+保留@JavascriptInterface注释:
 -keepattributes JavascriptInterface 
(这是停止我的应用程序在棉花糖上工作)