安卓模拟实现 iOS 的动态联网权限

2021-05-20 00:26:52 +08:00
 cache

https://play.google.com/store/apps/details?id=com.cloudmonad.fw

前情提要: Android 为什么不和 iOS 一样需要用户动态确认联网权限

研究了一通后,决定自己写一个,和一众类似 App 一样,用的是 VPN 实现,底层用 Rust 实现,UI 用 Flutter 。

原理: 创建 Vpn 服务拦截网络流量,根据 socket 识别对应 App,弹出对话框让用户确认授权。

Vpn 部分是从另一个 rust 项目搬过来的,主要工作量在调 Flutter UI,特别是那个弹出对话框,一开始单独实现成一个 FlutterActivity,但每次弹出时需要几秒加载,尝试缓存对应 FlutterEngine 未果。目前的实现是复用主界面的 FlutterActivity,用路由区分。实现了通知秒现,但如果用户此时在主程序设置界面会被打断。 不知是否有更好的方案

五一开发完备用机上跑了几个星期,还算稳定,顺便上了 Play Store,今天发现审核完了,也算是有自己 App 的人了:)

感兴趣的 tx 可以试用一下

注意事项:目前只在我自己的手机上测试过(小米 10 lite ) MIUI 12/Android 11,由于使用了 getConnectionOwnerUid 最低支持版本为 Api 29(Android 10 )

7786 次点击
所在节点    Android
40 条回复
treblex
2021-05-20 11:13:01 +08:00
请问下楼主,rust 和 flutter 交互方便嘛
之前尝试过 go mobile,流程应该是 build farmework,添加到原生项目里,然后再写 methodChannel,感觉不是特别方便
robinchina
2021-05-20 11:39:48 +08:00
安卓不是可以单独设置程序网络权限么?
ily433664
2021-05-20 11:43:11 +08:00
魅族 18 在 app 首次启动的时候就会让你授权是否允许联网
yanyumihuang
2021-05-20 12:02:41 +08:00
如何跟别的 vpn 共存呢?我记得 cfa 是支持用 process-name 匹配包名来进行路由的。
yanyumihuang
2021-05-20 12:03:49 +08:00
cfa 是指 clash for android
cache
2021-05-20 12:39:55 +08:00
@treblex 非常棒,我已经爱上他们了,这也是我写这个 app 的最大动力


@ily433664 魅族这个功能就是我想实现的,但和 MIUI 一样,他应该不会限制系统自己的网络吧,从保护隐私的角度,你的隐私最不希望被了解你的人知道,而系统是最了解你手机的人了,需要被重点盯住。


@yanyumihuang
无法和其他 vpn 共存,貌似可以通过工作空间多开 VPN,没有深入研究,这个 App 主打使用简单,不用配置。
Thinkerous
2021-05-20 13:45:45 +08:00
ily433664
2021-05-20 14:13:53 +08:00
@cache 按照你这么说,既然我不相信手机厂商,为什么会相信你这个 app ?
HangoX
2021-05-20 14:16:19 +08:00
因为 iOS 的联网控制只有国内版本才有,国外是没有的,换个想法就是这货应该是国内 rom 做了
gggccc44
2021-05-20 14:21:34 +08:00
Analytics 谷歌和苹果都有啊,话说国行 iPhone 这个请求联网功能简直了。。。
q197
2021-05-20 14:56:59 +08:00
好像还有一种实现是基于 iptable,当然需要 root,好处是设置完后这个防火墙 app 关了也无所谓,坏处是重启失效需要 app 开机再次设置适配一下
cache
2021-05-20 15:16:59 +08:00
@ily433664 只是举个栗子,第三方 App 没有你其他维度的信息,相对能力弱。 当然我相信魅族小米这样的大公司不会干太出格的事,但市面上还有大量其他小作坊公司。

@gggccc44 是的,小米的 Analytics 应该不是后门,我测试了一下可以用 adb 删掉,但重启就装回来了。这种有点感觉像开发商把房子卖给你后,还留着你房间的钥匙,时不时来检查一下装修的怎么样,门安不安全。 也不通知一下。

@q197 Android 7.0 以后有一个 Always-on VPN 功能,重启也能生效,Vpn 没有连上时还能断网,防止数据泄漏。
Cloutain
2021-05-20 17:22:54 +08:00
很不错哦
woodensail
2021-05-20 17:41:41 +08:00
@ily433664 因为在现有的环境下,app 开发者没有能力做到中间人窃听。

就如同我不信任微信,但是信任微信小程序开发团队不会窃取我的隐私。因为微信早就把所有和隐私的口子堵完了,小程序压根没能力碰到涉及隐私的内容。
Veneris
2021-05-20 17:50:35 +08:00
那开了这个,岂不是没法开小飞机了
ily433664
2021-05-20 18:08:03 +08:00
@woodensail 按照楼主的方式,这个 app 至少知道你访问了什么,如果你觉得这个不是隐私当就我没说
woodensail
2021-05-20 18:10:52 +08:00
@ily433664 是啊,也仅此而已,不像系统本身,不仅能知道你访问了什么网站,还能知道你访问了什么内容,还能篡改你访问的内容。
如果你觉得这两种没有区别就当我没说。
823805669hehe
2021-05-24 13:01:22 +08:00
@cache 楼主,这个 APP 的源码有计划公开吗?否则不是自己构建的很难让人放心啊
cache
2021-05-24 16:06:01 +08:00
@823805669hehe 暂时还没有,主要是核心部分代码是其他恰饭项目的

你可以用 xprivacy 监控一下,除了启动 vpn 相关,没有调用任何其他 Android 系统接口,连存储权限都没有申请
feifeichen
2021-05-24 19:04:34 +08:00
试用了一下,发现会出现大部分 app 识别不到的情况会导致默认关网并且打不开。希望楼主可以优化下,挺好用的

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

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

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

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

© 2021 V2EX