Відповіді:
Найпростіше і найкраще довгострокове рішення - це використовувати 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;