Каковы рекомендуемые правила ProGuard для Smack 4.1?
Каковы надлежащие правила ProGuard для Smack 4.1 при создании APK-релиза для Android?
В настоящее время я использую правила из aSmack 4.0.x из файла README.asmack в хранилище github aSmack, которое устарело (ссылается на старые имена классов и предназначено для 4.0.x). Я не смог найти никаких ссылок на то, какие надлежащие правила proguard использовать для 4.1.x, кто-нибудь может пролить свет на это?
2 ответа
Каковы надлежащие правила Proguard для Smack 4.1 при создании APK-релиза для Android?
Зависит от того, что значит "правильно" для вас.
Проще всего сказать ProGuard сохранить все классы и интерфейсы Smack.
-keep class org.jivesoftware.smack.** { *; }
-keep class org.jivesoftware.smackx.** { *; }
В качестве альтернативы вы можете настроить ProGuard так, чтобы он сохранял только те части Smack, которые вы фактически используете, и позволять ProGuard убирать все остальное. Но для этого вам понадобится хорошее понимание того, как ваше приложение использует Smack. См., Например, конфигурацию ProGuard транспортного XMPP MAXS: https://bitbucket.org/projectmaxs/maxs/src/75efeba8d8470b89da8cd8551304bb00648e4945/transport-xmpp/proguard-project.txt?at=master
Обратите внимание, что если вы точно не знаете, что делаете, то Smack может вести себя неожиданно или даже аварийно завершить работу. Только тонко настройте ProGuard, если вы знаете, что делаете!
На самом деле, мой опыт подсказывает, что вам может понадобиться дополнительная строка, если вы также используете proguard и включили minify. Если вы получили ошибку
java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
Тогда вместо этого необходим следующий конфиг:
-keepattributes Signature
-keep class org.jivesoftware.smack.** { *; }
-keep class org.jivesoftware.smackx.** { *; }
Смотрите: smack for android терпит неудачу при использовании proguard для более подробной информации.