Проблемы при компиляции приложения для Android с помощью Ant и Proguard

У меня есть приложение для Android, состоящее из разных модулей. Основной модуль использует некоторые библиотеки, такие как Google GSON или v4.support.package. Пользовательский скрипт сборки с правильным proguard.cfg также соберет его. Теперь я должен интегрировать другую библиотеку Android, которая частично использует те же библиотеки (GSON support.v4). Помимо получения большого количества заметок, таких как

Примечание: повторяющееся определение класса программы [com.google.gson.Gson].

Я также получаю некоторые заметки, такие как

[proguard] Примечание: com.google.gson.UnsafeAllocator: не удается найти класс с динамическими ссылками sun.misc.Unsafe

[proguard] Примечание: конфигурация относится к неизвестному классу «sun.misc.Unsafe».

что я нахожу странным, потому что у меня есть некоторые «сохранения» в моем Proguard.cfg специально для этого:

-keepattributes Подпись, Аннотация

- сохранить класс com.google.gson.** {*;}

-keep class sun.misc.Unsafe { *; }

который хорошо работает в моем проекте без ссылки на библиотеку модулей внутри него. Я пользуюсь новейшим SDK и инструментами и добавил пользовательский файл proguard.cfg в библиотеку модулей, который хорошо работает с самой библиотекой модулей (при сборке в автономном режиме). Мне кажется, что сборка не зависит от кастомного proguard.cfg внутри библиотек-проектов. Любая идея о том, что попробовать высоко ценится


person Rafael T    schedule 18.01.2012    source источник


Ответы (1)


Наконец-то я нашел решение для себя: с последним Android Tools (16) каждая Android-библиотека сначала компилируется сама по себе. Поэтому, когда библиотека не имеет «стандартной» сборки и определяет какой-то пользовательский скрипт сборки, включая proguard --keeps, и этот --keeps определен в том же проекте (за исключением классов Android SDK, поскольку они не скомпилированы), это приводит к ошибка прогарда. Решением было удалить proguard из библиотеки и скопировать --keeps внутри основного приложения.

person Rafael T    schedule 23.01.2012
comment
Ответ не имеет никакого смысла... хочешь объяснить? Что означает копировать --keeps внутри основного приложения? - person t0mm13b; 10.03.2014