Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ConsumerProguardFiles vs ProguardFiles

I was trying to build an application which contained a library module La with proguard and I noticed that the library was not being obfuscated. Was trying to understand why. At this moment in time this was my buildType:

release {  minifyEnabled false  useProguard true  proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' }  

After some search I've come across the ConsumerProguardFiles function which states:

ProGuard rule files to be included in the published AAR.

These proguard rule files will then be used by any application project that consumes the AAR (if ProGuard is enabled).

This allows AAR to specify shrinking or obfuscation exclude rules.

This is only valid for Library project. This is ignored in Application project.

With this now the buildType of my library La is the following:

release {  minifyEnabled false  useProguard true  consumerProguardFiles 'proguard-rules.pro' } 

And now my library La is using it's proguard rules and the library code is obfuscated.

So my questions are:

1) What is the reason for this different behaviour. Why doesn't ProguardFiles obfuscate library proguarded rules but instead ignores it?

2) I'm guessing that what the ConsumerProguardFiles does is to merge the rules of the library with the main application proguard rules. Is this assumption correct?

3) In short: use proguardFiles for applications and ConsumerProguardFiles for libraries. Correct?

Thank you for your time reading!

like image 551
Peddro Avatar asked Jan 10 '17 15:01

Peddro


1 Answers

As far as I understand, minifyEnabled false means that ProGuard is not run to minify/obfuscate your library module. Which is what you want because the library module can't know which parts of it are going to be used in your application module.

Instead, the library module must provide its relevant proguard rules to the app module (via consumerProguardFiles) and then the app module will run ProGuard with both its own rules and the library's rules together to minimize the final application APK.

like image 75
Fabian Streitel Avatar answered Sep 27 '22 18:09

Fabian Streitel