Насколько интеллектуален Eclipse / ADT, когда дело касается проектов библиотек Android? - PullRequest
11 голосов
/ 10 февраля 2011

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

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

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

Ответы [ 3 ]

4 голосов
/ 11 февраля 2011

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

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

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

1 голос
/ 14 июля 2011

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

0 голосов
/ 31 мая 2011

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

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

...