Как включить / отключить уровни журналов в Android?

Этот вопрос возникает в списке рассылки пользователей SQLite примерно раз в месяц.

Независимо от того, сколько шифрования и т. д. вы делаете, если база данных находится на клиентской машине, тогда ключ для расшифровки будет также на машине в какой-то момент. Злоумышленник сможет получить этот ключ, так как это их машина.

Лучший способ взглянуть на это - с точки зрения денег - сколько плохого парня нужно потратить, чтобы получить данные , Обычно это будет всего несколько сотен долларов. И все, что требуется, - это любой человек, чтобы получить ключ, и затем он может опубликовать базу данных для всех.

Так что либо отправляйтесь на веб-службу, как упоминается Donal, либо просто потратите несколько минут на запутывание базы данных. Например, если вы используете APSW, вы можете написать VFS в нескольких строках, которые XOR содержат содержимое базы данных, поэтому обычный SQLite не откроет ее, и зритель файлов не покажет нормальный заголовок SQLite. (В APSW показан пример кода, показывающий, как это сделать.)

Следовательно, любой, у кого есть содержимое базы данных, должен был это сознательно делать.

147
задан Frank Kusters 20 July 2015 в 12:01
поделиться

4 ответа

Обычный способ - сделать лог-уровень с именем int и определить его уровень отладки на основе лог-уровня.

public static int LOGLEVEL = 2;
public static boolean ERROR = LOGLEVEL > 0;
public static boolean WARN = LOGLEVEL > 1;
...
public static boolean VERBOSE = LOGLEVEL > 4;

    if (VERBOSE) Log.v(TAG, "Message here"); // Won't be shown
    if (WARN) Log.w(TAG, "WARNING HERE");    // Still goes through

Позже вы можете просто изменить лог-уровень для всех выходных уровней отладки.

78
ответ дан 23 November 2019 в 22:27
поделиться

Вы должны использовать

    if (Log.isLoggable(TAG, Log.VERBOSE)) {
        Log.v(TAG, "my log message");
    }
8
ответ дан 23 November 2019 в 22:27
поделиться

В документации по Android сказано следующее об уровне журнала:

Verbose никогда не должно компилироваться в приложение, кроме как во время разработки. Журналы отладки скомпилированы, но удалены во время выполнения. Журналы ошибок, предупреждений и информации всегда сохраняются.

Поэтому вы можете рассмотреть возможность удаления логов Verbose, возможно, используя ProGuard, как предложено в другом ответе.

Согласно документации, вы можете настроить ведение логов на разрабатываемом устройстве, используя Свойства системы (System Properties). Настраиваемым свойством является log.tag. и должно быть установлено одно из следующих значений: VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT, или SUPPRESS. Дополнительная информация по этому вопросу доступна в документации к методу isLoggable().

Свойства можно временно настроить с помощью команды setprop. Например:

C:\android>adb shell setprop log.tag.MyAppTag WARN
C:\android>adb shell getprop log.tag.MyAppTag
WARN

В качестве альтернативы, вы можете указать их в файле '/data/local.prop' следующим образом:

log.tag.MyAppTag=WARN

Похоже, что более поздние версии Android требуют, чтобы /data/local.prop был прочитан только. Этот файл считывается во время загрузки, поэтому вам нужно будет перезапустить его после обновления. Если /data/local.prop можно записать в мир, то, скорее всего, он будет проигнорирован.

Наконец, вы можете установить их программно, используя метод System.setProperty().

.
192
ответ дан 23 November 2019 в 22:27
поделиться

Самый простой способ - это запустить скомпилированный От JAR до ProGuard перед развертыванием с такой конфигурацией, как:

-assumenosideeffects class android.util.Log {
    public static int v(...);
}

Это будет - помимо всех других оптимизаций ProGuard - удалить любые подробные операторы журнала непосредственно из байт-кода.

88
ответ дан 23 November 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: