web-dev-qa-db-fra.com

ConsumerProguardFiles vs ProguardFiles

J'essayais de construire une application qui contenait un module de bibliothèque La avec proguard et j'ai remarqué que la bibliothèque n'était pas obscurcie. J'essayais de comprendre pourquoi. En ce moment, c'était mon buildType:

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

Après quelques recherches, je suis tombé sur la fonction ConsumerProguardFiles qui déclare:

Fichiers de règles ProGuard à inclure dans l'AAR publié.

Ces fichiers de règles proguard seront ensuite utilisés par tout projet d'application qui consomme l'AAR (si ProGuard est activé).

Cela permet à AAR de spécifier des règles d'exclusion de rétrécissement ou d'obscurcissement.

Ceci n'est valable que pour le projet Library. Ceci est ignoré dans le projet d'application.

Avec ceci maintenant le buildType de ma bibliothèque La est le suivant:

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

Et maintenant ma bibliothèque La utilise ses règles de proguard et le code de la bibliothèque est obscurci.

Mes questions sont donc:

1) Quelle est la raison de ce comportement différent. Pourquoi ProguardFiles n'obscurcit-il pas les règles de protection des bibliothèques mais les ignore-t-il à la place?

2) Je suppose que ce que fait le ConsumerProguardFiles est de fusionner les règles de la bibliothèque avec les règles principales de proguard d'application. Cette hypothèse est-elle correcte?

3) En bref: utilisez proguardFiles pour les applications et ConsumerProguardFiles pour les bibliothèques. Correct?

Merci pour votre temps de lecture!

20
Peddro

Pour autant que je comprends, minifyEnabled false signifie que ProGuard est pas exécuté pour minimiser/obscurcir votre module de bibliothèque. C'est ce que vous voulez parce que le module de bibliothèque ne peut pas savoir quelles parties vont être utilisées dans votre module d'application.

Au lieu de cela, le module de bibliothèque doit fournir ses règles de proguard pertinentes au module d'application (via consumerProguardFiles), puis le module d'application exécutera ProGuard avec ses propres règles et les règles de la bibliothèque ensemble pour minimiser l'APK de l'application finale.

11
Fabian Streitel