V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhwguest
V2EX  ›  Android

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

  •  
  •   zhwguest · 2023-01-28 17:23:03 +08:00 · 8950 次点击
    这是一个创建于 698 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    注意:我无法 root 。

    5 条回复    2023-02-01 09:52:25 +08:00
    BrokenVns
        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 去实现相关操作。
    FranzKafka95
        2
    FranzKafka95  
       2023-01-29 00:22:29 +08:00 via Android
    当然能,native app(其实也类似于 native service),只要注册为 service 都可以和 Java Application 进行 binder 连接,再直白一点,AIDL 你总知道吧
    zhwguest
        3
    zhwguest  
    OP
       2023-01-29 10:10:23 +08:00
    @BrokenVns 非常感谢~。。。只是这个进程不是通过 ServiceManager 去获取命名的 Binder ,而是希望和普通的 Android APK 去取得 Binder 联系。这个进程也不是普通 Android APK fork 出来的,而是 Adb shell 启动的。即使是通过普通的 Android APK 来启动的,好像也不知道有什么父子进程可以直接传递 Binder 的方法。
    zhwguest
        4
    zhwguest  
    OP
       2023-01-29 10:14:23 +08:00
    @FranzKafka95 感谢大牛的指导。根据您的回答,我再请教一下,
    1) 一个普通的(非安卓应用)的、非特权的进程如何注册为 Service 啊?
    2) AIDL 我知道,这是在 Proxy 和 Stub 之间描述 Binder Transaction 规范的技术,利用它可以自动生成两端的、顺从于 Transaction 规范的高级语言代码(比如 Java ),只是这个东西对我的问题有什么帮助呢?我两边都手工来编写 Transaction 和 OnTransaction 都行,但是前提得拿到一个 Binder 接口啊。
    还请指教。
    rev1si0n
        5
    rev1si0n  
       2023-02-01 09:52:25 +08:00   ❤️ 1
    看看这个,感觉你想做的是不是就是类似的东西 https://github.com/RikkaApps/Shizuku
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1003 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 21:55 · PVG 05:55 · LAX 13:55 · JFK 16:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.