作者:PHP_sunshine | 来源:互联网 | 2023-05-23 13:16
我正在为phonegap android应用程序开发一个崩溃记者插件.出于测试目的,我必须使我的应用程序崩溃并且"不幸的是,应用程序已停止"窗口必须被调用.当我在Javascript中制作未处理的异常时,应用程序不会崩溃.相反,它显示相同的屏幕.我让应用程序屏幕停止响应用户输入,在Javascript中执行一些无限循环并等待大约1小时,仍然应用程序没有崩溃.默认情况下,phonegap库是否处理异常?如何通过在Javascript级别进行异常来使我的应用程序崩溃?
我尝试了下面的代码,在'CordovaActivity'类中添加了一个生成崩溃的java方法.
public static void generateCrash()
{
int a = 0;
int b = 10;
int c = b/a ;
}
当我从java(来自活动类中的'onCreate')调用此方法时,应用程序崩溃.但是当我使用插件从Javascript调用相同的方法时,应用程序不会崩溃.我希望我的应用程序通过调用/调用Javascript中的某些函数来崩溃.
1> kumar..:
按菜单按钮崩溃:
您无法通过插件或Javascript调用使应用程序崩溃,因为异常是在内部处理的.如果你想在Android中使应用程序崩溃,你可以在Android平台上编辑CordovaActivity.java.更改onCreateOptionsMenu,如下所示:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
this.postMessage("onCreateOptionsMenu", menu);
throw new RuntimeException();
}
按菜单按钮,应用程序将崩溃&"不幸的是,应用程序已停止"窗口将显示.
通过从Javascript调用一些本机函数崩溃:
为Phonegap编写一个Android原生插件.有关插件创建,请参阅http://docs.phonegap.com/en/3.0.0/guide_platforms_android_plugin.md.html#Android%20Plugins.在execute方法中抛出异常.这将在父层中处理(这就是为什么你可以在控制台中看到有关崩溃的日志),所以请做以下更改以使应用程序崩溃.(这两个类都属于org.apache.cordova包)
删除pluginManager类的execHelper方法中的catch (Exception e){}
块.
catch (Throwable e) {}
在ExposedJsApi类的exec方法中删除块.
通过此更改,我可以从Javascript调用中崩溃应用程序.
2> Travis..:
如果一个应用程序像网页一样运行,无限循环可能需要一些时间才能导致崩溃,但应该有效.记得在测试后将其删除.因为它会导致异常并导致程序超时,所以如果在其中使用了可能有害的内容,则应该正确调用崩溃.做这样的事情:
while(true){ eval("9.99999e+5000 / Infinity"); }
因为我们不编辑变量,所以我们将防止out of memory
错误.
如果这不起作用,请参阅@Aaron D的答案,如果这不起作用,请参阅@ kumar的答案.