Как создать общую библиотеку в Android - PullRequest
12 голосов
/ 02 декабря 2011

У меня есть библиотека, скажем, LIB, которая предоставляет довольно много API и классов для использования разработчиками приложений.

Если в телефоне используется несколько приложений, использующих LIB, мне нужен только одинэкземпляр LIB, который будет создан и запущен.Это несколько похоже на то, какие сервисы платформы Android, такие как LocationManager, SensorManager, PackageManager и т. Д.

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

  1. Как убедиться, чтосуществует только один экземпляр LIB?
  2. Как развернуть LIB (отдельный apk / в комплекте с каждым приложением, которое его использует, но только один из них создает экземпляр библиотеки в любой момент времени) и т. д.
  3. Есть ли другой способ (кроме service / AIDL), чтобы убедиться, что только один экземпляр LIB работает независимо от количества приложений, использующих его.

Ответы [ 2 ]

6 голосов
/ 15 декабря 2011

Хорошо, потратив на это время, вот ответы на мои вопросы: -

Q. Как убедиться, что существует только один экземпляр LIB? - Только путем предоставления функциональности LIB через службу.

Q. Как развернуть LIB (отдельный apk / в комплекте с каждым приложением, которое его использует, но только один из них создает экземпляр библиотеки в любой момент времени) и т. Д. -

Для обслуживания будет отдельный apk (или, возможно, в комплекте с одним из клиентских приложений службы),

Q. Есть ли другой способ (кроме service / AIDL), чтобы убедиться, что только один экземпляр LIB работает независимо от количества приложений, использующих его.

Да, это похоже на то, что LIB входит в комплект каждого приложения. Но для этого потребуется надежный протокол связи между библиотеками, использующими намерения, чтобы одна из них выступала в роли мастера и делилась данными с другими библиотеками. По сути, LIB, упакованный в apk, запускает свой движок, только если другой экземпляр не запущен. Одним из способов достижения этого является использование широковещательных рассылок и для обеспечения безопасности разрешения могут быть связаны с соответствующими широковещательными действиями.

0 голосов
/ 03 декабря 2011

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

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

Если вы хотите, чтобы ваша библиотека работала независимо от других приложений, то это действительно служба, и вы должны подумать, каким должен быть жизненный цикл (например, запущенный приложением, запущенный при загрузке и т. Д.).

Если ваша библиотека содержит действия для запуска, ОС Android уже справляется с этим - другое приложение просто создает намерение и вызывает вашу активность. Вот как работает Android - приложения могут совместно использовать данные и рабочие процессы друг с другом, используя намерения.

Если есть службы, это то же самое - вызывающее приложение либо взаимодействует с работающей службой, либо запускает службу.

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

Например, Google Карты - это отдельное приложение, но другие приложения могут вызвать намерение загрузить действие из этого приложения. То же самое с сообщениями и другими действиями, которые могут обрабатываться различными приложениями.

...