【问题标题】:Why addJavascriptInterface not working after publish?为什么 addJavascriptInterface 在发布后不起作用?
【发布时间】:2014-10-15 04:31:43
【问题描述】:

我在我的应用程序中使用 addJavascriptInterface 从 Javascript 弹出一个共享窗口。

问题是:我在开发环境中使用手机时可以看到弹出窗口。但在发布到 Google 并下载后无法正常工作。我正在使用 Android 4.2 Jellybean mobile 进行测试。

我尝试了几种方法,但都没有奏效。

---------onCreate----------

wvMainMenu = (WebView) findViewById(R.id.wvMainMenu);

    wvMainMenu.getSettings().setJavaScriptEnabled(true);
    wvMainMenu.getSettings().setLightTouchEnabled(true);
    wvMainMenu.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    wvMainMenu.addJavascriptInterface(new WebappInterface(this), "Android");

-------Javascript内部----------------

函数 share_it(id) {

Android.share_this(msg[id]);

}

-----WebappInterface.java--------

@Javascript接口 公共无效share_this(字符串str) {

    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);

    String sharedText = "Text to share " + str;

    sendIntent.putExtra(Intent.EXTRA_TEXT, sharedText);
    sendIntent.setType("text/plain");
    mContext.startActivity(sendIntent);



}

【问题讨论】:

    标签: android


    【解决方案1】:

    好的。没有人回答,但我自己解决了这个问题。当您使用 Proguard 时,您的方法名称会更改。因此,在从 javascript 调用它们时,由于方法名称更改,调用方法不起作用。

    所以这里发生了什么,当我在开发期间运行时,由于开发中没有 Proguard,它运行良好。但是当生成签名的 apk 时,Proguard 会混淆方法名称并停止 javascript 接口的功能。

    您有两个选择: 1.禁用Proguard 2.Proguard添加异常

    【讨论】:

    • 这对我来说是一个很好的线索...以下是您必须添加到 proguard-rules.pro 中的行: -keepclassmembers class * { @android.webkit.JavascriptInterface ; } -keepattributes JavascriptInterface 这是另一个来源...stackoverflow.com/questions/17629507/…
    • 添加@Keep注解即可。
    猜你喜欢
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 2019-06-04
    • 2021-11-28
    • 2013-11-12
    • 1970-01-01
    • 2019-05-20
    • 2014-06-06
    相关资源
    最近更新 更多