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

两个 ANDROID APP 直接通过 USB 来验证,方案可行?

  •  
  •   mx3y · 2018-01-30 15:42:04 +08:00 · 10171 次点击
    这是一个创建于 2479 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有两个设备都装的有 ANDROID 系统,都带有 USB 口,目前拟定了一个场景,A 设备里的 APP 运行,一直监听 USB 口 当 A 设备的 USB 插上线并且另外一端插在 B 设备上,B 设备的 APP 通过 USB 和 A 设备的 APP 进行验证通信。

    由于不是专业做 ANDROID,Java 转过来的,请教几个问题: 1.这种场景的设定可行吗 2.有没有相关资料或者技术原型可以参考

    22 条回复    2018-02-08 21:53:07 +08:00
    whileFalse
        2
    whileFalse  
       2018-01-30 16:17:00 +08:00
    你的目的是什么?
    mx3y
        3
    mx3y  
    OP
       2018-01-30 16:26:26 +08:00
    @whileFalse 要申请证书,如果两个设备没连接就需要申请两个太麻烦了。所以出此下策,让 B 设备不连接 A 设备,B 设备的 APP 就无法使用
    podel
        4
    podel  
       2018-01-30 16:50:04 +08:00
    唔,n 久以前倒是试过在一台手机上用 adb 连接另外一台手机。(前提是启用了 usb 调试模式)(需不需要 root 不清楚,我是以 root 运行的,但是 adb 实际上是不需要 root 的)。
    whileFalse
        5
    whileFalse  
       2018-01-30 17:31:26 +08:00
    @mx3y #3 能详细说说么。为啥一定通过 usb 通讯,网络通讯不行么。
    mx3y
        6
    mx3y  
    OP
       2018-01-30 17:49:10 +08:00
    @whileFalse 主要还是两个方面:
    1.那个证书,是医疗类的证件,如果硬件部分没东西连接,那就算俩硬件,需要申请俩证书
    2.运行情况制约,因为是单机使用,没有网络的。
    mx3y
        7
    mx3y  
    OP
       2018-01-30 17:49:57 +08:00
    @podel 两端都是 USB 口吗
    mx3y
        8
    mx3y  
    OP
       2018-01-30 17:52:06 +08:00
    @icedx 翻墙了也打不开噢,感谢您的回复
    Karblue
        9
    Karblue  
       2018-01-30 18:18:29 +08:00
    俩 APP 都检测 USB 口。 然后 WIFI 内通信或者蓝牙直连通信。可以的
    pagxir
        10
    pagxir  
       2018-01-30 18:54:47 +08:00 via Android
    @mx3y 听你说打不开,强迫症的我点了下,发现你说的话是假的。
    XinLake
        11
    XinLake  
       2018-01-30 19:32:43 +08:00
    看了楼主要恶补一下 USB (通用串行总线)技术原理。

    USB 口严格来说不是通信意义上的接口,USB 是用来扩展设备的。并且是主从模式,必须一个主机( Master ),一个从机( Slave ),所有的动作都是主机主动发起,不存在监听、检测一说。
    U 盘插到电脑,电脑多出 U 盘,OS 多了个海量存储设备,OS 是主,U 盘是从。
    你手机 USB 调试插到电脑,电脑多出个 Android 设备(还有其他的),电脑是主,手机是从。

    你要 2 个 APP 通信,其中一方必须要吧 USB 设置为主( USB 支持 OTG 才行),通讯是主主动发起,另外一方听命令就行。不是“网络连接”模式的通讯。

    设想的场景很难实现
    ljbha007
        12
    ljbha007  
       2018-01-30 19:47:21 +08:00
    其中一台有 USB host 芯片或者 USB OTG 内核模块是可以的 不一定要用谷歌那个 ADK 你自己用 C 写个驱动用 JNI 来调用都可以的
    tempdban
        13
    tempdban  
       2018-01-30 19:52:30 +08:00
    @XinLake 一个做 usb host 一个开调试模式开
    host 端开 adb 端口转发
    想法太局限了。
    podel
        14
    podel  
       2018-01-31 10:00:33 +08:00
    @mx3y 是的 两个都是 usb 只不过一个主(OTG 模式) 一个从。
    mx3y
        15
    mx3y  
    OP
       2018-01-31 17:41:16 +08:00
    @Karblue 如楼上各位同学所说,担心主从的问题
    mx3y
        16
    mx3y  
    OP
       2018-01-31 17:41:35 +08:00
    @pagxir 哈哈,可能我人品差,老被墙
    mx3y
        17
    mx3y  
    OP
       2018-01-31 17:42:12 +08:00
    @XinLake 感谢您回复,在硬件支持的情况下,可以实现吗,一方设置为 OTG 模式,一方设置为开发者模式?
    mx3y
        18
    mx3y  
    OP
       2018-01-31 17:42:33 +08:00
    @ljbha007 另外一台有要求吗,求大神赐教
    mx3y
        19
    mx3y  
    OP
       2018-01-31 17:43:14 +08:00
    @tempdban 这样就可实现吗,两个都是 USB 口吗
    mx3y
        20
    mx3y  
    OP
       2018-01-31 17:43:25 +08:00
    @podel 感谢您
    XinLake
        21
    XinLake  
       2018-01-31 18:51:41 +08:00
    @mx3y USB 硬件很多都支持 OTG,但是你的设想很难。

    两个设备通过 USB 连接上以后,HOST APP 通讯的是一个 USB 设备,APP 和这个设备通讯都有规范,USB 设备连上 HOST 之后 USB 接口就透明了。

    说白了,USB 不是提供一个连接,而是给主机拓展了一个设备。

    假设 2 个设备分为 A B,假如 A 作为 HOST,B 作为 U 盘(海量存储设备)。此时 A 的 APP 能够访问 B,但只是基于 USB 设备协议规范上的通信,设备有啥功能只能用啥功能。如果要实现 2 个 APP 通信,可以设想一下 B 写个文件到存储区,然后 A 在读取这个文件,这样如果你觉得适合就可以。
    sungykk
        22
    sungykk  
       2018-02-08 21:53:07 +08:00
    提供一个相关原型:
    汽车中控上的手机互联就是和这个类似,导航车机端运行 Android , 手机可以是 ios 或者 android, 通过 usb 线和车机连接。连 ios 时车机端要切换成 device 模式,android 手机的话车机端要切换成 host。
    两端都安装手机互联 app, 通过 adb + socket 的方式通信。连接鉴权成功后手机的画面会通过 usb 传输投射到车机端上。
    之前做过一个项目是利用百度 carlife app 实现通信的,但是 Linux 平台还要移植 adb,android 平台应该更简单。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5846 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 03:00 · PVG 11:00 · LAX 19:00 · JFK 22:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.