Відповіді:
Найпростіше і найкраще довгострокове рішення - це використовувати BuildConfig.DEBUG. Це booleanзначення, яке буде trueрозроблено для налагодження, falseінакше:
if (BuildConfig.DEBUG) {
// do something for a debug build
}
Повідомлялося, що це значення не є на 100% надійним для складання на основі Eclipse, хоча я особисто не стикався з проблемою, тому не можу сказати, наскільки це проблема насправді.
Якщо ви використовуєте Android Studio або використовуєте Gradle з командного рядка, ви можете додати свої речі до BuildConfigчи іншим чином налаштувати типи debugта releaseскладати типи, щоб допомогти розрізнити ці ситуації під час виконання.
Рішення з незаконного аргументу базується на значенні 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 використання я використовував наступне для відключення аварійних ситуацій (та аналітики) в режимі налагодження:
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.
true.
Я використовую це рішення, щоб дізнатися, що моя програма працює на версії налагодження.
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
if (BuildConfig.DEBUG) {} у залежному модулі gradle, який не мав (звичайно) НЕ ПОЯСНЕННЯ до файлу build.gradle програми - це спричинило неправильне розпізнавання режиму налагодження. if (BuildConfig.BUILD_TYPE.equals("Debug")){ }Виправлена проблема. Спасибі
Переконайтесь, що ви імпортуєте правильний клас BuildConfig. Так, у вас не виникне проблем із використанням:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
BuildConfigзнаходиться в пакеті вашого додатка, наприкладimport com.mycompany.myapp.BuildConfig;