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!
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.