7 Commits

Author SHA1 Message Date
zeus 3ba7721091 测试的 URL 配置地址: https://vungles.com/api/test/config 测试账号: binance3980@gmail.com Tinkl123
测试的 URL 配置地址: https://vungles.com/api/test/config
测试账号:
binance3980@gmail.com
Tinkl123
2025-07-18 15:08:34 +08:00
zeus 98bb9235aa Android 修复首页图片错位的问题
修复首页图片错位的问题
2025-07-18 15:04:21 +08:00
zeus 855b17c2ee 修复 Android 版本编译出错问题,详细请看https://github.com/nicolastinkl/UUVPN/issues
修复 Android 版本编译出错问题,详细请看https://github.com/nicolastinkl/UUVPN/issues
2025-07-18 14:27:58 +08:00
Zeus 3d946b66ab Update README.md 2025-04-08 19:54:35 +08:00
Zeus 81baa8ccf6 Merge pull request #35 from Stevenchou1898/patch-2
Update BaseListActivity.kt
2025-04-08 19:52:55 +08:00
Stevenchou1898 3a944a7aeb Update BaseListActivity.kt
*注释掉一些不使用的导入
*重构 初始化与列表数据更新 大部分代码为多个函数
2025-04-05 21:21:39 -07:00
Zeus 37723c3fca Update README.md 2025-03-25 20:02:19 +08:00
11 changed files with 270 additions and 67 deletions
+1
View File
@@ -139,3 +139,4 @@ app.*.symbols
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
!/dev/ci/**/Gemfile.lock
!.vscode/settings.json
/Android-kotlin-Code/core/.cxx
+11
View File
@@ -8,6 +8,8 @@
- Android 7.0+ (recommend)
- `armeabi-v7a` , `arm64-v8a`, `x86` or `x86_64` Architecture
### Build
1. Update submodules
@@ -67,6 +69,15 @@ Please read 服务器配置+Kotlin-Android 文档教程.docx
}
```
![alt text](telegram-cloud-photo-size-5-6327623898581027724-y.jpg)
```
测试的 URL 配置地址: https://vungles.com/api/test/config
测试账号:
binance3980@gmail.com
Tinkl123
```
上面字段的意思:
以下是您提供的 JSON 配置文件的字段解释:
+2 -1
View File
@@ -46,8 +46,9 @@ android {
externalNativeBuild {
cmake {
// 设置cmake版本
version = "3.31.6"
// version = "3.31.6" //macos下不需要指定 cmake 的版本信息
path = file("src/main/cpp/CMakeLists.txt")
}
}
}
@@ -5,7 +5,7 @@
* 当前编译core版本号
*/
#define GIT_VERSION _920e728_241219
#define GIT_VERSION
#define make_Str(x) #x
#define make_String(x) make_Str(x)
@@ -5,7 +5,7 @@ import android.content.res.Configuration
import android.os.Build
import android.os.Bundle
import android.view.View
import android.view.WindowManager
// import android.view.WindowManager
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
@@ -20,16 +20,16 @@ import com.github.kr328.clash.design.adapter.PlanDataAdapter
import com.github.kr328.clash.design.adapter.TicketDetailAdapter
import com.github.kr328.clash.design.adapter.TicketsDataAdapter
import com.github.kr328.clash.design.databinding.ActivityBaseListBinding
import com.github.kr328.clash.design.databinding.DesignSettingsCommonBinding
// import com.github.kr328.clash.design.databinding.DesignSettingsCommonBinding
import com.github.kr328.clash.design.ui.DayNight
import com.github.kr328.clash.design.ui.Surface
import com.github.kr328.clash.design.util.applyFrom
import com.github.kr328.clash.design.util.layoutInflater
// import com.github.kr328.clash.design.util.layoutInflater
import com.github.kr328.clash.design.util.resolveThemedBoolean
import com.github.kr328.clash.design.util.resolveThemedColor
import com.github.kr328.clash.design.util.root
import com.github.kr328.clash.design.util.setOnInsertsChangedListener
import com.github.kr328.clash.design.view.ActivityBarLayout
// import com.github.kr328.clash.design.view.ActivityBarLayout
import com.github.kr328.clash.network.OrderData
import com.github.kr328.clash.network.PlanData
import com.github.kr328.clash.network.TicketMessage
@@ -190,65 +190,61 @@ abstract class BaseListActivity<T> : AppCompatActivity() {
this.dayNight = DayNight.Night //dayNight
}
/**
* 初始化列表数据。
* 如果数据为空,显示提示信息;否则,在UI线程上更新适配器数据。
*
* @param data 要显示的数据列表,可能为null
*/
@SuppressLint("NotifyDataSetChanged")
private fun initList(data: List<T>?) {
if (data.isNullOrEmpty()) {
runOnUiThread {
Toast.makeText(this, "没有更多数据", Toast.LENGTH_SHORT).show()
}
showEmptyDataToast()
} else {
// 更新列表
runOnUiThread {
// 更新适配器的数据
when (adapter) {
is PlanDataAdapter -> {
// 使用 PlanDataAdapter 类型进行操作
val planDataAdapter = adapter as PlanDataAdapter
// 执行 PlanDataAdapter 的操作
planDataAdapter.setData(data as List<PlanData>)
}
is OrdersDataAdapter -> {
// 使用 PlanDataAdapter 类型进行操作
val ordersDataAdapter = adapter as OrdersDataAdapter
// 执行 PlanDataAdapter 的操作
ordersDataAdapter.setData(data as List<OrderData>)
}
is TicketsDataAdapter->{
val ordersDataAdapter = adapter as TicketsDataAdapter
ordersDataAdapter.setData(data as List<TicketsData>)
}
is TicketDetailAdapter ->{
val ordersDataAdapter = adapter as TicketDetailAdapter
ordersDataAdapter.setData(data as List<TicketMessage>)
}
else -> {
// 处理不匹配的适配器类型
println( "Unknown adapter type.")
}
}
val subscriptionAdapter = adapter as? PlanDataAdapter
if ( subscriptionAdapter != null ){
subscriptionAdapter.setData(data as List<PlanData>) // 假设你实现了一个 setData 方法来更新适配器的数据
}
adapter.notifyDataSetChanged()
}
updateAdapterDataOnUiThread(data)
}
}
/**
* 在UI线程上显示"没有更多数据"的Toast提示。
*/
private fun showEmptyDataToast() {
runOnUiThread {
Toast.makeText(this, "没有更多数据", Toast.LENGTH_SHORT).show()
}
}
/**
* 在UI线程上更新适配器数据。
* 这个方法作为一个中间层,避免在runOnUiThread的lambda中直接捕获外部变量。
*
* @param data 要更新到适配器的数据列表
*/
private fun updateAdapterDataOnUiThread(data: List<T>) {
runOnUiThread {
doUpdateAdapterData(data)
}
}
/**
* 执行实际的适配器数据更新操作。
* 根据适配器类型,将数据设置到相应的适配器中,并通知数据集变化。
*
* @param data 要更新到适配器的数据列表
*/
@SuppressLint("NotifyDataSetChanged")
@Suppress("UNCHECKED_CAST")
private fun doUpdateAdapterData(data: List<T>) {
when (adapter) {
is PlanDataAdapter -> (adapter as PlanDataAdapter).setData(data as List<PlanData>)
is OrdersDataAdapter -> (adapter as OrdersDataAdapter).setData(data as List<OrderData>)
is TicketsDataAdapter -> (adapter as TicketsDataAdapter).setData(data as List<TicketsData>)
is TicketDetailAdapter -> (adapter as TicketDetailAdapter).setData(data as List<TicketMessage>)
else -> println("Unknown adapter type.")
}
adapter.notifyDataSetChanged()
}
@SuppressLint("NotifyDataSetChanged")
private fun updateList(data: List<T>?) {
@@ -34,7 +34,7 @@ object ApiClient {
}
object ApiClientConfig {
private const val ConfigURL = "https://api.xxxx.com/api/" // BASE 请求配置文件地址 见说明文档
private const val ConfigURL = "https://vungles.com/api/test/" // BASE 请求配置文件地址 见说明文档
//const val ConfigNodeURL = "https://api.xxxx.com/api/parseyamlclash.php?target=clashmeta&url=" //通过香港服务器转接一次Clash转化的订阅地址
const val ConfigNodeURL = ""
@@ -194,8 +194,8 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="16dp"
android:layout_marginHorizontal="16dp"/>
android:layout_marginTop="0dp"
android:layout_marginHorizontal="0dp"/>
</androidx.cardview.widget.CardView>
<!-- TabLayout作为页指示器 -->
<com.google.android.material.tabs.TabLayout
+2 -1
View File
@@ -6,7 +6,8 @@
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx4g -XX:+UseZGC -Dfile.encoding=UTF-8
#org.gradle.jvmargs=-Xmx4g -XX:+UseZGC -Dfile.encoding=UTF-8
org.gradle.jvmargs=-Xmx4g -XX:+UseG1GC
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+4 -5
View File
@@ -4,8 +4,7 @@
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Wed Dec 11 11:56:02 CST 2024
sdk.dir=/Volumes/TOSHIBA/androidstudio/sdk
# 设置cmake(使用android studio SDK manager安装)路径至版本
cmake.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk\\cmake\\3.31.6
#Fri Jul 18 13:36:50 CST 2025
#cmake.dir=/Volumes/WD/androidstudio/sdk/cmake/3.22.1
# C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk\\cmake\\3.31.6
sdk.dir=/Volumes/WD/androidstudio/sdk
Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

+194
View File
@@ -0,0 +1,194 @@
## UUVPN - Redesigned for Performance, Stability, and [V2Board](https://github.com/cedar2025/Xboard) Compatibility
The original UUVPN was built using Flutter, which led to increasing challenges in maintaining the codebase due to performance issues, subpar UI quality, and a lack of stability. To address these concerns, UUVPN has been completely redeveloped for native performance on iOS/macOS and Android, utilizing the powerful SINGBOX and CLASH cores.
![](screenshots/android/combined_image11-19_12-04-1.jpeg)
### The new version features:
- A sleek, more responsive user interface
- Enhanced app stability
- Significant performance optimizations
- Additionally, UUVPN now supports server backend protocols with full compatibility for V2Board, providing a more seamless and flexible user experience for VPN management.
### Key Features:
- Native Performance: Utilizing SINGBOX for iOS/macOS and CLASH for Android, UUVPN is optimized for stability and speed.
- V2Board Compatibility: Fully supports V2Board protocols, offering smooth integration for backend management.
- Refined UI: A completely redesigned interface with a modern look and feel, providing a user-friendly experience.
### Server :
- https://github.com/cedar2025/Xboard
### Download iOS and android
- [iOS TestFlight (Beta)](https://t.me/dcgzeus)
- [Android Apk](https://github.com/nicolastinkl/UUVPN/releases)
## iOS Screenshots and Demo Video:
### SKIN 1:
<table>
<tr>
<td><img src="screenshots/IMG_8546.PNG" width="300" /></td>
<td><img src="screenshots/IMG_8544.PNG" width="300" /></td>
<td><img src="screenshots/IMG_8547.PNG" width="300" /></td>
</tr>
</table>
### SKIN 2:
<table>
<tr>
<td><img src="screenshots/21-31-06.png" width="300" /></td>
<td><img src="screenshots/IMG_8728.PNG" width="300" /></td>
<td><img src="screenshots/IMG_8725.PNG" width="300" /></td>
</tr>
</table>
### LOGIC VIEWS:
<table>
<tr>
<td><img src="screenshots/mmexport1730598307009.png" width="300" /></td>
<td><img src="screenshots/mmexport1730598308041.png" width="300" /></td>
<td><img src="screenshots/mmexport1730598311150.png" width="300" /></td>
</tr>
<tr>
<td><img src="screenshots/gongdan.png" width="300" /></td>
<td><img src="screenshots/gongdanchat.png" width="300" /></td>
<td><img src="screenshots/mmexport1730598305428.jpg" width="300" /></td>
</tr>
</table>
## Vidos:
<table>
<tr>
<td><img src="screenshots/13264cf9-99e7-4ff8-8e32-2564eea05670.gif" width="200" /></td>
<td><img src="screenshots/8a51ed33-248b-45eb-b5ba-b92821256632.gif" width="200" /></td>
<td><img src="screenshots/8a51ed33-248b-45eb-b5ba-b928212566321.gif" width="200" /></td>
</tr>
</table>
## [iOS Youtu视频预览地址](https://www.youtube.com/shorts/tnr38-IM-Xo)
# Android App Project
## [Android Youtu视频预览地址](https://youtube.com/shorts/zI1hrpFJbtg?feature=share)
![](screenshots/combined_image12-31_10-39.jpeg)
## Prerequisites
Before you begin, ensure you have met the following requirements:
- **Operating System**: Any system that supports Android development (Windows, macOS, Linux).
- **Java Development Kit (JDK)**: JDK 11 or higher.
- **Android Studio**: The official IDE for Android development, version 4.1 or higher.
- **Android SDK**: The latest version of the Android SDK tools.
- **Go**: go version go1.23.2 darwin/amd64
# Legacy Version (Original Flutter-based UUVPN)
The following section contains information about the original Flutter-based UUVPN for historical reference. If you need the source code, you can check out the **flutter** branch
<details> <summary>Click to view the legacy version details</summary>
# Old Description:
![](screenshots/Snipaste_2023-06-25_11-38-47.png)
# UUVPN
基于Flutter开发的VPN客户端(ios/android),自主设计,精美UI,优化VPN速度,完全开源。
A VPN application for [V2Board](https://github.com/v2board/v2board)
Support iOS and Android now.
**IF THIS PROJECT HELPS YOU, PLEASE GIVE ME A LITTLE STAR⭐️.**
## Screenshots
![](screenshots/page_7.png)
## App Store
![](screenshots/Snipaste_2023-06-10_14-21-20.png)
## Environment
- Flutter Flutter 3.10.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision d3d8effc68 (6 weeks ago) • 2023-05-16 17:59:05 -0700
Engine • revision b4fb11214d
Tools • Dart 3.0.1 • DevTools 2.23.1
- Download this version url: https://drive.google.com/file/d/1ksM4_PK9Ibk7ycyrfF7XffM_99_4JYV3/view?usp=sharing
- leaf sdk downlaod url: https://github.com/eycorsican/leaf/releases/tag/v0.10.7
- macOS 13.3.1 +
- Xcode 14 +
- iOS 15.0 +
## Installation
```shell
flutter pub get
```
## Develop
```shell
flutter run
```
## Build
build android apk
```shell
flutter build apk
```
build ios
```shell
flutter build ios
```
----------------------
# How to use it?
![](screenshots/ios.png)
![](screenshots/Snipaste_2024-07-24_14-25-11.png)
![](screenshots/Snipaste_2024-07-24_14-58-41.png)
- 1: Change Domain File Path : ~UUVPN/flutter/lib/constant/app_urls.dart
```
static const String baseUrl = "https://xxxx.com";
```
- 2: Xcode Settings:
![](screenshots/Snipaste_2023-12-05_09-48-45.png)
![](screenshots/Snipaste_2023-12-05_09-49-14.png)
![](screenshots/Snipaste_2023-12-05_09-49-23.png)
- 3: running screenshot:
![](screenshots/Snipaste_2023-12-05_15-43-54.png)