【发布时间】:2011-09-10 10:03:01
【问题描述】:
我在我的项目中使用了这里描述的一段代码
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>;
}
根据这个答案Android proguard Javascript Interface problem。
已解决。
按照 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
【问题讨论】:
-
还必须添加 -keepatributes InnerClasses,否则 ProGuard 会混淆内部类的名称并且 $ 不适用。至少在我保留此属性之前,这对我不起作用。
-
-keepattributes仅在您使用混淆时适用。 proguard.sourceforge.net/manual/usage.html#obfuscationoptions -
添加
-keepattributes JavascriptInterface对我不起作用。我添加了-keepattributes *Annotation*以使我的 JavaScript 在发布 APK 中工作。
标签: java android proguard obfuscation