Подтвердить что ты не робот

Как создать общую библиотеку в Android

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

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

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

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

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

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

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