diff --git a/Android-kotlin-Code/core/build.gradle.kts b/Android-kotlin-Code/core/build.gradle.kts index bf6626f..465edb5 100644 --- a/Android-kotlin-Code/core/build.gradle.kts +++ b/Android-kotlin-Code/core/build.gradle.kts @@ -45,8 +45,6 @@ android { externalNativeBuild { cmake { - // 设置cmake版本 - version = "3.31.6" path = file("src/main/cpp/CMakeLists.txt") } } @@ -64,4 +62,4 @@ afterEvaluate { tasks.withType(GolangBuildTask::class.java).forEach { it.inputs.dir(golangSource) } -} +} \ No newline at end of file diff --git a/Android-kotlin-Code/core/src/main/cpp/CMakeLists.txt b/Android-kotlin-Code/core/src/main/cpp/CMakeLists.txt index 4f50c2c..ff188eb 100644 --- a/Android-kotlin-Code/core/src/main/cpp/CMakeLists.txt +++ b/Android-kotlin-Code/core/src/main/cpp/CMakeLists.txt @@ -1,57 +1,47 @@ cmake_minimum_required(VERSION 3.0) # 获取git hash + message(STATUS "CMAKE_CURRENT_SOURCE_DIR= ${CMAKE_CURRENT_SOURCE_DIR}") execute_process( COMMAND git submodule foreach git log -1 --format=%H WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE COMMIT_HASH ) +string(REPLACE "\n" ";" COMMIT_HASH "${COMMIT_HASH}") +list(GET COMMIT_HASH 1 COMMIT_HASH) +string (REGEX REPLACE "[\n\t\r]" "" COMMIT_HASH ${COMMIT_HASH}) +string(SUBSTRING ${COMMIT_HASH} 0 7 COMMIT_HASH) +message(STATUS "git hash= ${COMMIT_HASH}") -# 判断是否获取到了git hash值(规避如因项目目录非git repository等原因产生的获取异常而中断build) -string(LENGTH ${COMMIT_HASH} OUTPUT_VARIABLE COMMIT_HASH_LENGTH) -string(COMPARE LESS ${COMMIT_HASH_LENGTH} "40" OUTPUT_VARIABLE GIT_HASH_COMPARISON_RESULT) -if(NOT ${GIT_HASH_COMPARISON_RESULT}) - string(REPLACE "\n" ";" COMMIT_HASH "${COMMIT_HASH}") - list(GET COMMIT_HASH 1 COMMIT_HASH) - string (REGEX REPLACE "[\n\t\r]" "" COMMIT_HASH ${COMMIT_HASH}) - #string(SUBSTRING ${COMMIT_HASH} 0 7 COMMIT_HASH) - message(STATUS "git hash= ${COMMIT_HASH}") +# 获取分支名称 +execute_process( + COMMAND git submodule foreach git branch -r --contains ${COMMIT_HASH} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE CURRENT_BRANCH +) +string(REPLACE "\n" ";" CURRENT_BRANCH "${CURRENT_BRANCH}") +list(GET CURRENT_BRANCH 1 CURRENT_BRANCH) +string (REGEX REPLACE "origin/" "" CURRENT_BRANCH ${CURRENT_BRANCH} "") +string (REGEX REPLACE "[\n\t\r]" "" CURRENT_BRANCH ${CURRENT_BRANCH} "") +#string(SUBSTRING ${CURRENT_BRANCH} 0 8 CURRENT_BRANCH) +message(STATUS "git current branch = ${CURRENT_BRANCH}") - # 获取git分支名称 - execute_process( - COMMAND git submodule foreach git branch -r --contains ${COMMIT_HASH} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE CURRENT_BRANCH - ) +# 获取生成时间 +string(TIMESTAMP COMPILE_TIME "%y%m%d") +string (REGEX REPLACE "[\n\t\r]" "" COMPILE_TIME ${COMPILE_TIME}) +string(REGEX REPLACE "\"" "" COMPILE_TIME ${COMPILE_TIME}) - string(REPLACE "\n" ";" CURRENT_BRANCH "${CURRENT_BRANCH}") - list(GET CURRENT_BRANCH 1 CURRENT_BRANCH) - string (REGEX REPLACE "origin/" "" CURRENT_BRANCH ${CURRENT_BRANCH} "") - string (REGEX REPLACE "[\n\t\r]" "" CURRENT_BRANCH ${CURRENT_BRANCH} "") - string(SUBSTRING ${CURRENT_BRANCH} 0 8 CURRENT_BRANCH) - message(STATUS "git current branch = ${CURRENT_BRANCH}") +# 生成版本信息 +set(GIT_VERSION "${CURRENT_BRANCH}_${COMMIT_HASH}_${COMPILE_TIME}") +message(STATUS "version info = ${GIT_VERSION}") - # 获取生成时间 - string(TIMESTAMP COMPILE_TIME "%y%m%d") - string (REGEX REPLACE "[\n\t\r]" "" COMPILE_TIME ${COMPILE_TIME}) - string(REGEX REPLACE "\"" "" COMPILE_TIME ${COMPILE_TIME}) - - # 生成版本信息 - set(GIT_VERSION "${CURRENT_BRANCH}_${COMMIT_HASH}_${COMPILE_TIME}") - message(STATUS "version info = ${GIT_VERSION}") - - # 去除空格 - string(REGEX REPLACE "[ ]+" "" GIT_VERSION "${GIT_VERSION}") -else() - message(AUTHOR_WARNING "Unable to get git hash, but build will continue.") - -endif() +# 去除空格 +string(REGEX REPLACE "[ ]+" "" GIT_VERSION "${GIT_VERSION}") # 保存变量到文件 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.in ${CMAKE_CURRENT_SOURCE_DIR}/version.h @ONLY) -#设置项目名称与语言类别(必) project(clash-bridge C) diff --git a/Android-kotlin-Code/design/build.gradle.kts b/Android-kotlin-Code/design/build.gradle.kts index fc4d87a..e1eff00 100644 --- a/Android-kotlin-Code/design/build.gradle.kts +++ b/Android-kotlin-Code/design/build.gradle.kts @@ -32,6 +32,6 @@ dependencies { implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0") implementation("com.github.bumptech.glide:glide:4.16.0") - kapt("com.github.bumptech.glide:compiler:4.15.1") + annotationProcessor("com.github.bumptech.glide:compiler:4.15.1") } diff --git a/Android-kotlin-Code/local.properties b/Android-kotlin-Code/local.properties index 20a2110..07494f3 100644 --- a/Android-kotlin-Code/local.properties +++ b/Android-kotlin-Code/local.properties @@ -6,6 +6,3 @@ # 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 diff --git a/Android-kotlin-Code/settings.gradle.kts b/Android-kotlin-Code/settings.gradle.kts index 9af2f25..dadaee1 100644 --- a/Android-kotlin-Code/settings.gradle.kts +++ b/Android-kotlin-Code/settings.gradle.kts @@ -51,7 +51,7 @@ dependencyResolutionManagement { library("androidx-activity", "androidx.activity:activity:$activity") library("androidx-fragment", "androidx.fragment:fragment:$fragment") library("androidx-appcompat", "androidx.appcompat:appcompat:$appcompat") - library("androidx-appcompat-resources", "androidx.appcompat:appcompat-resources:$appcompatres") + library("androidx-appcompat", "androidx.appcompat:appcompat-resources:$appcompatres") library("androidx-coordinator", "androidx.coordinatorlayout:coordinatorlayout:$coordinator") library("androidx-recyclerview", "androidx.recyclerview:recyclerview:$recyclerview") library("androidx-viewpager", "androidx.viewpager2:viewpager2:$viewpager") @@ -64,4 +64,4 @@ dependencyResolutionManagement { library("rikkax-multiprocess", "dev.rikka.rikkax.preference:multiprocess:$multiprocess") } } -} +} \ No newline at end of file diff --git a/README.md b/README.md index e69de29..1ade0a1 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,190 @@ +## 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. + + +### 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: + + + + + + + + +
+ + + +### SKIN 2: + + + + + + + + + + + +
+ +### LOGIC VIEWS: + + + + + + + + + + + + + + + + + + + + +
+ + + +## Vidos: + + + + + + + +
+ + +## [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 + +
Click to view the legacy version details +# 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)