这是一个用于测试 Cloudflare CDN IP 速度的 Android 应用程序,移植自 XIU2/CloudflareSpeedTest 项目。
本项目完全由 AI 协助完成,开发阶段使用的模型包括 GLM5、Qwen3-Code-Plus、Kimi-K2.5、DeepSeek-V3.2 等,修改阶段使用的模型包括 Gemini3.1Pro、Gemini3Pro、GPT4o、GPT5.4 等,图标由豆包生成。
项目继承原版使用 GNU 开源协议
[!WARNING] 启用下载测速时,尤其在移动数据网络下,可能消耗较大流量。 默认参数下,高速 4G/5G 网络单次测速可能消耗数百 MB,极端情况下可接近或超过 1 GB。
ips-v4 / ips-v6 地址获取最新 IP 段本次更新主要围绕多线程 Ping 筛选策略进行调整,相关需求与讨论见 #1。
在实际测试中发现,这个问题并不只是“并发越高越快”这么简单,更像是“策略问题 + 安卓网络栈限制”的叠加结果。 当 Ping 并发较高、而单个 IP 的探测次数过低时,Android 端更容易出现瞬时拥塞、连接超时或首轮误判,表现为初筛阶段可用 IP 数量明显偏少,进而影响后续下载测速结果。
基于这一现象,本次更新做了以下调整:
Ping 并发数 设置项,支持在设置页面中手动调整并发值Ping 次数 调整为 3Ping 并发数 调整为 8这组默认值是在多轮实际测试后得到的折中方案,目标是在“筛选速度”和“筛选稳定性”之间取得更合适的平衡。 如果后续在不同网络环境或不同设备上发现更优组合,再继续调整默认值。
https://cf.xiu2.xyz/url)因访问限制或国内 SNI 阻断,返回了 HTTP 403 Forbidden。原版代码中 if (response.isSuccessful) 的判断导致程序直接跳过了流读取,耗时为 0,从而得出 0 MB/s。speed.cloudflare.com,但降级使用 HTTP 协议(http://speed.cloudflare.com/__down?bytes=50000000)。这成功绕过了针对 HTTPS 握手期的 SNI 阻断和 403 拦截,保证了真实的下载数据流能顺利传输。DownloadTest.kt 的逻辑。现在系统会持续、无缝地重复发起缓冲包抓取,直到完全消耗完用户设定的“10秒测试周期”,确保算出的兆/秒(MB/s)与 Windows 电脑端一样高度精确。ByteArray(131072))为单位的大吞吐缓冲区,极大减轻了读盘负担,从而解锁了 Android 的真实满血下载性能。20/20,但不会继续变成 19/20、18/20 直到 1/20,而是停留一段时间后直接弹出最终结果,给人的感觉像是进度卡死了。async 启动多个测速任务,并且在“任务启动时”就立即上报一次进度。这样 20 个任务几乎会在同一时刻把进度连续刷新到最后一项,UI 最终只会停留在 20/20。真正耗时的下载过程发生在后台,但中间没有新的进度回调,因此倒数进度看起来不会动。SpeedTestEngine.kt 中下载阶段的进度更新逻辑,不再按“启动了第几个任务”显示,而是改为按“还剩多少个 IP 未完成”显示。20/20 -> 19/20 -> 18/20 -> ... -> 1/20 的节奏持续更新,用户可以明确看到测速仍在进行中。maxConcurrentDownloads 限制,避免所有下载任务一股脑同时抢占资源,让进度显示与后台执行节奏保持一致。Toast.makeText 以及 ClipboardManager 系统服务。https://www.cloudflare.com/ips-v4https://www.cloudflare.com/ips-v6以下是应用的界面截图:
CFSTAPP/
├── app/ # 应用模块
│ ├── build.gradle # 应用级构建配置,定义依赖和构建逻辑
│ ├── proguard-rules.pro # ProGuard 混淆规则文件
│ └── src/main/ # 应用主代码和资源
│ ├── AndroidManifest.xml # 应用清单文件,定义权限、组件等
│ ├── java/ # Java/Kotlin 源代码
│ │ ├── com/cfst/app/ # 主包名目录
│ │ │ ├── MainActivity.kt # 应用主界面逻辑
│ │ │ ├── model/ # 数据模型类
│ │ │ ├── speedtest/ # 测速核心逻辑
│ │ │ ├── utils/ # 工具类(如 IP 解析)
│ │ │ └── viewmodel/ # MVVM 架构中的 ViewModel
│ ├── res/ # 应用资源文件
│ │ ├── layout/ # 布局文件(XML 格式)
│ │ ├── values/ # 字符串、主题等资源
│ │ └── drawable/ # 图片资源
├── build.gradle # 项目级构建配置,定义插件和全局配置
├── settings.gradle # 项目设置文件,定义模块结构
安装 Android Studio
打开项目
CFSTAPP 目录等待 Gradle 同步
构建 APK
Build → Build Bundle(s) / APK(s) → Build APK(s)获取 APK
app/build/outputs/apk/debug/app-debug.apk前置条件:
ANDROID_HOME 环境变量
set ANDROID_HOME=C:\Users\你的用户名\AppData\Local\Android\Sdk构建步骤:
Windows:
cd CFSTAPP
gradlew.bat assembleDebug
构建成功后,APK 文件位于:
app/build/outputs/apk/debug/app-debug.apk
双击运行 build-apk.bat 脚本,会自动检查环境并构建 APK。
ips-v4 / ips-v6 地址更新当前 IP 段列表本项目移植自 XIU2/CloudflareSpeedTest,感谢原作者的优秀工作。
6 commits
Kotlin
98.5%
Batchfile
1.5%
这是一个用于测试 Cloudflare CDN IP 速度的 Android 应用程序,移植自 XIU2/CloudflareSpeedTest 项目。
本项目完全由 AI 协助完成,开发阶段使用的模型包括 GLM5、Qwen3-Code-Plus、Kimi-K2.5、DeepSeek-V3.2 等,修改阶段使用的模型包括 Gemini3.1Pro、Gemini3Pro、GPT4o、GPT5.4 等,图标由豆包生成。
项目继承原版使用 GNU 开源协议
[!WARNING] 启用下载测速时,尤其在移动数据网络下,可能消耗较大流量。 默认参数下,高速 4G/5G 网络单次测速可能消耗数百 MB,极端情况下可接近或超过 1 GB。
ips-v4 / ips-v6 地址获取最新 IP 段本次更新主要围绕多线程 Ping 筛选策略进行调整,相关需求与讨论见 #1。
在实际测试中发现,这个问题并不只是“并发越高越快”这么简单,更像是“策略问题 + 安卓网络栈限制”的叠加结果。 当 Ping 并发较高、而单个 IP 的探测次数过低时,Android 端更容易出现瞬时拥塞、连接超时或首轮误判,表现为初筛阶段可用 IP 数量明显偏少,进而影响后续下载测速结果。
基于这一现象,本次更新做了以下调整:
Ping 并发数 设置项,支持在设置页面中手动调整并发值Ping 次数 调整为 3Ping 并发数 调整为 8这组默认值是在多轮实际测试后得到的折中方案,目标是在“筛选速度”和“筛选稳定性”之间取得更合适的平衡。 如果后续在不同网络环境或不同设备上发现更优组合,再继续调整默认值。
https://cf.xiu2.xyz/url)因访问限制或国内 SNI 阻断,返回了 HTTP 403 Forbidden。原版代码中 if (response.isSuccessful) 的判断导致程序直接跳过了流读取,耗时为 0,从而得出 0 MB/s。speed.cloudflare.com,但降级使用 HTTP 协议(http://speed.cloudflare.com/__down?bytes=50000000)。这成功绕过了针对 HTTPS 握手期的 SNI 阻断和 403 拦截,保证了真实的下载数据流能顺利传输。DownloadTest.kt 的逻辑。现在系统会持续、无缝地重复发起缓冲包抓取,直到完全消耗完用户设定的“10秒测试周期”,确保算出的兆/秒(MB/s)与 Windows 电脑端一样高度精确。ByteArray(131072))为单位的大吞吐缓冲区,极大减轻了读盘负担,从而解锁了 Android 的真实满血下载性能。20/20,但不会继续变成 19/20、18/20 直到 1/20,而是停留一段时间后直接弹出最终结果,给人的感觉像是进度卡死了。async 启动多个测速任务,并且在“任务启动时”就立即上报一次进度。这样 20 个任务几乎会在同一时刻把进度连续刷新到最后一项,UI 最终只会停留在 20/20。真正耗时的下载过程发生在后台,但中间没有新的进度回调,因此倒数进度看起来不会动。SpeedTestEngine.kt 中下载阶段的进度更新逻辑,不再按“启动了第几个任务”显示,而是改为按“还剩多少个 IP 未完成”显示。20/20 -> 19/20 -> 18/20 -> ... -> 1/20 的节奏持续更新,用户可以明确看到测速仍在进行中。maxConcurrentDownloads 限制,避免所有下载任务一股脑同时抢占资源,让进度显示与后台执行节奏保持一致。Toast.makeText 以及 ClipboardManager 系统服务。https://www.cloudflare.com/ips-v4https://www.cloudflare.com/ips-v6以下是应用的界面截图:
CFSTAPP/
├── app/ # 应用模块
│ ├── build.gradle # 应用级构建配置,定义依赖和构建逻辑
│ ├── proguard-rules.pro # ProGuard 混淆规则文件
│ └── src/main/ # 应用主代码和资源
│ ├── AndroidManifest.xml # 应用清单文件,定义权限、组件等
│ ├── java/ # Java/Kotlin 源代码
│ │ ├── com/cfst/app/ # 主包名目录
│ │ │ ├── MainActivity.kt # 应用主界面逻辑
│ │ │ ├── model/ # 数据模型类
│ │ │ ├── speedtest/ # 测速核心逻辑
│ │ │ ├── utils/ # 工具类(如 IP 解析)
│ │ │ └── viewmodel/ # MVVM 架构中的 ViewModel
│ ├── res/ # 应用资源文件
│ │ ├── layout/ # 布局文件(XML 格式)
│ │ ├── values/ # 字符串、主题等资源
│ │ └── drawable/ # 图片资源
├── build.gradle # 项目级构建配置,定义插件和全局配置
├── settings.gradle # 项目设置文件,定义模块结构
安装 Android Studio
打开项目
CFSTAPP 目录等待 Gradle 同步
构建 APK
Build → Build Bundle(s) / APK(s) → Build APK(s)获取 APK
app/build/outputs/apk/debug/app-debug.apk前置条件:
ANDROID_HOME 环境变量
set ANDROID_HOME=C:\Users\你的用户名\AppData\Local\Android\Sdk构建步骤:
Windows:
cd CFSTAPP
gradlew.bat assembleDebug
构建成功后,APK 文件位于:
app/build/outputs/apk/debug/app-debug.apk
双击运行 build-apk.bat 脚本,会自动检查环境并构建 APK。
ips-v4 / ips-v6 地址更新当前 IP 段列表本项目移植自 XIU2/CloudflareSpeedTest,感谢原作者的优秀工作。
6 commits
Kotlin
98.5%
Batchfile
1.5%