非特权的 Linux 原生可执行文件在 Android 中能否使用 Binder 与常规应用程序通信?

3
为了测试和控制我的常规Android应用程序,我编写了一个命令行Linux测试程序,并使用adb shell执行此测试程序。
我可以通过执行am等命令间接地发送广播或启动/从我的Android应用程序启动活动,但我无法像getService() / startActivityForResult() / bindService()那样直接建立与我的Android应用程序之间的Binder连接。
我的Linux可执行文件也不是特权程序,因此我不应该能够使用ServiceManager直接在系统中发布我的服务。
是否有办法让我与常规应用程序建立Binder连接?
1个回答

0

很遗憾,你不能... Binder接口仅限于系统级进程或具有适当权限的应用程序。在Android上,非特权Linux本机可执行文件无法直接与常规应用程序建立Binder连接。


非常感谢!您能否提供一些官方参考资料或一些细节信息呢?“适当的权限”确切的意思是什么? - progquester
“适当的权限”确切含义是指访问Binder所需的Android系统权限。只有具备适当权限的系统级进程或应用程序才能访问Binder接口。您可以参考以下官方参考资料:Android Binder IPC - https://source.android.com/docs/core/architecture/hidl/binder-ipc Android Inter-Process Communication (IPC) - https://proandroiddev.com/ipc-techniques-for-android-45d815ac59be(非官方但很好) - Nova
谢谢。但是,正常的本地进程可以通过服务名称使用ServiceManager.getService()访问Binder。那么适当的权限是什么?您提供的链接中我找不到任何有关适当权限的信息。您能否给我一个相关名称? - progquester
ServiceManager接口也是受限的,只能被系统级进程或具有适当权限的应用程序使用。关于“适当的权限”,它不是可以在清单中声明的特定权限,而是进程必须具备一组特权才能使用ServiceManager接口。换句话说,该进程必须作为特权系统用户(例如root或shell)运行。 - Nova
这些信息可以在Android框架的源代码中找到,具体来说是在服务管理器头文件中。在这个头文件中,ServiceManager接口被定义为系统级服务,而方法对普通应用程序不可用。 - Nova

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接