Этот вопрос возникает в списке рассылки пользователей SQLite примерно раз в месяц.
Независимо от того, сколько шифрования и т. д. вы делаете, если база данных находится на клиентской машине, тогда ключ для расшифровки будет также на машине в какой-то момент. Злоумышленник сможет получить этот ключ, так как это их машина.
Лучший способ взглянуть на это - с точки зрения денег - сколько плохого парня нужно потратить, чтобы получить данные , Обычно это будет всего несколько сотен долларов. И все, что требуется, - это любой человек, чтобы получить ключ, и затем он может опубликовать базу данных для всех.
Так что либо отправляйтесь на веб-службу, как упоминается Donal, либо просто потратите несколько минут на запутывание базы данных. Например, если вы используете APSW, вы можете написать VFS в нескольких строках, которые XOR содержат содержимое базы данных, поэтому обычный SQLite не откроет ее, и зритель файлов не покажет нормальный заголовок SQLite. (В APSW показан пример кода, показывающий, как это сделать.)
Следовательно, любой, у кого есть содержимое базы данных, должен был это сознательно делать.
Обычный способ - сделать лог-уровень с именем 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
Позже вы можете просто изменить лог-уровень для всех выходных уровней отладки.
Вы должны использовать
if (Log.isLoggable(TAG, Log.VERBOSE)) {
Log.v(TAG, "my log message");
}
В документации по 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()
.
Самый простой способ - это запустить скомпилированный От JAR до ProGuard перед развертыванием с такой конфигурацией, как:
-assumenosideeffects class android.util.Log {
public static int v(...);
}
Это будет - помимо всех других оптимизаций ProGuard - удалить любые подробные операторы журнала непосредственно из байт-кода.