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

请问 android 是否可以像后端一样处理接口请求?

  •  
  •   aaorn1201 · 2023-06-27 11:07:44 +08:00 · 9283 次点击
    这是一个创建于 497 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如 okhttp 、retrofit 等 http 库能否除了发送请求以外,也能像后端那样响应外部的 REST 接口请求?多谢。

    27 条回复    2023-06-28 17:18:39 +08:00
    zongren
        1
    zongren  
       2023-06-27 11:09:47 +08:00
    android 机器可以部署 http 服务,但是不清楚是不是需要 root
    Vegetable
        2
    Vegetable  
       2023-06-27 11:14:20 +08:00
    当然可以, 但你列出来的应该都是客户端吧, 处理请求往往需要专门的 server,比如 https://github.com/yanzhenjie/AndServer
    qiuwj
        3
    qiuwj  
       2023-06-27 11:16:12 +08:00
    只要能监听端口就能提供服务,其他设备进程就能通过 ip+端口和你的服务交互。可以 github 搜下 localsend (局域网文件传输,支持 ios+Android+win+macos )
    ysy950803
        4
    ysy950803  
       2023-06-27 11:18:47 +08:00
    可以呀,本身就能当成一个微型的 Linux 服务器。
    Vegetable
        5
    Vegetable  
       2023-06-27 11:27:05 +08:00
    另外, 如果你不是想在现有应用里添加监听,而是单纯的想用手机提供 web 服务,那你最好是用 termux,把手机当 arm 服务器就行了
    aaorn1201
        6
    aaorn1201  
    OP
       2023-06-27 11:40:17 +08:00
    @Vegetable 好的谢谢,看来 okhttp 、retrofit 不行啊,我是不是得把现有 app 代码加上 AndServer ,设计定义好接口。就可以处理来自外部的接口请求了。
    dzdh
        7
    dzdh  
       2023-06-27 11:53:13 +08:00
    同 wifi 传文件、视频、音乐 访问手机 ip+随机端口 这不就是么
    githmb
        8
    githmb  
       2023-06-27 12:28:43 +08:00
    这个问题提的,搞得好像 Android 不支持 TCP/IP 协议似的
    xiaowowo
        9
    xiaowowo  
       2023-06-27 13:23:01 +08:00
    可以是可以,但是大概率锁屏后过一段时间就连接不上了。
    TArysiyehua
        10
    TArysiyehua  
       2023-06-27 14:10:33 +08:00
    AIDL 不就是把其中一个作为服务器,一个作为客户端吗?虽然不是 http,原理是类似的
    flyqie
        11
    flyqie  
       2023-06-27 14:18:34 +08:00 via Android
    完全可以,请参考 genymotion pass 。

    genymotion pass 本身就是一个纯粹的 android 系统,不存在任何的额外虚拟化层。

    你看到的 webui 和 api 都是他们写的 android app 提供的服务,没记错的话用的是 java 。
    flyqie
        12
    flyqie  
       2023-06-27 14:20:28 +08:00 via Android
    @flyqie #11

    但 okhttp 、retrofit 等库估计实现不了,他们主要是 client ,你这个需求需要 server 库。
    xiangyuecn
        13
    xiangyuecn  
       2023-06-27 14:28:32 +08:00
    只要能监听 socket ,都能作服务端,手撸 http
    soar0712
        14
    soar0712  
       2023-06-27 14:32:46 +08:00
    github 有 nanohttpd 库,自己封装可以实现大部分需求
    kiroter
        15
    kiroter  
       2023-06-27 14:38:21 +08:00
    有一个啥库来着可以,忘了
    flyqie
        16
    flyqie  
       2023-06-27 14:45:50 +08:00 via Android
    @soar0712 #14

    对,没记错的话 genymotion pass 就是用的这个库。
    x77
        17
    x77  
       2023-06-27 14:47:01 +08:00
    可以,但是不建议这么做。

    http 库基本都区分服务端和客户端。okhttp 、retrofit 等都是客户端(主动方,发起请求的那边),没特别要求的话 java 自己也有 http 客户端。

    实现“REST 接口服务”你需要 http 服务器库,早期 apache 提供过后来好像和 google 有争议就停掉了(记得不是很清楚),后来用的比较多的有 nanohttp ,不过这个好像也停更了,总之 http 服务器这类库没客户端多,因为移动端本身就不适合做 http 服务器。功耗、隐私等维度都和移动设备的理念背道而驰。

    移动端上的“接口服务”多数时候使用 tcp 就可以了(如实现文件分享),不需要支援到 http 等应用层协议,tcp 也可以实现类“接口服务”,只要定义客户端通讯协议就行。
    Bown
        18
    Bown  
       2023-06-27 15:06:28 +08:00
    可以试试 https://ktor.io/
    elonmask
        19
    elonmask  
       2023-06-27 15:47:12 +08:00
    投屏功能 手表 共享文件 传文件 都是在安卓建一个服务器。
    huangsijun17
        20
    huangsijun17  
       2023-06-27 16:22:45 +08:00
    @zongren 端口号在 1024 以上不需要 root 。
    jaylee4869
        21
    jaylee4869  
       2023-06-27 17:07:31 +08:00
    Emby Server 就有 Android 端。
    zhanlanhuizhang
        22
    zhanlanhuizhang  
       2023-06-27 17:30:54 +08:00
    我的应用就用了这样的功能,断网一样用,用 AndServer ,实现后台所有接口。说真的,自己就是在写一个后台。
    lisxour
        23
    lisxour  
       2023-06-27 17:53:51 +08:00
    @aaorn1201 你说的这些都是请求工具,首先肯定是可以开服务器的,只不过你要用专门的库,或者自己实现(不太清楚 android sdk 有没有提供直接可以用的 server 组件),当然你可以为了偷懒直接套一个 android 移植版的 Nginx + PHP ,不过这种移植版多多少少会有移植兼容问题。
    azusematsuri
        24
    azusematsuri  
       2023-06-27 22:55:35 +08:00 via Android
    端口可能要 root 可能会冲突,本地程序间通信可能监听 socket 文件更好
    mmdsun
        25
    mmdsun  
       2023-06-27 23:48:06 +08:00
    当然可以安卓都上能跑 linux 系统,我一个安卓旧手机都能跑 web api,现在就服务器在用。
    https://termux.dev/cn/index.h

    如果你说像在 android 应用开发的 API 就不知道了,Java 一直是有 http serve 的
    https://openjdk.org/jeps/408
    TinyBad
        26
    TinyBad  
       2023-06-28 11:27:26 +08:00
    完全可行,但是我没记错的话,80 端口好像是要 root 的
    rev1si0n
        27
    rev1si0n  
       2023-06-28 17:18:39 +08:00
    可以的哦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1346 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 23:37 · PVG 07:37 · LAX 15:37 · JFK 18:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.