Ошибки Proguard при экспорте Android-проекта после обновления до ADT 20

После обновления до ADT 20 я больше не могу успешно экспортировать ни один из моих Android-проектов. Я получил:

Proguard returned with error code 1. See console 

В консоли я получаю тонны, can't find referenced class предупреждения can't find referenced class а иногда и can't find superclass or interface . В конце предупреждений я получаю что-то вроде этого:

  You should check if you need to specify additional program jars. Warning: there were 199 unresolved references to classes or interfaces. You may need to specify additional library jars (using '-libraryjars'). java.io.IOException: Please correct the above warnings first. at proguard.Initializer.execute(Initializer.java:321) at proguard.ProGuard.initialize(ProGuard.java:211) at proguard.ProGuard.execute(ProGuard.java:86) at proguard.ProGuard.main(ProGuard.java:492) 

Каждый раз, когда я пытаюсь построить, я получаю различное количество предупреждений (это не очень согласовано). Кроме того, когда я выполняю очистку перед экспортом, экспорт завершается без каких-либо предупреждений, но в результате APK сбой запускается часто из-за ClassNotFoundException .

Мой proguard-project.txt включает необходимые правила -keep class для библиотеки поддержки Android и ActionBarSherlock.

У меня не возникло проблем с созданием этого проекта до 20 года. Я даже попытался создать свой последний релиз (который, очевидно, прекрасно работал, когда я его выпустил), но я получаю одинаковые предупреждения и неудачный экспорт.

Я пробовал добавлять -libraryjars и / или -dontwarn правила, как и многие другие вопросы SO, но безрезультатно. Он будет иногда успешно строиться, но APK создавал сбои при запуске.

Какие-либо предложения?

В AAPT есть ошибка, где она будет обрабатываться только

 <fragment android:name"..." /> 

но нет

 <fragment class="..." /> 

Мы исправим AAPT, но пока вы можете использовать другой атрибут, и он будет работать.

В ADT 20 мы используем функцию aapt (см. Флаг -G), которая может создавать файл proguard, который содержит правила хранения точно для пользовательских представлений, используемых вашим кодом.

Старые файлы конфигурации proguard сохраняли бы все виды. Когда вы использовали проект библиотеки, такой как библиотека совместимости, где вы могли бы использовать только небольшое подмножество доступного кода, это может закончиться тем, что вам не нужно. Удалив общие правила сохранения и добавив новый файл keep на основе вашего приложения, ваши .apks станут меньше, поскольку многие неиспользуемые вещи могут быть удалены.

Одна из областей, где это может пойти не так, – это обновить инструмент 20 (так что у вас есть новый файл proguard-android.txt), и вы продолжаете использовать ADT 18. Обязательно используйте ADT 20, так как он добавит не Просто файлы proguard, указанные в параметре project.properties, но сгенерированный файл proguard, в котором перечислены файлы keep from aapt -G. Я считаю, что сборка муравьев также будет использовать функцию -G.

(Примечание – см. http://code.google.com/p/android/issues/detail?id=35107 для любых последующих действий по этому вопросу)

Сообщается, что есть проблемы с недавним обновлением плагина Eclipse в ADT, который неправильно перекомпилирует весь исходный код. В этом случае ProGuard распечатает предупреждения о ваших программных классах (в отличие от классов библиотеки). Вы должны проверить, работает ли экспорт (и результирующее приложение) без ProGuard. Вы также должны проверить, работает ли сборка Ant («ant release»). Тогда это может быть обходным путем.