Насколько разумным является Eclipse / ADT, когда дело доходит до проектов библиотеки Android?

Итак, у меня есть несколько классов стиля "Utility" в некоторых моих проектах. Мне любопытно, могу ли я перенести их в проект библиотеки Android, который содержит весь или большинство моего кода, не относящегося к конкретному приложению (в основном оболочки и интерфейсы).

Итак, мой вопрос заключается в том, что происходит с файлами, которые мне не нужны в этой библиотеке. Я знаю, что проекты библиотеки Android в основном просто копируют код в другой проект, поэтому, если я скажу, что использую 25% кода в моей библиотеке общего назначения, мое приложение фактически содержит байт-код для всех 100%, или это правильно Это только для того, что мне нужно.

В прошлом у меня были некоторые проблемы с неиспользуемыми классами в Proguard, поэтому я просто один раз укусил, дважды застенчивый с ADT …

Solutions Collecting From Web of "Насколько разумным является Eclipse / ADT, когда дело доходит до проектов библиотеки Android?"

К сожалению, все ваши проекты будут расти, когда библиотека станет больше – даже если большинство содержимого этой библиотеки не используются. Я сам тестировал это, создав приложение A и библиотеку L. Если L – это библиотека, используемая в A, файл classes.dex (и, следовательно, файл A.apk) растет, если я добавляю больше классов, даже если они не являются используемый.

Подводя итог: прямо сейчас я бы создал базовую библиотеку для определенных вещей, которые являются небольшими и могут использоваться многими проектами, и создать новую библиотеку для каждого нового компонента, который будет больше и будет использоваться только некоторыми проектами. Хорошим кандидатом для новой библиотеки будет новый компонент пользовательского интерфейса с несколькими изображениями, определенными в ресурсах. Хорошим кандидатом для базовой библиотеки являются обычно используемые методы и такие вещи, как файловые кеши, например. Скомпилированный код довольно сильно сжат для Dalvik, который вы можете увидеть здесь. (Вся презентация на самом деле забавно смотреть 🙂

Изменить: если ProGuard активирован, он также удалит неиспользуемый код для вас. Достаточно proguard.cfg по умолчанию. Он не будет запускаться с построкой отладки (по умолчанию), но при компиляции окончательного .apk. Так что это действительно возможно!

Я успешно использовал 3-уровневые проекты библиотеки Android, хотя это своего рода боль. Основной вариант использования – это когда есть набор ресурсов и классов, которые вы хотите разделить в нескольких проектах. Поскольку я использую систему управления версиями, я бы предпочел не использовать символические ссылки.

Обратите внимание, что проекты библиотеки Android также сильно страдают при работе с ресурсами. ADT будет восстанавливать R.java один раз для каждой библиотеки, и каждый R.java будет содержать копию всех идентификаторов ресурсов из всех библиотек. Основная проблема заключается в том, что ресурсы регенерируются для всего проекта в целом, и нет никакого способа «построить банку» для зависимости, как можно было бы ожидать от обычных «библиотек». Мы попытались интегрироваться с OpenFeint и имели все виды ада, связанные с библиотеками и зависимостями. Я думаю, что мы закончили просто слияние всех исходных и ресурсных файлов OpenFeint в наш собственный проект и отключение проекта «Библиотека», поскольку оно предлагало мало ценности.

Проекты библиотеки Android являются неуклюжим способом совместного использования кода между проектами и имеют ряд недостатков. Я обнаружил, что все, что выполняется в проекте библиотеки, также может быть выполнено с помощью символических ссылок (источник символической ссылки на два проекта). Мне еще не удалось найти приложение, в котором проект Android Library предложил нечто, что было нелегко воспроизвести с помощью других, менее хрупких средств.