코드에서 릴리스 모드 또는 디버그 모드에 있음을 어떻게 감지합니까?
답변
가장 간단하고 최상의 장기 솔루션은을 사용하는 것 BuildConfig.DEBUG
입니다. 이는 디버그 빌드에 대한 boolean
값입니다 true
. false
그렇지 않으면 다음과 같습니다.
if (BuildConfig.DEBUG) {
// do something for a debug build
}
개인적으로 문제가 발생하지 않았지만이 문제가 Eclipse 기반 빌드에서 100 % 신뢰할 수 없다는보고가 있었으므로 실제로 문제의 정도를 말할 수는 없습니다.
Android Studio를 사용 중이거나 명령 행에서 Gradle을 사용중인 경우 런타임시 이러한 상황을 구별하는 데 도움이되도록 빌드 및 빌드 유형에 자체 항목을 추가 BuildConfig
하거나 조정할 수 있습니다.debug
release
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.
}