如何以编程方式判断我的应用程序是否正在调试?

时间:2018-11-30 15:49:23

标签: android debugging

我正在寻找一种方法来判断我的应用是在调试器下运行还是在Android Studio下“正常”运行。

这两种情况是
1.单击“运行应用程序”按钮(绿色箭头)运行该应用程序
2.单击“调试应用程序”按钮(齿轮图标)来运行该应用程序

我想在调试时输出更多详细的诊断信息(使用Log。*)。
我尝试检查BuildConfig.DEBUG,但这两种情况均为TRUE。我怀疑这是因为在这两种情况下,Android Studio均使用 Debug Certificate 签署了该应用程序。

有人知道如何在运行时区分这两种情况吗?

2 个答案:

答案 0 :(得分:2)

通常会检查BuildConfig.DEBUG(或保存它的boolean变量),然后记录:

if(BuildConfig.DEBUG) {Log.d("SomeActivity", "debug message");}

请参阅documentation ...与调试最相关的是build-config debuggable true/false

run按钮不会启动调试器;无论构建配置如何(它都会跳过所有断点)。

在多模块项目中,应检查以下内容:

(getContext().getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0 

要区分它们,需要配置两种构建类型:

android {
    ...
    buildTypes {
        debug {
            ...
            renderscriptDebuggable true
            jniDebuggable true
            debuggable true
        }
        release {
            ...
            renderscriptDebuggable false
            jniDebuggable false
            debuggable false
        }
    }
}

为了精确回答这个问题,甚至还有一种叫做isDebuggerConnected()的方法,当按下false按钮时,无论构建配置如何,该方法总是返回run。 / p>

答案 1 :(得分:0)

“运行应用”

这会将应用程序安装到您的设备/仿真器中

“调试应用”

这将使您能够通过将断点放入代码中来调试功能。 这意味着您将能够在此时停止执行代码并逐行调试它。要了解有关在Android中进行调试的更多信息,请参见this

这两个应用程序都是调试应用程序。 要了解有关构建类型的更多信息,请阅读this