【问题标题】:How to force a crash of Android app, from a Cordova plug-in class?如何从 Cordova 插件类强制 Android 应用程序崩溃?
【发布时间】:2015-01-24 19:56:41
【问题描述】:

我需要从 Cordova 插件类内部强制一个 Android 应用程序崩溃。

问题是插件类在单独的线程中运行,所以即使我强制使用RuntimeException(),它也只会崩溃分离的线程。

【问题讨论】:

    标签: android cordova crash


    【解决方案1】:

    如果您想从 cordova 插件崩溃应用程序/或按 android 应用程序中的菜单按钮,您必须编辑 cordova 项目中的几个类,如 how to make my phonegap android app crash? 中所述。

    从 Javascript 调用一些本机函数导致崩溃:

    为 Phonegap 编写一个 Android 原生插件。请参阅http://docs.phonegap.com/en/3.0.0/guide_platforms_android_plugin.md.html#Android%20Plugins 以创建插件。在执行方法中抛出异常。这将在父层处理(这就是为什么您可以在控制台中看到有关崩溃的日志),因此请进行以下更改以使应用程序崩溃。(这两个类都属于 org.apache.cordova 包)

    • 删除 pluginManager 类的 execHelper 方法中的 catch (Exception e){} 块。
    • 删除 ExposedJsApi 类的 exec 方法中的 catch (Throwable e) {} 块。

    通过此更改,我可以通过 javascript 调用使应用程序崩溃。

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    • @Gautam 使用所需的 sn-ps 编辑了答案。谢谢你的建议:)。
    【解决方案2】:

    您的插件代码应该做的是在您的未处理异常上定义处理程序,如在Rahits answer 上定义的那样。想法是附加到这样的事件(从链接的答案中借用的代码)

    Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
      public void uncaughtException(Thread paramThread, Throwable paramThrowable) {
        Log.e("Error"+Thread.currentThread().getStackTrace()[2],paramThrowable.getLocalizedMessage());
      }
    });
    

    然后当回调被调用时,抛出真正的异常,从而产生预期的效果。

    【讨论】:

    • 所以,我把你上面建议的 sn-p 放在我主要活动的 onCreate() 之后。之后,我调用了我强制运行 RuntimeException() 的 cordova 插件:但抛出的异常没有被我的主要活动的 uncaughtException() 处理程序捕获。发生的事情是 JAVA 和 JS 之间的“通信”中断并出现如下错误消息:
    • “processMessage 失败:消息:S01 WLCustomDialog452008395 n2”,来源:file:///android_asset/www/default/wlclient/js/cordova.js (976)“processMessage 失败:错误:错误:在 NPObject 上调用方法时出错。”,来源:file:///android_asset/www/default/wlclient/js/cordova.js (977) “processMessage 失败:堆栈:错误:在 NPObject 上调用方法时出错。在 Object.androidExec [作为 exec] (file:///android_asset/www/default/wlclient/js/cordova.js:860:48) 等...
    • @GiuseppeRobertoRossi:那么在处理程序中,您也应该使该线程崩溃以使整个应用程序崩溃?
    • 是的,我需要在 cordova 插件中使应用程序崩溃,因为我不能在 javascript 中使用
    • 是的,那你为什么不能在主线程 AFAIK 中运行的异常处理程序上崩溃呢?
    猜你喜欢
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多