Что мне нужно положить в proguard.cfg, чтобы включить запутывание? - PullRequest
2 голосов
/ 10 августа 2011

У меня есть следующий код в моем приложении proguard.cfg (и да, у меня также есть proguard.config=proguard.cfg в build.properties):

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

Тем не менее, я был удивлен, увидев сообщение об ошибке отAndroid Market содержит Unobfuscated символов в трассировке стека.

Я знаю, что загрузил экспортированную версию ProGuard, так что я пропустил?

1 Ответ

2 голосов
/ 16 августа 2011

Если в вашей трассировке стека содержались имена и методы классов без указания аргументов, указанные в - сохраните в вашем proguard.cfg, тогда ответ содержится в теле вашего вопроса ...

Также обратите внимание, что из-за проблем, связанных с отражением , ProGuard автоматически сохраняет следующее:

  • Class.forName ( "SomeClass")
  • SomeClass.class
  • SomeClass.class.getField ( "SomeField")
  • SomeClass.class.getDeclaredField ( "SomeField")
  • SomeClass.class.getMethod ("someMethod", новый класс [] {})
  • SomeClass.class.getMethod ("someMethod", новый класс [] {A.class})
  • SomeClass.class.getMethod ("someMethod", новый класс [] {A.class, B.class})
  • SomeClass.class.getDeclaredMethod ("someMethod", новый класс [] {})
  • SomeClass.class.getDeclaredMethod ("someMethod", новый Class [] {A.class})
  • SomeClass.class.getDeclaredMethod ("someMethod", новый класс [] {A.class, B.class})
  • AtomicIntegerFieldUpdater.newUpdater (SomeClass.class, "someField")
  • AtomicLongFieldUpdater.newUpdater (SomeClass.class, someField)
  • AtomicReferenceFieldUpdater.newUpdater (SomeClass.class, SomeType.class, "someField")

Также обратите внимание , что, если вы каким-либо образом предоставите файл proguard/mapping.txt, сгенерированный ProGuard, инструмент ReTrace сможет все запутать.

Короче говоря, вам не нужно ничего помещать в proguard.cfg, чтобы включить запутывание. Вариантов по умолчанию достаточно. Теоретически, вы можете захотеть удалить некоторые из параметров --keep по умолчанию, но в документации ProGuard определенно говорится, что:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...