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 )
1
Rxianbei 2021-05-20 01:18:28 +08:00 via Android
很棒的想法
|
2
yitingbai 2021-05-20 02:43:52 +08:00
意思是不是所有的网络流量都得经过你的 VPN 软件? 数据安全不能仅靠开发者的良心吧
|
3
murmur 2021-05-20 08:07:22 +08:00
安卓的联网权限不是动态控制的,但是可以全局控制啊,ios 也做不到按请求控制联网吧
|
4
john6lq 2021-05-20 08:40:34 +08:00 via iPhone
Windows 也没有,有空可以做一个
|
5
cache OP |
7
1041412569 2021-05-20 08:46:01 +08:00
感觉,这 APP 需要一个开关
|
9
ikas 2021-05-20 08:49:16 +08:00
之前一直在用 NetGuard,与你这个原理一样,后来换了 afwall,现在 lineageos18.1 自带控制了......
|
10
cache OP @1041412569 哈哈,是的,后面加上
|
11
cache OP @ikas 是的,afwall 需要 root 权限吧,看了一下好像是用的是 iptables
lineageos18.1 自带控制是怎么样的? MIUI 也能设置控制 App 联网权限,但每次点开比较麻烦,而且很多系统 App 不能设置 |
12
sephinh 2021-05-20 09:01:38 +08:00 via iPhone
Android 自带不是就能分别控制移动网络和 Wi-Fi 的接入了吗
|
13
ikas 2021-05-20 09:04:14 +08:00
@cache lineageos18.1 也是加了几个开关,1.控制联网 2.控制 wifi 3.data 不过也不没有动态提示了
|
14
AoEiuV020 2021-05-20 09:18:54 +08:00
卵用,只会导致 bug,开发者不可能去适配你的确认授权,只会默认一启动就有网,
|
16
hs0000t 2021-05-20 09:24:04 +08:00 via Android
类似于火绒的联网控制?
|
18
AoEiuV020 2021-05-20 09:36:38 +08:00
@cache 我意思是,ios 开发时就必须考虑 app 首次启动用户授权前没有网络的情况,针对这种情况做一些处理,必要时一些请求失败要等授权后重试,安卓开发者不会考虑这个,以为有网却没网就可能导致 bug,
|
19
Cavolo 2021-05-20 09:43:50 +08:00 via iPhone
iOS 我求求不要有这功能
|
21
treblex 2021-05-20 11:13:01 +08:00
请问下楼主,rust 和 flutter 交互方便嘛
之前尝试过 go mobile,流程应该是 build farmework,添加到原生项目里,然后再写 methodChannel,感觉不是特别方便 |
22
robinchina 2021-05-20 11:39:48 +08:00
安卓不是可以单独设置程序网络权限么?
|
23
ily433664 2021-05-20 11:43:11 +08:00
魅族 18 在 app 首次启动的时候就会让你授权是否允许联网
|
24
yanyumihuang 2021-05-20 12:02:41 +08:00
如何跟别的 vpn 共存呢?我记得 cfa 是支持用 process-name 匹配包名来进行路由的。
|
25
yanyumihuang 2021-05-20 12:03:49 +08:00
cfa 是指 clash for android
|
26
cache OP @treblex 非常棒,我已经爱上他们了,这也是我写这个 app 的最大动力
@ily433664 魅族这个功能就是我想实现的,但和 MIUI 一样,他应该不会限制系统自己的网络吧,从保护隐私的角度,你的隐私最不希望被了解你的人知道,而系统是最了解你手机的人了,需要被重点盯住。 @yanyumihuang 无法和其他 vpn 共存,貌似可以通过工作空间多开 VPN,没有深入研究,这个 App 主打使用简单,不用配置。 |
27
Thinkerous 2021-05-20 13:45:45 +08:00
GlassWire Data Usage Monitor
https://play.google.com/store/apps/details?id=com.glasswire.android |
29
HangoX 2021-05-20 14:16:19 +08:00
因为 iOS 的联网控制只有国内版本才有,国外是没有的,换个想法就是这货应该是国内 rom 做了
|
30
gggccc44 2021-05-20 14:21:34 +08:00
Analytics 谷歌和苹果都有啊,话说国行 iPhone 这个请求联网功能简直了。。。
|
31
q197 2021-05-20 14:56:59 +08:00
好像还有一种实现是基于 iptable,当然需要 root,好处是设置完后这个防火墙 app 关了也无所谓,坏处是重启失效需要 app 开机再次设置适配一下
|
32
cache OP |
33
Cloutain 2021-05-20 17:22:54 +08:00
很不错哦
|
34
woodensail 2021-05-20 17:41:41 +08:00
@ily433664 因为在现有的环境下,app 开发者没有能力做到中间人窃听。
就如同我不信任微信,但是信任微信小程序开发团队不会窃取我的隐私。因为微信早就把所有和隐私的口子堵完了,小程序压根没能力碰到涉及隐私的内容。 |
35
Veneris 2021-05-20 17:50:35 +08:00
那开了这个,岂不是没法开小飞机了
|
36
ily433664 2021-05-20 18:08:03 +08:00
@woodensail 按照楼主的方式,这个 app 至少知道你访问了什么,如果你觉得这个不是隐私当就我没说
|
37
woodensail 2021-05-20 18:10:52 +08:00
@ily433664 是啊,也仅此而已,不像系统本身,不仅能知道你访问了什么网站,还能知道你访问了什么内容,还能篡改你访问的内容。
如果你觉得这两种没有区别就当我没说。 |
38
823805669hehe 2021-05-24 13:01:22 +08:00
@cache 楼主,这个 APP 的源码有计划公开吗?否则不是自己构建的很难让人放心啊
|
39
cache OP @823805669hehe 暂时还没有,主要是核心部分代码是其他恰饭项目的
你可以用 xprivacy 监控一下,除了启动 vpn 相关,没有调用任何其他 Android 系统接口,连存储权限都没有申请 |
40
feifeichen 2021-05-24 19:04:34 +08:00
试用了一下,发现会出现大部分 app 识别不到的情况会导致默认关网并且打不开。希望楼主可以优化下,挺好用的
|