自带有proguard的android 4.2以来,我遇到了一个问题。
基本上我在这样的 webview 上使用 JavascriptInterface:
public class MyJavascriptInterface {
public void doSomething() { ... }
}
现在我明白的是,当 proguard 混淆代码时,它会重命名类名和方法名,因此不能再从 Javascript 调用它。这就是为什么我必须将它添加到 proguard 配置中:
-keepclassmembers class mypackage.MyJavascriptInterface {
public void doSomething();
}
当我将目标 sdk 设置为 17 (Android 4.2) 时,出于安全原因,我必须将@JavascriptInterface
注释添加到我的 Javascript 接口方法中:
@JavascriptInterface
public class MyJavascriptInterface {
public void doSomething() { ... }
}
现在的问题是,如果启用了 proguard,这将不再起作用(doSomething 不会被调用,就好像在混淆步骤中仍然重命名了类一样)。如果我禁用 proguard,则代码可以正常工作。
如何使用目标 sdk 17 进行这项工作?