# v2rayNG项目分析
## 项目概述
v2rayNG是一款基于Android平台的V2Ray客户端应用程序，支持Xray core和v2fly core，主要用于网络代理和VPN服务。

## 技术栈
- 开发语言 ：主要使用Kotlin语言开发
- 构建系统 ：Gradle Kotlin DSL (.kts格式)
- 数据存储 ：采用MMKV进行高效键值存储
- UI框架 ：基于AndroidX和Material Design
- 核心库 ：通过JNI集成V2Ray/Xray核心功能
- 支持架构 ：arm64-v8a、armeabi-v7a、x86_64、x86
## 核心功能
1.多种运行模式 ：

    - VPN服务模式（通过V2RayVpnService实现）
    - 代理模式（通过V2RayProxyOnlyService实现）
2.支持多种协议 ：

    - VMess、VLESS、Trojan、Shadowsocks、Wireguard、HTTP、Socks等
    - 每种协议都有对应的格式化器（如VmessFmt、VlessFmt等）
3.订阅管理 ：

    - 支持批量导入服务器配置
    - 自动更新订阅功能
4.路由规则 ：

    - 支持自定义路由规则
    - 内置多种路由规则集（白名单、黑名单等）
    - 支持Geoip和Geosite规则
5.分应用代理 ：

    - 可以为不同应用单独设置代理策略
6.DNS设置 ：

    - 支持自定义DNS服务器
    - 支持Fake DNS功能
## 项目结构
项目采用标准Android应用架构，主要代码位于 V2rayNG/app/src/main/java/com/v2ray/ang/ 目录下，按功能模块划分为多个包：

- ui ：界面相关代码，包括MainActivity、ServerActivity等
- service ：服务相关代码，包括V2RayVpnService、V2RayProxyOnlyService等
- handler ：处理器相关代码，包括V2RayServiceManager、V2rayConfigManager等
- dto ：数据传输对象
- util ：工具类
- fmt ：各种协议格式处理类
## 主要工作流程
1.用户在MainActivity中选择服务器配置
2.点击启动按钮，通过V2RayServiceManager启动对应服务（VPN或代理模式）
3.服务启动时，V2rayConfigManager生成配置文件
4.调用底层V2Ray核心库启动代理服务
5.通过NotificationManager显示通知和连接状态
## 特色功能
- 多语言支持 ：包含中文、英文、俄文、阿拉伯文等多种语言
- 深色模式 ：支持系统深色模式
- 性能统计 ：可以显示连接速度等统计信息
- 智能选择 ：支持基于延迟自动选择最优服务器
## 构建配置
- 项目支持两个产品变种（productFlavors）：fdroid和playstore
- 支持多种CPU架构的APK拆分
- 最低支持Android 5.0（API 21），目标API 35
  总体而言，v2rayNG是一个功能全面、架构清晰的Android代理客户端，通过JNI集成V2Ray/Xray核心功能，为用户提供灵活、强大的网络代理解决方案。