Как заставить Proguard игнорировать внешние библиотеки? - PullRequest
41 голосов
/ 11 октября 2011

Я хочу использовать Proguard в основном для запутывания.

Моя проблема в том, что у меня есть три библиотеки, Twitter4J и две библиотеки указателей. Эти библиотеки вызывали ошибки, когда я пытался создать подписанный APK. Чтобы преодолеть это, я поместил в файл proguard.config следующее:

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

Хотя это избавило от ошибок в консоли, когда я загрузил подписанный APK на свой мобильный телефон, он мгновенно завис. DDMS сказал, что это произошло из-за класса, не найденного в Twitter4J.

Избавление от "dontwarns" выше не помогло. Также не было добавлено dontshrink dontoptimise.

Я бы хотел, чтобы Proguard полностью игнорировал библиотеки (так как они в любом случае с открытым исходным кодом). Это возможно?

Ответы [ 3 ]

57 голосов
/ 17 октября 2011

Попробуйте это:

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

Cf пост от @CaspNZ: Android Proguard с внешней банкой

10 голосов
/ 11 октября 2011

Вы должны иметь возможность добавить в proguard.cfg следующие строки, чтобы исключить все классы в пакете (и подпакетах)

-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 голосов
/ 29 октября 2018

Я хотел бы добавить, что вы должны синхронизировать свой проект с файлами Gradle после добавления правил proguard, иначе они могут не работать.

...