Proguard: предотвращение коллизий имен с предварительно скрытыми библиотеками JAR - PullRequest
6 голосов
/ 26 апреля 2011

Кажется, что Proguard не предпринимает никаких попыток избежать именования коллизий с классами в библиотеках JAR, когда переименовывает / переупаковывает классы. Это правильно, или я просто не настроил это правильно?

Я запутываю приложение Android, которое использует последнюю версию Google AdMob SDK. Ранее я использовал старый AdMob SDK без проблем. Новый файл JAR SDK содержит некоторые классы, которые были запутаны. Один из этих классов a.class в пакете по умолчанию / без имени. Когда я запутываю свое приложение, Proguard переименовывает / переупаковывает один из моих классов, чтобы он также был a.class в неназванном пакете, несмотря на то, что он прочитал в JAR AdMob как библиотечный JAR (поэтому следует знать, что это вызовет коллизию). Как и ожидалось, моя сборка завершается неудачно, когда инструмент dx пытается объединить эти два класса с одинаковыми именами в один файл .dex.

В качестве обходного пути я перенастроил Proguard таким образом, чтобы он переместил все мои классы в именованный пакет (всего одну букву), чтобы избежать коллизий с классами Google, но мне интересно узнать, есть ли лучшее решение или если это ограничение текущей версии (4.6) Proguard?

1 Ответ

4 голосов
/ 26 апреля 2011

Из руководства пользователя progaurd ,

Если входной и библиотечный банки содержат классы в одном пакете, запутанный выходной файл может содержать имена классов, которые перекрываются с классомимена в библиотеке банку.Это наиболее вероятно, если библиотека jar была ранее запутана, поскольку тогда она, вероятно, будет содержать классы с именами 'a', 'b' и т. Д. Поэтому пакеты никогда не следует разбивать на входные jar и jar библиотеки.

Таким образом, похоже, что использование вашего собственного пакета является рекомендуемым ответом.

...