릴리스 또는 디버그 모드인지 탐지하려면 어떻게 해야 합니까?
코드에서 릴리스 모드 또는 디버그 모드임을 감지하려면 어떻게 해야 합니까?
가장 간단하고 최상의 장기적인 해결책은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
'programing' 카테고리의 다른 글
사용 가능한 ID가 없음 - 관리자 요청 (0) | 2023.06.02 |
---|---|
Spring data MongoDb: MappingMongoConverter remove_class (0) | 2023.06.02 |
파이몬고 커서에 쿼리 결과가 있는지 확인하는 방법 (0) | 2023.06.02 |
관계에 대한 사용 권한이 거부되었습니다. (0) | 2023.06.02 |
좋은 .NET 프로파일러는 무엇입니까? (0) | 2023.06.02 |