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
(这是停止我的应用程序在棉花糖上工作)