【问题标题】:JavascriptInterface not working on Android 5JavascriptInterface 无法在 Android 5 上运行
【发布时间】:2016-09-20 08:39:25
【问题描述】:

我正在使用https://github.com/evgenyneu/js-evaluator-for-android 中的 WebView 在 WebView 中执行 javascript,并使用带有 @JavascriptInterface 注释的方法将结果返回给 java。

我在一个使用 dexguard 混淆的库项目中执行此操作。

这在 android 7、6 和 5 上运行良好。我也在一个 android 应用程序中使用该库,除了使用 Proguard 时,它在 Android 5 上停止运行,但在 android 6 上仍然有效。

我的目标是 SDK 24,最小值为 8,但代码仅用于 21 及更高版本。 @JavascriptInterface 注释和所有类都免于混淆,但这仍然不适用于 Android 5 和 6。它确实适用于 7。

知道我做错了什么吗?

经过更多测试后,我可以得出结论,当我将发布构建类型设为可调试时,它开始在发布上工作:

release {
        minifyEnabled true
        debuggable true
}

【问题讨论】:

  • 您的 logcat 中是否有任何错误发布?
  • 无关紧要。问题是,我在服务中使用了 js-evaluator-for-android,并且某些 webview 版本会在加载页面之前检查您是否在主循环器上。我不得不在主循环器上运行代码来解决这个问题。
  • @Elias:你找到解决方案了吗?至于为什么它不起作用。我面临同样的问题。谢谢
  • @sneha 它不起作用,因为某些 webview 实现会检查您的代码是否在主循环器中执行。
  • @Elias:谢谢!我能够解决这个问题。 :)

标签: javascript java android webview obfuscation


【解决方案1】:

问题是我在服务中执行此操作,一些 webview 实现会检查您是否在主循环器上运行。

我的一个解决方案是在主循环器上执行它:

this.handler = new Handler(Looper.getMainLooper());
this.handler.postDelayed(new Runnable()
    {
        @Override
        public void run()
        {
            // create a webview
            final WebView webView = new WebView(context);

            // etc
        }
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多