and*_*asv 6 javascript android proguard webview
我的android项目中有一个自定义Webview,如下所示:
public class MyWebView extends WebView {
public MyWebView(Context context) {
super(context);
}
public class JsObject {
@JavascriptInterface
public void show() {
//...
}
@JavascriptInterface
public void hide() {
//....
}
}
Run Code Online (Sandbox Code Playgroud)
其中包括JavascriptInterface我用来从JavaScript端到Android端的通信.
在AndroidManifest中,我有以下内容
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
Run Code Online (Sandbox Code Playgroud)
在项目中,我使用了proguard,声明:
-keepattributes JavascriptInterface
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
Run Code Online (Sandbox Code Playgroud)
一切都很好.
然而,当我将AndroidManifest更改为android:targetSdkVersion=18或19测试18及以上的设备时,proguard似乎在某种程度上混淆了无法访问的JavaScript方法.
如果我回到16或少于17的东西一切正常.此外,这只发生在proguard上.如果我不使用proguard,即使使用android:targetSdkVersion=18或19,一切正常.在清单Android> 17中定位时,任何人都可以帮助它吗?
Fra*_*yen 19
我从这个主题中复制了我的答案:https://stackoverflow.com/a/19994873/1735499
而且,如果您使用的是Proguard,请记住添加它
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
-keepattributes JavascriptInterface
-keep public class com.mypackage.MyClass$MyJavaScriptInterface
-keep public class * implements com.mypackage.MyClass$MyJavaScriptInterface
-keepclassmembers class com.mypackage.MyClass$MyJavaScriptInterface {
<methods>;
}
Run Code Online (Sandbox Code Playgroud)
如果仍然不行,请添加此项
-keepattributes *Annotation*
Run Code Online (Sandbox Code Playgroud)
注意:您的MyJavaScriptInterface必须是Public类
参考号:Android Proguard Javascript接口失败
BR,
坦率
这4行通常就足够了 - 不需要公开接口.
-keepattributes JavascriptInterface
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4627 次 |
| 最近记录: |