2013-02-09 1 views
4

Я включил proguard, не комментируя строку в project.properties.Параметры Android Proguard - более строгие правила и удаление записей журнала

Я декомпилировал свой APK, чтобы проверить, сработало ли оно. Я вижу, что все мои методы, имена переменных и имена классов были изменены на a, b, c .. и т. Д., Что хорошо. Однако мои классы активности не были переименованы. Также операторы Log.d не были удалены, как ожидалось.

Как я могу усложнить кому-то чтение декомпилированного кода, а также удалить записи журнала?

ответ

9

различных методов, связанных с жизненным циклом приложений Android не может быть переименован, потому что:

  • наследования; метод суперкласса заключен в библиотеку Android, которую нельзя переименовать через Proguard. Таким образом, переименование onCreate() на a() вызовет проблему компиляции из-за аннотации @Override.
  • В жизненном цикле активности Android выполняет различные функции, которые, как ожидается, будут иметь определенные имена (например, onCreate() и onResume()). Если ваш onCreate() переименован в a(), будет выполнена только реализация суперкласса - а не ваша.

А почему имена классов вашей деятельности не могут быть переименованы:

  • Это было бы предположить, внесение изменений в манифесте, который просто не поддерживается Proguard.
  • Могут возникнуть нежелательные последствия внесения этих изменений автоматически. Например, ярлыки с главного экрана пользователя могут перестать работать, если класс, который ранее был запутан до A, теперь может быть запутан до B.

Получение операционных записей из Proguard довольно просто с использованием опции assumenosideeffects. See this related question for details:

-assumenosideeffects class android.util.Log { 
    public static *** d(...); 
    public static *** v(...); 
} 
3

Для того, чтобы удалить все ссылки на Вход заявления, вы должны добавить эти строки в файл конфигурации Proguard:

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

In the official website вы можете найти полное руководство с примерами.

2

Для удаления журналов я написал статью с различными методами некоторые из них из StackOverflow (в статье говорится, кто является автором) Вы можете увидеть здесь:

http://bakingcode.com/development/ocultar-trazas-en-una-app-final-de-android/ ИМХО Я думаю, второй с Proguard является лучшим.

Чтобы запутать код вы должны думать о ваших потребностях, больше примеров в: http://proguard.sourceforge.net/index.html#manual/examples.html

6

Пол Lammertsma обеспечил точный ответ на первую часть вашего вопроса.Коснувшись второй части:

Вы можете удалить только вход, если оптимизация не отключена, что требует указания другого глобального файла конфигурации в project.properties:

proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt 

Эти параметры в proguard-project.txt затем удалить все протоколирование:

-assumenosideeffects class android.util.Log { 
    public static boolean isLoggable(java.lang.String, int); 
    public static int v(...); 
    public static int i(...); 
    public static int w(...); 
    public static int d(...); 
    public static int e(...); 
} 

Существуют различные эквивалентные формы с большим или меньшим количеством подстановочных знаков.

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