Как определить, нахожусь ли я в режиме выпуска или отладки?
Как я могу определить в своем коде, что я нахожусь в режиме выпуска или в режиме отладки?
Ответы
Ответ 1
Простейшим и лучшим долгосрочным решением является использование BuildConfig.DEBUG
. Это значение boolean
, которое будет true
для сборки отладки, false
иначе:
if (BuildConfig.DEBUG) {
// do something for a debug build
}
Появились сообщения о том, что это значение не на 100% надежнее от построений на основе Eclipse, хотя я лично не сталкивался с какой-либо проблемой, поэтому не могу сказать, какая проблема на самом деле.
Если вы используете Android Studio или используете Gradle из командной строки, вы можете добавить свой собственный материал в BuildConfig
или иначе настроить типы сборки debug
и release
, чтобы отличить эти ситуаций во время выполнения.
Решение из Illegal Argument основано на значении флага android:debuggable
в манифесте. Если вы хотите отличить "отладочную" сборку от сборки "release", то по определению это лучшее решение. Однако имейте в виду, что в будущем флаг debuggable
действительно является независимым понятием, из которого Gradle/Android Studio считает, что сборка "отладки" будет. Любой тип сборки может выбрать, чтобы установить флаг debuggable
на любое значение, которое имеет смысл для этого разработчика и для этого типа сборки.
Ответ 2
Попробуйте следующее:
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
Котлин:
val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
Это взято из поста Bundells отсюда
Ответ 3
Да, у вас не будет проблем с использованием:
if (BuildConfig.DEBUG) {
//It not a release version.
}
Если вы не импортируете неправильный класс BuildConfig. Убедитесь, что вы ссылаетесь на свой класс BuildConfig проекта, а не на любую из ваших библиотек зависимостей.
![введите описание изображения здесь]()
Ответ 4
Из-за смешанных комментариев о BuildConfig.DEBUG
я использовал следующее для отключения crashlytics (и аналитики) в режиме отладки:
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
на все, что захотите. Мне нравится этот подход, потому что я могу видеть флаг в конфигурации, и я могу управлять флагом.
Ответ 5
В качестве альтернативы вы можете различать, используя BuildConfig.BUILD_TYPE;
Если вы используете сборку отладки
BuildConfig.BUILD_TYPE.equals("debug");
возвращает значение true. И для выпуска build BuildConfig.BUILD_TYPE.equals("release");
возвращает true.
Ответ 6
Я использую это решение на случай, если узнаю, что мое приложение работает на отладочной версии.
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
Ответ 7
Убедитесь, что вы импортируете правильный класс BuildConfig. И да, у вас не будет проблем с использованием:
if (BuildConfig.DEBUG) {
//It not a release version.
}