我的Android应用程序可以检测它是否是从Eclipse启动的吗?

时间:2013-07-10 00:55:14

标签: android eclipse

Android活动有没有办法检测它是如何启动的?具体来说,我想检测我的应用程序是否是从Eclipse启动的,而不是它是否正常启动(例如,从主屏幕或已安装的应用程序列表)。

这是了解是否应该上传崩溃报告的代理。我假设如果Eclipse启动了应用程序,那么我就不需要上传崩溃,因为我已经在调试应用程序,但是如果应用程序的相同构建“正常”启动,我想上传任何异常。

这只是为了让我的个人调试和开发变得更容易,因此对Eclipse来说不可理解的黑客或调整对我很有用。

3 个答案:

答案 0 :(得分:2)

This方法似乎可以满足您的需求:

if(!android.os.Debug.isDebuggerConnected()) {
    // Send report...
}

这应该告诉您当前是否已连接到调试器。如果从应用程序抽屉或主屏幕快捷方式启动,则不会附加(除非您已经有 附加的正在运行的实例)并且此方法将返回false - 在这种情况下,您可以上传崩溃信息。

答案 1 :(得分:1)

你可以使用 if (BuildConfig.DEBUG)  从发布版本中告诉调试版本。

答案 2 :(得分:1)

你(我?)可以向应用添加新活动,并让Eclipse启动它。新活动将设置一个标志,否则不会设置,否则是相同的。定期使用该应用程序将通过默认活动,因此该标志将默认为未设置。

添加一个扩展现有活动的新DebugActivity(称之为MainActivity):

public class DebugActivity extends MainActivity {
    public DebugActivity() {
        super(true); // running from Eclipse
    }
}

MainActivity添加一个新的布尔构造函数和no-arg构造函数以支持新的子类:

private final boolean viaEclipse;

public MainActivity() {
    this(false);
}

public MainActivity(boolean viaEclipse) {
    this.viaEclipse = viaEclipse;
}

复制<activity>的应用清单中的.MainActivity信息,但更改副本以引用新的.DebugActivity。从<category> .DebugActivity中移除<intent-filter>标记(“发布者”标记)以防止其显示在Android UI中。

在Eclipse中,选择Run -> Run Configurations ...。选择应用程序的现有运行配置。单击“复制当前选定的启动配置”图标,然后在重复的Android选项卡上将Launch Action从“启动默认活动”更改为“启动:”并选择新的{{1 }}

<强>缺点

  1. Eclipse“debug”运行与“实际”运行不同,但差异非常小(基本上只是启动类名称和堆栈上的额外条目)。 Java方面至少没有重复的代码。

  2. 我复制了清单中.DebugActivity的大部分内容,这有点脆弱但不算太差。

  3. 拥有比这更简单的东西仍然会很好。