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图标