java - 以编程方式创建 Android 配置文件

标签 java android vpn android-vpn-service

我一直在分析网络,寻找一种在 Android 上创建 VPN 客户端的方法。我似乎找不到任何关于如何执行此操作的好资源。

目标是,我希望能够使用 Android 中内置的 VPN 功能(可能以编程方式添加新连接)或其他方式设置 VPN。

我确实在文档中遇到了VpnService,但不清楚如何使用它。有谁有这样做的好例子吗?目前使用 Android SDK 是否可以做到这一点?

最佳答案

Android 给出了 sample code ToyVpn您可以根据需要查看并重用逻辑。


这是 documentation 的一些详细信息

此类中有两个主要方法:prepare(Context) 和 VpnService.Builder.assessment()。前者处理用户操作并停止另一个应用程序创建的 VPN 连接。后者使用提供给 VpnService.Builder 的参数创建 VPN 接口(interface)。应用程序必须调用prepare(Context)来授予使用此类中其他方法的权限,并且可以随时撤销该权限。以下是创建 VPN 连接的一般步骤:

  1. 当用户按下按钮进行连接时,调用prepare(Context)并启动返回的 Intent (如果不为空)。

  2. 应用程序准备就绪后,启动服务。

  3. 创建到远程服务器的隧道并协商 VPN 连接的网络参数。

  4. 将这些参数提供给 VpnService.Builder 并通过调用 VpnService.Builder.built() 创建 VPN 接口(interface)。

  5. 在隧道和返回的文件描述符之间处理和交换数据包。

  6. 调用 onRevoke() 时,关闭文件描述符并正常关闭隧道。

扩展此类的服务需要使用适当的权限和 Intent 过滤器进行声明。他们的访问必须受到 Manifest.permission.BIND_VPN_SERVICE 权限的保护,并且他们的 Intent 过滤器必须与 SERVICE_INTERFACE 操作匹配。以下是在 AndroidManifest.xml 中声明 VPN 服务的示例:

<service android:name=".ExampleVpnService"
         android:permission="android.permission.BIND_VPN_SERVICE">
     <intent-filter>
         <action android:name="android.net.VpnService"/>
     </intent-filter>
 </service>

关于java - 以编程方式创建 Android 配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51086017/

相关文章:

java - 为什么 Account Kit 不再通过短信向我的 Android 应用程序发送验证码?

java - ObjectMapper readValue 类型从 LinkedHasMap 转换为自定义类型

java - Gecko 驱动程序日志文件中的 IPDL 协议(protocol)错误 : Handler returned error code!

java - 将 Arraylist 存储在 hashmap 中

android - 如何在Android中显示录制时间?

android - 如何以编程方式接听电话 Xamarin |安卓

java - 将另一个 Activity 中的项目添加到 ExpandableListView

ios - 有没有办法为个人 VPN 指定 IKEv2 安全关联参数?

java - 如何使用 PPTP android 创建自动连接到 Vpn 的应用程序?

tcp - VPN 隧道中没有 SYN+ACK 响应