如何从 /vendor/app 启动与 android-TREBLE 兼容的供应商 java 服务

Bal*_*n A 8 android android-service android-service-binding android-securityexception android-application-class

在我的 Android-O 设备中,下面两个后台服务通过 AIDL 相互通信。

  1. 本机/C++ android 服务

    • 通过 init rc 启动
    • 与系统 linux-user 一起运行
    • 部署在 /system 分区,eg, /system/bin/nat二进制。
  2. 来自 apk 的 Java 服务

    • 通过在 AndroidManifest 中注册的 bootcomplete 接收器启动。
    • 服务类也在 AndroidManifest 和 export:enabled 中指定。
    • 运行系统系统 linux 用户,使用平台证书签名。
    • 部署在系统分区中。 eg /system/app/jav/jav.apk

到目前为止没有问题。以上两个服务都注册了ServiceManager. 两个服务都可以通过 /dev/binder. 相互调用,都从 Android 启动开始并无限期地继续运行。

高音带来了麻烦:

按照 Treble 的要求,上面的两个都应该移动到 /vendor 分区,并有适当的 SEPolicies。,这样,java 和 c++ 服务都可以通过/dev/vndbinder.相互调用,即通过注册自己VendorServiceManager

参考文档https://source.android.com/devices/architecture/hidl/binder-ipc我能够启动本地 c++ 服务,/vendor/bin/nat从中VenorServiceManager(/dev/vndbinder)成功注册。

现在我可以通过vndservice call com.yyy.zzz.Myservice 0 但是,无法启动部署为的 JAVA 供应商服务来调用 aidl 接口函数/vendor/app/jav/jav.apk.

看起来总是ServiceManager处理 AndroidManifest 中的所有“服务”条目,VendorServiceManager甚至不处理 /vendor 分区应用程序。我不能通过 AndroidManifest 注册 VendorServiceManager 吗?如果是,是否有任何示例应用程序/代码可以参考?

另外,Android 抛出错误说后台服务无法启动。有没有办法从 /vendor 分区应用程序获得后台 JAVA 服务,即使它是由系统 linux 用户启动并使用平台证书签名的?

我不希望有“作业调度程序”类型的延迟处理程序,因为通信和响应预计是实时的,并且服务预计从启动时开始无限期运行。

请帮助您提出建议。