V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Trumeet
V2EX  ›  问与答

Android 应用内代理?

  •  
  •   Trumeet · 2018-05-19 17:25:35 +08:00 · 1994 次点击
    这是一个创建于 2179 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如在用 FireBase SDK,想在部分无法访问 FireBase 的国家 /地区使用,那么有没有方案?比如建立一个应用内代理,无需 ROOT 或系统上面的 VPN,仅供自己使用..(

    8 条回复    2018-05-21 22:25:44 +08:00
    jkjoke
        1
    jkjoke  
       2018-05-19 17:32:45 +08:00
    参考 TG 的内置 socks 代理
    Trumeet
        2
    Trumeet  
    OP
       2018-05-19 17:36:25 +08:00
    @jkjoke 我是想拦截 SDK 产生的请求(也就是 APP 发出的所有请求)然后跑代理((
    gam2046
        3
    gam2046  
       2018-05-19 19:17:03 +08:00
    https://github.com/tiann/epic

    EPIC 可以对自身进行 hook,所以你可以尝试 hook 一些基础的网络出口类(例如 HttpConnection )以达到内置代理的目的
    Trumeet
        4
    Trumeet  
    OP
       2018-05-20 09:48:11 +08:00 via Android
    @gam2046 感谢回复,不过 epic 兼容性成问题吧.. 其他项目上有在用,但是目前不兼容 P 和一些 abi 们(
    gam2046
        5
    gam2046  
       2018-05-20 10:13:13 +08:00
    以我的认知来看,这其实没有什么很好的办法了。
    那另一种方法就是在编译时期静态植入咯。尝试用 AspectJ 一类的方案,同样尝试 hook。

    但由于是静态植入,因此你无法直接 hook 系统类(例如 HttpConnection ),你只能 hook 你 sdk 中发起网络请求的方法,这就麻烦很多了。例如 SDK.request(...)方法发起了网络请求,其方法内部使用了 HttpConnection,你只能 hook 这个 request 方法,而不能 hook 其内部调用的系统方法。

    但是胜在稳定性上。

    如果其他大佬有更好的方法,恳请 at 我一下,之前有过类似的需求,但是确实没找到两全其美的方法。
    zts1993
        6
    zts1993  
       2018-05-20 20:20:22 +08:00
    又一次活捉 yuuta
    USNaWen
        7
    USNaWen  
       2018-05-21 10:45:02 +08:00
    酷安搜“ Google 空间”,这货和你的描述完全一致。
    Trumeet
        8
    Trumeet  
    OP
       2018-05-21 22:25:44 +08:00 via Android
    @gam2046 感谢回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3189 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:50 · PVG 20:50 · LAX 05:50 · JFK 08:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.