Подтвердить что ты не робот

Лучший способ включить код отладки?

Я программирую приложения для Android, и лучший способ здесь может быть или не быть таким же, как Java вообще.

Я просто хочу установить флаг отладки, который будет выполнять только определенные части кода, когда он устанавливает значение true - equiv на С++, задает препроцессор #define DEBUG и использует #ifdef DEBUG.

Есть ли приемлемый или лучший способ выполнить это на Java?

Сейчас я просто установлю переменную в свой объект приложения, но я не думаю, что это лучший способ.

4b9b3361

Ответ 1

То, как я это делаю:

// in some.class.with.Constants
public static final boolean DEV_MODE = true;

// in some other class
import static some.class.with.Constants.DEV_MODE;

if(DEV_MODE){
    Log.d('sometag', 'somemessage');
}

Ответ 2

Вместо использования собственного флага вы можете автоматически использовать флаг, установленный ADT, например:

final static int appFlags = context.getApplicationInfo().flags;
final static boolean isDebug = (appFlags & ApplicationInfo.FLAG_DEBUGGABLE) != 0

Бит FLAG_DEBUGGABLE автоматически устанавливается в true или false, в зависимости от атрибута "отлаживаемый" приложения (установленного в AndroidManifest.xml). Последняя версия ADT (версия 8) автоматически устанавливает этот атрибут для вас, если вы не экспортируете подписанный пакет.

Таким образом, вам не нужно запоминать настройку/сброс собственного пользовательского флага.

Вы можете прочитать больше в этой теме.

Ответ 3

В редакции 17 инструментов SDK (март 2012 г.) был введен способ имитации C #ifdef DEBUG

Из Общие примечания:

Добавлена ​​функция, позволяющая запускать некоторый код только в режиме отладки. Builds теперь генерирует класс BuildConfig, содержащий константу DEBUG, которая автоматически устанавливается в соответствии с вашим типом сборки. Вы можете проверить константу (BuildConfig.DEBUG) в своем коде, чтобы запускать только функции отладки.

Ответ 4

Это работает для меня с кодом if (BuildConfig.DEBUG), используя класс BuildConfig. Это безопасный и простой код. Будьте осторожны при использовании этого стиля кода. Не используйте его так, чтобы между версиями Release и Debug существовало 2 разных отдельных раздела кода. Если вы это сделаете, это может привести к недействительности тестирования приложения для версии Release. Для меня я использовал его, чтобы пропустить вызов Log сообщений.

Подробнее об этом классе BuildConfig @Построить концепцию системы.

Ответ 5

Я предлагаю использовать встроенный API андроида BuildConfig

if (BuildConfig.DEBUG) {
  // do something for a debug build
}

Ответ 6

if ( Debug.isDebuggerConnected() ) {
  // debug stuff
}

Ответ 7

Я считаю, что тесты на запись лучше альтернативы, чем добавление кода DEBUG.

Я хочу сказать, что когда вы пишете тест для какого-то компонента/метода/класса, вы не загрязняете исходный код каким-то избыточным кодом отладки.