2016-07-20 5 views
2

В целях обучения, как ProGuard работы я создал крошечный Android пример, добавил некоторые jar к нему, написал пару строк кода, включен ProGuard и так далее.ProGuard не выполняет запутывания методов Объекта

мои варианты Proguard находятся рядом

-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(...); 
} 
-optimizationpasses 5 
-optimizations !class/unboxing/enum 

Таким образом, после обратной Engeneering моих имен APK ко всем методам Object «s, таких как toString(), hashCode(), equals() остается тем же самым. Помимо методов Object, имена Externalizable методов тоже остаются

Итак, есть ли у вас какие-либо идеи, почему это происходит, можно ли это вообще исправить?

ответ

3

ProGuard не может запутывать методы, которые не возникают в ваших классах (где «ваш» включает JAR/AAR, которые вы компилируете).

Все, что вы переопределяете из классов, поставляемых с каркасом, должно оставаться неповрежденным. В противном случае фреймворк не может вызывать эти методы, поскольку ProGuard не запутывает установленные классы встроенного программного обеспечения на ~ 1,5 миллиардах Android-устройств.

+0

звучит грустно, поэтому в случае моего readExternal/writeExternal методы содержат некоторую важную логику, которую «хакер» может легко найти из-за имен методов, что я могу сделать в этом случае? –

+0

и спасибо за исправление в скобках –

+2

@MikeHerasimov: Хакер может найти этот код в любом случае. Обфускация ProGuard имеет ограниченное применение с учетом современных инструментов обратного проектирования. – CommonsWare

Смежные вопросы