使用 proguard 混淆后我的项目因 javascriptinterface 而失败
这里是一些混淆器配置建议的链接,但它在我的情况下不起作用
http://groups.google.com/group/android-developers/browse_thread/thread/f889e846fbf7ec3f?pli=1
因此来自 Javascript 的调用松散绑定(bind)到关联的 Java 方法
关于那个的我的proguard配置
-keep public class com.trans_code.android.JavascriptCallback
-keep public class * implements com.trans_code.android.JavascriptCallback
-keepclassmembers class * implements com.trans_code.android.JavascriptCallback {
<methods>;
}
-keepclassmembers class * implements JavascriptCallback {
void on*(***);
}
-keep public class com.trans_code.** {
public protected *;
}
-keepclasseswithmembernames class com.MyActivity$JavascriptInterface
-keepclasseswithmembernames class com.MyActivity$JavascriptInterface {
public protected *;
}
如果有人知道如何配置混淆器让它过滤掉相关的方法和类,那将对我有很大帮助
最佳答案
来自该原始线程的类名称特定于该用户的 Java 类,而不是对所有 javascript 接口(interface)通用。您实现的 javascript 接口(interface)只是一个简单的基类。
您需要更改它们以匹配您的接口(interface)类的名称。
例如,基于原始线程中的示例,示例代码 WebViewDemo 的正确配置为:
-keep public class com.google.android.webviewdemo.WebViewDemo.DemoJavaScriptInterface
-keep public class * implements com.google.android.webviewdemo.WebViewDemo.DemoJavaScriptInterface
-keepclassmembers class * implements com.google.android.webviewdemo.WebViewDemo.DemoJavaScriptInterface {
<methods>;
}
由于绑定(bind)的工作方式,真正需要做的就是防止将从 javascript 调用的内部方法的名称被混淆,但防止类名被混淆也没有坏处。
关于javascript - Android proguard Javascript接口(interface)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5356560/