Android创建vpn无需用户确认相关问题

2023-09-04  本文已影响0人  学海摆渡人

背景

需要在android系统中集成加速app,用户无感开启vpn

vpn prepare失败

因为刚开始是采用android.uid.system uid,与Vpn服务默认一致,一直无法与netd建立tun0成功


image.png
private boolean isCurrentPreparedPackage(String packageName) {
       // We can't just check that packageName matches mPackage, because if the app was uninstalled
       // and reinstalled it will no longer be prepared. Instead check the UID.          
      return getAppUid(packageName, mUserHandle) == mOwnerUID;
}

隐藏vpn提示框

image.png

原理跟VpnComfirm一样,少了vpn弹窗过程,但是需要权限CONTOL_VPN
改权限需要将app内置到priv-app目录下,或者具有系统签名即可

创建binder服务

因为要提供命令给外部调用,采用am、pm服务一样,但是普通应用无法,但是appuid <10000 就可以注册


image.png

将shareduid 换成其他就可以

静默启动服务

在android 8启动后台服务(当前进程不在运行)是无法通过am startservice方式启动,但是翻阅源码发现蓝牙uid是在白名单内


image.png

将app到sharduid换成蓝牙的,就可以做到静默启动vpn了

但是用户还是能看到右上角vpn图标

上一篇下一篇

猜你喜欢

热点阅读