programing

릴리스 또는 디버그 모드인지 탐지하려면 어떻게 해야 합니까?

firstcheck 2023. 6. 2. 22:36
반응형

릴리스 또는 디버그 모드인지 탐지하려면 어떻게 해야 합니까?

코드에서 릴리스 모드 또는 디버그 모드임을 감지하려면 어떻게 해야 합니까?

가장 간단하고 최상의 장기적인 해결책은BuildConfig.DEBUG이것은boolean가 될 가치true디버그 빌드의 경우false그렇지 않은 경우:

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

이클립스 기반 빌드에서 이 값이 100% 신뢰할 수 없다는 보고가 있었지만, 저는 개인적으로 문제가 발생한 적이 없기 때문에 실제로 얼마나 큰 문제인지는 말할 수 없습니다.

Android Studio를 사용하는 경우 또는 명령줄에서 Gradle을 사용하는 경우 자신의 항목을 다음에 추가할 수 있습니다.BuildConfig또는 다른 방법으로 조정합니다.debug그리고.release런타임에 이러한 상황을 구분하는 데 도움이 되는 빌드 유형입니다.

불법 인수의 해결책은 다음의 값을 기반으로 합니다.android:debuggable매니페스트의 플래그입니다.이러한 방식으로 "디버그" 빌드와 "릴리스" 빌드를 구분하려면 정의에 따라 가장 적합한 솔루션입니다.하지만, 앞으로, 다음과 같은 것을 명심하십시오.debuggable플래그는 Gradle/Android Studio가 "디버그" 빌드로 간주하는 것과는 독립적인 개념입니다.모든 빌드 유형은 다음을 설정하도록 선택할 수 있습니다.debuggable해당 개발자 및 빌드 유형에 적합한 값으로 플래그를 지정합니다.

다음을 시도합니다.

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

코틀린:

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

그것은 여기서 분델 포스트에서 찍은 것입니다.

예, 다음을 사용하면 문제가 없습니다.

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

잘못된 BuildConfig 클래스를 가져오는 경우가 아니라면요.종속성 라이브러리가 아닌 프로젝트의 BuildConfig 클래스를 참조해야 합니다.

여기에 이미지 설명 입력

에 대한 엇갈린 의견 때문에BuildConfig.DEBUG디버그 모드에서 충돌 분석(및 분석)을 사용하지 않도록 설정했습니다.

update /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
}
if (BuildConfig.DEBUG) { 



}

나에게 도움이 되는 것

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

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

build.IS_DEBUGGARBLE은 괜찮을 수 있습니다."ro.debugable"에서 왔습니다.

언급URL : https://stackoverflow.com/questions/23844667/how-do-i-detect-if-i-am-in-release-or-debug-mode

반응형