답변:
가장 간단하고 최상의 장기 솔루션은을 사용하는 것 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
해당 개발자 및 해당 빌드 유형에 적합한 값으로 플래그 를 설정하도록 선택할 수 있습니다 .
public static final boolean DEBUG = Boolean.parseBoolean("true");
디버그 빌드를 얻 습니다. 이것이 기괴한 방법으로 설정 DEBUG
되어 true
있지만 작동해야합니다. 1.3.0 테스트 릴리스 중 하나에서이 문제가 발생하거나 1.2.2의 재현 가능한 테스트 사례가있는 경우 문제를 제기하십시오 . 이 문제를보고 한 해결되지 않은 문제가 없습니다.
다음을 시도하십시오 :
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
코 틀린 :
val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
여기 에서 bundells 포스트에서 가져옵니다
getApplicationInfo().flags
작동 하려면 무엇을 가져와야 합니까?
예, 다음을 사용하는 데 아무런 문제가 없습니다.
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를 리턴합니다.
true
.
내 앱이 디버그 버전에서 실행되고 있음을 알기 위해이 솔루션을 사용하고 있습니다.
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
if (BuildConfig.DEBUG) {}
잘못된 방법으로 인식이 발생 디버그 모드 - (물론) 응용 프로그램의 build.gradle 파일 NO 참조를했다 종속 Gradle을 모듈. if (BuildConfig.BUILD_TYPE.equals("Debug")){ }
문제가 해결되었습니다. 감사합니다
BuildConfig
예 :import com.mycompany.myapp.BuildConfig;