Как запустить Android-совместимую JAV-сервис поставщика Android / TREBLE из / vendor / app - PullRequest
2 голосов
/ 25 марта 2019

В моем устройстве Android-O ниже двух фоновых сервисов, взаимодействующих друг с другом через AIDL.

  1. Native / c ++ android service

    • Запускается через init rc
    • Работает с системой linux-user
    • Развернут в / системный раздел, eg, /system/bin/nat бинарный.
  2. Служба Java от apk

    • Запускается через приемник загрузки, зарегистрированный в AndroidManifest.
    • Класс обслуживания также указан в AndroidManifest, и экспорт: включен.
    • Запускает системного пользователя Linux, подписанного сертификатом платформы.
    • Развернуто в системном разделе. eg /system/app/jav/jav.apk

Пока проблем нет. Обе вышеперечисленные услуги зарегистрированы с ServiceManager. Обе службы смогли вызывать друг друга через / dev / binder. Оба запускаются с загрузкой Android и продолжают работать бесконечно.

Высокие частоты приносят сюда проблемы:

В соответствии с требованиями Treble, оба вышеперечисленных должны быть перемещены в раздел / vendor с установленными надлежащими политиками SEP., Чтобы службы java и c ++ могли вызывать друг друга через /dev/vndbinder., Т. Е. Регистрируя себя с помощью VendorServiceManager .

Ссылаясь на документацию, https://source.android.com/devices/architecture/hidl/binder-ipc Я могу запустить нативный сервис c ++ с /vendor/bin/nat, который успешно регистрируется на VenorServiceManager(/dev/vndbinder).

Теперь я могу вызывать функции интерфейса aidl через vndservice call com.yyy.zzz.Myservice 0 Но не удалось запустить службу поставщика JAVA, развернутую как /vendor/app/jav/jav.apk.

Похоже, что всегда ServiceManager обрабатывает все «служебные» записи в AndroidManifest вместо VendorServiceManager даже для приложений разделения / vendor. Не могу ли я зарегистрироваться в VendorServiceManager через AndroidManifest? Если да, есть ли пример приложения / кода, на который я могу сослаться?

Кроме того, Android выдает ошибку о том, что фоновые службы не могут быть запущены Есть ли способ получить фоновые службы JAVA из приложения раздела / vendor, даже если оно запущено пользователем системы linux и подписано сертификатом платформы?

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

Пожалуйста, помогите с вашими предложениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...