В моем устройстве Android-O ниже двух фоновых сервисов, взаимодействующих друг с другом через AIDL.
Native / c ++ android service
- Запускается через init rc
- Работает с системой linux-user
- Развернут в / системный раздел,
eg, /system/bin/nat
бинарный.
Служба 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 и подписано сертификатом платформы?
Я не хочу иметь отложенные обработчики типа «Планировщик заданий», так как ожидается, что связь и ответы будут происходить в реальном времени, а служба будет работать бесконечно с момента загрузки.
Пожалуйста, помогите с вашими предложениями.