Как заставить Proguard игнорировать внешние библиотеки?
Я хочу использовать 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 ответа
Попробуй это:
-keep class javax.** { *; }
-keep class org.** { *; }
-keep class twitter4j.** { *; }
Сообщение от @CaspNZ: Android Proguard с внешней флягой
Вы должны иметь возможность добавить в 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.**
Я хотел бы добавить, что вы должны синхронизировать свой проект с файлами Gradle после добавления правил Proguard, иначе они могут не работать.