草庐IT

javascript - Android proguard Javascript接口(interface)问题

coder 2023-11-29 原文

使用 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/

有关javascript - Android proguard Javascript接口(interface)问题的更多相关文章

随机推荐