web-dev-qa-db-fra.com

Comment faire en sorte que Proguard ignore les bibliothèques externes?

Je souhaite utiliser Proguard principalement pour des raisons d’obscurcissement.

Mon problème est que j'ai trois bibliothèques, Twitter4J et deux bibliothèques de poteaux indicateurs. Ces bibliothèques ont provoqué des erreurs lorsque j'ai essayé de créer un fichier APK signé. Pour surmonter cela, je mets ce qui suit dans le fichier proguard.config ...

-dontwarn org.Apache.commons.codec.binary.** 
-dontwarn org.slf4j.** 
-dontwarn com.Sun.syndication.io.**
-dontwarn com.Sun.syndication.feed.synd.*   

Bien que cela se soit débarrassé des erreurs dans la console, lorsque j'ai chargé mon APK signé sur mon téléphone portable, il s'est écrasé instantanément. La DDMS a déclaré que cela était dû à une classe introuvable dans Twitter4J. 

Se débarrasser du "dontwarns" ci-dessus n'a pas aidé. Ajout non plus dontshrink dontoptimise.

J'aimerais que Proguard ignore complètement les bibliothèques (car elles sont de toute façon open source). Est-ce possible?

40
Mel

Essaye ça:

-keep class javax.** { *; }
-keep class org.** { *; }
-keep class Twitter4j.** { *; }

Cf. post de @CaspNZ: Proguard Android avec jar externe

55
Murphy

Vous devriez pouvoir ajouter à proguard.cfg les lignes suivantes pour exclure toutes les classes d'un package (et de ses sous-packages).

-keep class org.Apache.commons.codec.binary.**
-keep interface org.Apache.commons.codec.binary.**
-keep enum org.Apache.commons.codec.binary.**
-keep class org.slf4j.**
-keep interface org.slf4j.**
-keep enum org.slf4j.**
-keep class com.Sun.syndication.io.**
-keep interface com.Sun.syndication.io.**
-keep enum com.Sun.syndication.io.**
-keep class com.Sun.syndication.feed.synd.**
-keep interface com.Sun.syndication.feed.synd.**
-keep enum com.Sun.syndication.feed.synd.**
10
Nic Strong

J'aimerais ajouter que vous devez synchroniser votre projet avec les fichiers Gradle après avoir ajouté des règles de proguard, sinon elles risquent de ne pas fonctionner.

0
urgentx