比如我用 adb shell 启动一个 command line 程序,能不能和一个已经安装好的 apk 建立 binder 连接。 目前我用的是 socket(127.0.0.1)连接,但是需要通过 Binder 来实现(不讨论为什么:))
注意:我无法 root 。
1
BrokenVns 2023-01-28 21:39:15 +08:00
native 程序和 java 层程序是可以通过 servicemanager 进行 binder 连接的。
但是 apk 的 binder 一般是匿名 binder ,被 AMS 管理着,要通过 AMS 的接口才能找到对应的 binder 节点并获取。 直接搞个 Bpbinder 调对应接口的话,要实现的东西太多了,还要通过 AMS 的各种参数,进程检查,感觉很难。 我记得有 native app ,这块不了解,不知道能不能在进程了起个 native app 去实现相关操作。 |
2
FranzKafka95 2023-01-29 00:22:29 +08:00 via Android
当然能,native app(其实也类似于 native service),只要注册为 service 都可以和 Java Application 进行 binder 连接,再直白一点,AIDL 你总知道吧
|
3
zhwguest OP @BrokenVns 非常感谢~。。。只是这个进程不是通过 ServiceManager 去获取命名的 Binder ,而是希望和普通的 Android APK 去取得 Binder 联系。这个进程也不是普通 Android APK fork 出来的,而是 Adb shell 启动的。即使是通过普通的 Android APK 来启动的,好像也不知道有什么父子进程可以直接传递 Binder 的方法。
|
4
zhwguest OP @FranzKafka95 感谢大牛的指导。根据您的回答,我再请教一下,
1) 一个普通的(非安卓应用)的、非特权的进程如何注册为 Service 啊? 2) AIDL 我知道,这是在 Proxy 和 Stub 之间描述 Binder Transaction 规范的技术,利用它可以自动生成两端的、顺从于 Transaction 规范的高级语言代码(比如 Java ),只是这个东西对我的问题有什么帮助呢?我两边都手工来编写 Transaction 和 OnTransaction 都行,但是前提得拿到一个 Binder 接口啊。 还请指教。 |
5
rev1si0n 2023-02-01 09:52:25 +08:00 1
看看这个,感觉你想做的是不是就是类似的东西 https://github.com/RikkaApps/Shizuku
|