Как избежать попадания неиспользуемых ресурсов и кода из проекта библиотеки Android в мой APK? - PullRequest
9 голосов
/ 06 апреля 2011

У меня в рабочей области Eclipse есть проект библиотеки Android, который я использую как уникальный набор инструментов. Случайно (1) я только что обнаружил, что ресурсы из библиотеки (xml-анимации, xml-макеты, даже drawables !!!) упакованы в APK проектов, которые используют библиотеку, даже если я их не использую. 1001 *

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

РЕДАКТИРОВАТЬ : Я обнаружил, декомпилируя .dex, что неиспользуемый код тоже попадает в apk.

(1) Я пытался протестировать новый значок для моего приложения, /res/drawable/icon.png, но значок по умолчанию продолжал появляться. Я удалил изображение, и оно продолжало показывать значок по умолчанию! Это должен был быть /res/drawable-mdpi/icon.png из библиотеки .

Ответы [ 3 ]

2 голосов
/ 16 июля 2015

Новая система сборки Android имеет встроенный механизм выделения ресурсов , который можно запустить как последний шаг процесса сборки.Используйте его в дополнение к удалению ресурсов, которые определены lint.

Обратите внимание, что механизм выделения ресурсов особенно полезен в сочетании с Proguard (также в комплекте с системой сборки) и при использованиибиблиотеки в вашем проекте.Идея такова:

  • Proguard удаляет классы, которые вы не используете, в том числе те, которые пришли из библиотек.
  • Приведенный выше процесс может удалить ссылки на код для ресурсов, включенных в эти библиотеки.
  • Таким образом, эти несвязанные ресурсы могут быть удалены из APK, потому что больше нет кода, который их использует.

Удаление неиспользуемых ресурсов, которые идентифицирует lint, все еще полезно, так как их удаление:

  • Ускоряет сборку
  • Снижает затраты на обслуживание вашего проекта.
2 голосов
/ 06 апреля 2011

Proguard может удалить неиспользуемый код.

Но это ничего не изменит с неиспользованными ресурсами, а также запутает ваш код.Вы должны подумать, прежде чем использовать его.

1 голос
/ 14 декабря 2011

Как кто-то сказал ранее, Proguard может удалить неиспользуемый код.

Чтобы удалить неиспользуемые ресурсы, вы можете использовать инструмент Android Lint из ADT 16. Это поможет вам не только удалить неиспользуемые ресурсы, но и найти потенциальные ошибки.Эта цитата с официального сайта:

Вот несколько примеров типов ошибок, которые она ищет:

  • Пропущенные переводы (и неиспользованные переводы)
  • Проблемы с производительностью макета (все проблемы, которые использовался старым инструментом layoutopt и т. Д.)
  • Неиспользуемые ресурсы
  • Несовместимые размеры массивов (когда массивы определены в нескольких конфигурациях)
  • Проблемы с доступностью и интернационализацией (жестко запрограммированные строки, отсутствующее contentDescription и т. Д.)
  • Проблемы с пиктограммами (например, отсутствие плотности, дублирующиеся иконки, неправильные размеры и т. Д.)
  • Проблемы с юзабилити (например, отсутствие указаниятип ввода в текстовом поле)
  • Манифест ошибок и многое другое.
...