2011-10-11 11 views
36

Voglio usare Proguard principalmente per motivi di offuscamento.Come fare in modo che Proguard ignori le librerie esterne?

Il mio problema è che ho tre librerie, Twitter4J e due librerie di segnaletica. Queste librerie hanno causato errori quando ho provato a creare un APK firmato. Per superare questo ho messo il seguente nel file proguard.config ...

-dontwarn org.apache.commons.codec.binary.** 
-dontwarn org.slf4j.** 
-dontwarn com.sun.syndication.io.** 
-dontwarn com.sun.syndication.feed.synd.* 

Mentre questo è sbarazzato degli errori nella console, quando ho caricato il mio firmato APK sul mio telefono cellulare all'istante schiantato. Il DDMS ha detto che questo era dovuto a una classe non trovata su Twitter4J.

Eliminare lo "dontwarns" sopra non ha aiutato. Nemmeno ha aggiunto dontshrink dontoptimise.

Desidero che Proguard ignori completamente le librerie (poiché sono comunque open source). È possibile?

risposta

7

Si dovrebbe essere in grado di aggiungere al proguard.cfg le seguenti linee di escludere tutte le classi all'interno di un pacchetto (e sottopackage)

-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.** 
+0

Ciao @Nic Forte, matassa per la risposta. Ho aggiunto il codice ma quando ho provato ad esportare l'APK firmato molti errori tipicamente mi piacciono "[2011-10-11 15:11:00 - canonV0003PRO] Avviso: oauth.signpost.signature.OAuthMessageSigner: impossibile trovare la classe di riferimento org.apache.commons.codec.binary.Base64" . Ogni altro suggerimento è molto apprezzato. Mel – Mel

+0

Hai anche aggiunto oauth.signpost. ** all'elenco dei pacchetti da conservare? –

+0

@Mel hai ottenuto la risposta ???? Sto affrontando lo stesso problema – sheetal

52

Prova questo:

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

postale Cf da @ CaspNZ: Android Proguard with external jar

+0

Questo funziona, grazie. – kodeshpa

+0

Grazie mille! Per prima cosa ho ignorato questo post perché pensavo che i miei errori non sarebbero stati risolti da questo, ma in qualche modo lo ha fatto. Semplicemente non conosco la magia di proguard ... – Boy

+0

@Boy plz rispondi in Android Studio dove aggiungere queste righe, sia in 'proguard-project.txt' o 'proguard-rules.pro' –

Problemi correlati