릴리스 또는 디버그 모드인지 어떻게 알 수 있습니까? 디버그 모드에 있음을 어떻게 감지합니까?

코드에서 릴리스 모드 또는 디버그 모드에 있음을 어떻게 감지합니까?



답변

가장 간단하고 최상의 장기 솔루션은을 사용하는 것 BuildConfig.DEBUG입니다. 이는 디버그 빌드에 대한 boolean값입니다 true. false그렇지 않으면 다음과 같습니다.

if (BuildConfig.DEBUG) {
  // do something for a debug build
}

개인적으로 문제가 발생하지 않았지만이 문제가 Eclipse 기반 빌드에서 100 % 신뢰할 수 없다는보고가 있었으므로 실제로 문제의 정도를 말할 수는 없습니다.

Android Studio를 사용 중이거나 명령 행에서 Gradle을 사용중인 경우 런타임시 이러한 상황을 구별하는 데 도움이되도록 빌드 및 빌드 유형에 자체 항목을 추가 BuildConfig하거나 조정할 수 있습니다.debugrelease

Illegal Argument의 솔루션 android:debuggable은 매니페스트 의 플래그 값을 기반으로합니다 . 이것이 “디버그”빌드와 “릴리스”빌드를 구별하려는 방법이라면 정의에 따르면 이것이 최상의 솔루션입니다. 그러나 앞으로 debuggable플래그는 Gradle / Android Studio가 “디버그”빌드로 간주하는 것과는 독립적 인 개념입니다. 모든 빌드 유형은 debuggable해당 개발자 및 해당 빌드 유형에 적합한 값으로 플래그 를 설정하도록 선택할 수 있습니다 .


답변

다음을 시도하십시오 :

boolean isDebuggable =  ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );

코 틀린 :

val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE

여기 에서 bundells 포스트에서 가져옵니다


답변

예, 다음을 사용하는 데 아무런 문제가 없습니다.

if (BuildConfig.DEBUG) {
   //It's not a release version.
}

잘못된 BuildConfig 클래스를 가져 오지 않는 한. 종속성 라이브러리가 아닌 프로젝트의 BuildConfig 클래스를 참조하고 있는지 확인하십시오.


답변

에 대한 혼합 의견으로 인해 BuildConfig.DEBUG다음을 사용하여 디버그 모드에서 crashlytics (및 분석)를 비활성화했습니다.

/app/build.gradle 업데이트

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.1"

    defaultConfig {
        applicationId "your.awesome.app"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 100
        versionName "1.0.0"
        buildConfigField 'boolean', 'ENABLE_CRASHLYTICS', 'true'
    }
    buildTypes {
        debug {
            debuggable true
            minifyEnabled false
            buildConfigField 'boolean', 'ENABLE_CRASHLYTICS', 'false'
        }
        release {
            debuggable false
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

그런 다음 코드에서 ENABLE_CRASHLYTICS다음과 같이 플래그 를 감지합니다 .

    if (BuildConfig.ENABLE_CRASHLYTICS)
    {
        // enable crashlytics and answers (Crashlytics by default includes Answers)
        Fabric.with(this, new Crashlytics());
    }

앱에서 동일한 개념을 사용하고 ENABLE_CRASHLYTICS원하는 이름 으로 바꿉니다 . 구성에서 플래그를 볼 수 있고 플래그를 제어 할 수 있기 때문에이 방법이 마음에 듭니다.


답변

또는 BuildConfig.BUILD_TYPE을 사용하여 차별화 할 수 있습니다 .

디버그 빌드를 실행하면
BuildConfig.BUILD_TYPE.equals("debug");true를 반환합니다. 그리고 릴리스 빌드의 BuildConfig.BUILD_TYPE.equals("release");경우 true를 리턴합니다.


답변

내 앱이 디버그 버전에서 실행되고 있음을 알기 위해이 솔루션을 사용하고 있습니다.

if (BuildConfig.BUILD_TYPE.equals("Debug")){
   //Do something
}

답변

올바른 BuildConfig 클래스를 가져오고 있는지 확인하십시오. 예, 다음을 사용하는 데 아무런 문제가 없습니다.

if (BuildConfig.DEBUG) {
   //It's not a release version.
}