Proguard не запутывает имя класса, запутываются только методы

Я пытаюсь использовать Proguard в студии Android, но похоже, что Proguard не скрывает имя класса, например, структуру моего приложения и конфигурацию:

введите описание изображения здесь

и конфигурация

введите описание изображения здесь

но когда я пытаюсь вызвать исключение в приложении:

введите описание изображения здесь

исключение указано в консоли ADB:

введите описание изображения здесь

запутаны только методы, класс MainActivity.class не


person Qing    schedule 18.03.2016    source источник
comment
Вы добавили больше правил в файл правил proguard?   -  person Khizar Hayat    schedule 18.03.2016
comment
нет, нет, есть единственное правило, можете ли вы предложить, какие правила я должен добавить или не добавлять?   -  person Qing    schedule 18.03.2016
comment
попробуйте после комментария это правило, которое вы добавили. это может запутать. но есть вероятность, что proguard удалил какой-то полезный код. Итак, давайте попробуем проверить   -  person Khizar Hayat    schedule 18.03.2016
comment
я пытался, но обфускация все еще происходит только для методов, а не для класса   -  person Qing    schedule 18.03.2016


Ответы (2)


Это ожидаемое поведение, поскольку класс является деятельностью!

Все классы, упомянутые в AndroidManifest.xml, должны сохранить свои имена (действия, службы, поставщики, получатели, приложения, инструменты). В противном случае система не сможет их найти.

Для этого сборка Gradle автоматически генерирует некоторые правила для вашей конфигурации ProGuard. Он сканирует AndroidManifest.xml и добавляет правила для каждого найденного там класса.

Если вы хотите увидеть все используемые правила, добавьте эту строку в свои правила ProGuard:

-printconfiguration "build/outputs/mapping/configuration.txt"

Он создаст файл configuration.txt, содержащий все правила.

Должно быть что-то вроде этого:

# view AndroidManifest.xml #generated:50
-keep class com.github.browep.proguard.MainActivity {
    <init>(...);
}
person Tomik    schedule 18.03.2016
comment
У меня тоже похожая проблема. Моя утилита, имя класса данных не запутаны, запутаны только методы. Я тоже искал -keep public class * { public protected *; }, но такого конфига не было. Что мне теперь проверить? - person Kalpesh Patel; 15.12.2016
comment
Я нашел имя своего класса, которое не запутывается. Но как убрать эти классы из -keep? - person chandan kumar; 05.02.2020

Я столкнулся с теми же проблемами,

После обновления моего Android-плагина для Gradle Proguard перестал запутывать мою утилиту и другие файлы классов.

После нескольких поисков я обнаружил, что Android Studio gradle теперь использует более новая версия Proguard.

И в соответствии с этим ответом на переполнение стека , в котором говорилось, что: proguard автоматически добавляет правила, специфичные для пакета android/google.

Поэтому после нескольких изменений правил в моем приложении Proguard снова запутал имена классов.

Старый proguard-rules.pro:

#support-v4
#@link https://stackoverflow.com/questions/18978706/obfuscate-android-support-v7-widget-gridlayout-issue
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }

#support-v7
-dontwarn android.support.v7.**
-keep class android.support.v7.** { *; }
#https://stackoverflow.com/a/34895791/4754141
-keep class !android.support.v7.view.menu.**
-keep interface android.support.v7.* { *; }

#support design
#@link https://stackoverflow.com/a/31028536
-dontwarn android.support.design.**
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }
-keep public class android.support.design.R$* { *; }

#error : Note: the configuration refers to the unknown class 'com.google.vending.licensing.ILicensingService'
#solution : @link https://stackoverflow.com/a/14463528
-dontnote com.google.vending.licensing.ILicensingService
-dontnote **ILicensingService

#updating to Gradle 2.14.1 caused error :         https://stackoverflow.com/q/17141832/4754141
-keepattributes EnclosingMethod

#render script
#@link https://stackoverflow.com/questions/22161832/renderscript-support-library-crashes-on-x86-devices
-keepclasseswithmembernames class * { native <methods>; }
-keep class android.support.v8.renderscript.** { *; }

Новый proguard-rules.pro:

#https://stackoverflow.com/a/41901653/4754141
#https://stackoverflow.com/a/23840049/4754141
-keep class android.support.** { *; }
-keep interface android.support.** { *; }
person shanraisshan    schedule 30.03.2017