开工了讨论个技术问题:非标准的 android 应用能否和标准 android 应用建立 binder 连接

2023-01-28 17:23:03 +08:00
 zhwguest

比如我用 adb shell 启动一个 command line 程序,能不能和一个已经安装好的 apk 建立 binder 连接。 目前我用的是 socket(127.0.0.1)连接,但是需要通过 Binder 来实现(不讨论为什么:))

注意:我无法 root 。

4262 次点击
所在节点    Android
5 条回复
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 去实现相关操作。
FranzKafka95
2023-01-29 00:22:29 +08:00
当然能,native app(其实也类似于 native service),只要注册为 service 都可以和 Java Application 进行 binder 连接,再直白一点,AIDL 你总知道吧
zhwguest
2023-01-29 10:10:23 +08:00
@BrokenVns 非常感谢~。。。只是这个进程不是通过 ServiceManager 去获取命名的 Binder ,而是希望和普通的 Android APK 去取得 Binder 联系。这个进程也不是普通 Android APK fork 出来的,而是 Adb shell 启动的。即使是通过普通的 Android APK 来启动的,好像也不知道有什么父子进程可以直接传递 Binder 的方法。
zhwguest
2023-01-29 10:14:23 +08:00
@FranzKafka95 感谢大牛的指导。根据您的回答,我再请教一下,
1) 一个普通的(非安卓应用)的、非特权的进程如何注册为 Service 啊?
2) AIDL 我知道,这是在 Proxy 和 Stub 之间描述 Binder Transaction 规范的技术,利用它可以自动生成两端的、顺从于 Transaction 规范的高级语言代码(比如 Java ),只是这个东西对我的问题有什么帮助呢?我两边都手工来编写 Transaction 和 OnTransaction 都行,但是前提得拿到一个 Binder 接口啊。
还请指教。
rev1si0n
2023-02-01 09:52:25 +08:00
看看这个,感觉你想做的是不是就是类似的东西 https://github.com/RikkaApps/Shizuku

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/911114

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX