从零编译双架构APK:tg-ws-proxy-android 构建指南(cargo-ndk + Gradle 完整流程)
从零编译双架构APKtg-ws-proxy-android 构建指南cargo-ndk Gradle 完整流程【免费下载链接】tg-ws-proxy-androidAndroid-форк популярного приложения Flowseal - tg-ws-proxy - локальный прокси-сервер MTProto с проксированием CF или без для частичного обхода проблем загрузки Telegram项目地址: https://gitcode.com/gh_mirrors/tg/tg-ws-proxy-androidtg-ws-proxy-android是知名 MTProto 本地代理 tg-ws-proxy 的 Android 移植版它在手机上启动一个本地 MTProto 代理默认127.0.0.1:1443把 Telegram 流量经加密 WebSocket可走 CloudFlare转发到数据センター从而部分解决加载、连接类问题。项目采用Rust 原生引擎 Kotlin Compose 界面的双层架构核心逻辑用 Rust 编写Kotlin 侧通过 JNA 调用编译出的libtgwsproxy.so。自己动手从零编译你就能获得支持arm64-v8a64位与armeabi-v7a32位双架构的 APK甚至打包出同时兼容两者的 universal 包。整条流程只有两步cargo-ndk 编译 .so → Gradle 打包 APK。一、项目结构与构建原理速览 ️编译前先搞清楚每个部分在哪里、干什么组成部分路径作用Rust 代理引擎src/proxy.rs、ws.rs、cfproxy.rs、crypto.rs、balancer.rs 等本地 MTProto 代理、WS 连接池、CF 转发、加密逻辑原生库导出层src/lib.rs定义 FFI 导出函数供 JNA 调用、全局 tokio 运行时Rust 工程配置Cargo.tomlcdylib动态库、release 极致优化LTO strip opt-level z编译好的原生库app/src/main/jniLibs/arm64-v8a/、armeabi-v7a/下的libtgwsproxy.soKotlin 应用层app/src/main/java/com/amurcanov/tgwsproxy/Compose 界面、前台服务、快捷开关磁贴构建脚本build_so.bat、build_apk.bat一键编译 .so / 一键打包 APKWindows 版 为什么需要两个 .so因为arm64-v8a面向 64 位新设备minSdk 24armeabi-v7a面向 32 位老设备minSdk 21。两者由 Gradle 的 product flavor 分别打入对应 APK。Rust 侧的发布优化配置值得看一眼它把体积压到了极致见 Cargo.tomlopt-level z # 按体积优化 lto true # 链接期优化 codegen-units 1 panic abort strip true # 去除符号表二、构建环境准备Rust、cargo-ndk 与 Android NDK2.1 工具链版本清单 ✅工具版本要求用途Rust rustup1.70编译 Rust 代理引擎cargo-ndk最新版封装 NDK 交叉编译一条命令产出 .soAndroid NDK任意较新版本需含 24、21 级别 sysroot提供 Android 交叉编译工具链JDK17Gradle / Android 构建gradle-wrapper.properties 使用 Gradle 9.6.0Android SDKPlatform 35compileSdk 35app/build.gradle.kts 中指定2.2 安装 Rust 交叉编译目标cargo-ndk 底层靠 rustup 目标 NDK 工具链工作先装好两个 Android 目标rustup target add aarch64-linux-android armv7-linux-androideabi cargo install cargo-ndk2.3 配置 NDK 路径Android Studio 用户SDK Manager → SDK Tools 勾选NDK (Side by side)安装然后记住 NDK 安装目录如...\sdk\ndk\26.x.xxxxxxx。命令行用户安装后需把 NDK 目录设为环境变量ANDROID_NDK_HOME旧版为NDK_HOMEcargo-ndk 靠它定位编译器。这是新手最常踩的坑 ⚠️。Windows 下项目已内置脚本 build_so.bat只需把第 10 行的SDK_PATH改为你自己的 SDK 路径它会自动找到 NDK 版本目录、检测/安装 cargo-ndk 并添加目标。三、cargo-ndk 编译双架构 .so核心步骤 ️3.1 两条命令编译 arm64 arm32build_so.bat 的核心就是两次cargo ndk build --release输出直接落到app\src\main\jniLibs下# [1/2] 64 位arm64-v8aAPI 24 cargo ndk -t arm64-v8a --platform 24 -o app/src/main/jniLibs build --release # [2/2] 32 位armeabi-v7aAPI 21 cargo ndk -t armeabi-v7a --platform 21 -o app/src/main/jniLibs build --release参数速记-t目标 ABIarm64-v8a/armeabi-v7a--platform最低 Android API 级别-o.so 输出目录对应 app/src/main/jniLibs/--release走 Cargo.toml 中的 release 优化配置成功后你会看到两个文件app/src/main/jniLibs/arm64-v8a/libtgwsproxy.so app/src/main/jniLibs/armeabi-v7a/libtgwsproxy.soLinux / macOS 用户直接执行上面两条命令即可-o后路径写成app/src/main/jniLibs无需 .bat 脚本。3.2 编译成功标志终端末尾出现类似输出即成功arm64-v8a: OK [xxxxx bytes] armeabi-v7a: OK [xxxxx bytes]仓库中已经内置了一份编译好的 libtgwsproxy.so如果你只想体验 Gradle 打包环节可以跳过本节的重新编译。四、Gradle 打包 release APK一键产出三个包 4.1 双架构如何映射到 APK flavorapp/build.gradle.kts 用arch维度定义了三个 flavor与 .so 一一对应FlavorminSdk包含 ABI产出 APKarm3221armeabi-v7aapp-arm32-release.apkarm6424arm64-v8aapp-arm64-release.apkuniversal21两者都装app-universal-release.apk同时 app/build.gradle.kts 中显式声明了jniLibs.srcDirs(src/main/jniLibs)保证上一步的 .so 被正确打进包内。4.2 执行打包脚本 build_apk.bat 的流程是从 app/build.gradle.kts 读取versionName当前为1.2.3拼出v1.2.3-android前缀校验两个 .so 是否齐全缺失会提示先运行 build_so.bat执行gradlew assembleRelease --no-daemon把三个 APK 复制重命名到app\release\app/release/ ├── v1.2.3-android-universal.apk # 双架构合一分发给所有人最省事 ├── v1.2.3-android-v8a-minsdk24.apk # 仅 64 位 ARM └── v1.2.3-android-v7a-minsdk21.apk # 仅 32 位 ARM没有 Windows 脚本任何系统下在项目根目录运行./gradlew assembleRelease # Linux / macOS gradlew.bat assembleRelease # Windows4.3 签名说明 release 构建默认开启混淆与资源压缩isMinifyEnabled true R8 full mode。签名逻辑在 app/build.gradle.kts若根目录local.properties里配置了KEYSTORE_FILE、KEYSTORE_PASSWORD、KEY_ALIAS、KEY_PASSWORD则用你的 keystore 正式签名未配置时自动降级为 debug 签名本地安装测试完全没问题只是不能用于商店上架或覆盖更新。性能参数方面gradle.properties 已为构建机做了调优4G 堆内存、并行任务、构建缓存、configuration cache一般无需改动。五、常见问题快速排查 现象原因与对策cargo ndk提示找不到 NDK未设置ANDROID_NDK_HOME环境变量或 NDK 未安装对照 build_so.bat 手动指定目标平台报错如target not installed漏装 rustup 目标rustup target add aarch64-linux-android armv7-linux-androideabibuild_apk.bat 报.so not found先完成第三节运行 build_so.bat再打包 APK提示WARNING: Keystore not found, using debug signing正常现象只是没有配置正式签名见 4.3 节Gradle 下载 JDK 失败settings.gradle.kts 使用 foojay-resolver 自动拉取 JDK 17 工具链确认网络可访问 Gradle 分发源六、完整流程一图流 ┌─ 环境 ─────────────────────────────────────────────┐ │ rustup target add 双目标 → cargo install cargo-ndk │ │ 安装 Android NDK → 设置 ANDROID_NDK_HOME │ └──────────────────────────────────────────────────────┘ ↓ ┌─ 第 1 步编译原生库 ───────────────────────────────┐ │ cargo ndk -t arm64-v8a --platform 24 build --release │ │ cargo ndk -t armeabi-v7a --platform 21 build --release│ │ 输出 → app/src/main/jniLibs/{arm64-v8a,armeabi-v7a}/libtgwsproxy.so └──────────────────────────────────────────────────────┘ ↓ ┌─ 第 2 步Gradle 打包 ─────────────────────────────┐ │ gradlew assembleRelease │ │ 输出 → app/release/ 下 3 个 APKarm32 / arm64 / universal └──────────────────────────────────────────────────────┘完成后推荐安装universal 版一台 APK 通吃 32 位与 64 位设备。装好应用后打开它阅读内置的「信息」页说明点击「启动代理」再点「应用到 Telegram」双架构编译的成果就能跑起来了 关键文件速查build_so.bat.so 编译脚本· build_apk.batAPK 打包脚本· app/build.gradle.ktsflavor 与签名配置· Cargo.tomlRust 依赖与优化配置【免费下载链接】tg-ws-proxy-androidAndroid-форк популярного приложения Flowseal - tg-ws-proxy - локальный прокси-сервер MTProto с проксированием CF или без для частичного обхода проблем загрузки Telegram项目地址: https://gitcode.com/gh_mirrors/tg/tg-ws-proxy-android创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

ai-guide 程序员成长指南:工作后快速突破职业瓶颈的六大方法

ai-guide 程序员成长指南:工作后快速突破职业瓶颈的六大方法

文档教程知识库人工智能 【免费下载链接】ai-guide 程序员鱼皮的 AI 资源大全 Vibe Coding 零基础教程,分享 OpenClaw 保姆级教程、大模型玩法(DeepSeek / GPT / Gemini / Claude / GLM)、最新 AI 资讯、Prompt 提示词大全、AI 知识百科&…

2026/10/4 2:02:42 阅读更多 →
系统架构设计师论文真题汇编:从真题拆解到45分钟写作框架

系统架构设计师论文真题汇编:从真题拆解到45分钟写作框架

简介:这份《系统架构设计师论文真题汇编》面向备考软考高级系统架构设计师的考生,尤其适合需要攻克论文写作这一难点的中高级技术人员。资源以历年论文真题为核心,按年份与题目分类整理,涵盖基于构件的软件开发方法、软件维护方法…

2026/10/4 2:02:42 阅读更多 →
从零到一:工程师成长路径全解析与实战指南

从零到一:工程师成长路径全解析与实战指南

1. 从零到一:一个工程师的成长路径到底长什么样很多人问我“怎么才能成为一名工程师”,这个问题其实特别难回答,因为它太宽泛了。就像你问一个厨师“怎么做菜”,他只能告诉你“先学会拿刀”。我当年也是从完全懵的状态起步的&…

2026/10/4 2:02:42 阅读更多 →

最新新闻

Conda虚拟环境中pip安装包路径错乱?一文厘清conda与pip的安装机制

Conda虚拟环境中pip安装包路径错乱?一文厘清conda与pip的安装机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 2:34:06 阅读更多 →
2025技术年终总结:微服务架构升级、性能优化与稳定性实战

2025技术年终总结:微服务架构升级、性能优化与稳定性实战

1. 项目概述与年度定位1.1 核心需求解析2025年对全知科技来说,是一个从“能跑”到“跑得稳”的关键转折点。年初定调的时候,我们团队内部吵了好几轮,最后达成共识:这一年不追求新概念的数量,不搞花活,核心就…

2026/10/4 2:34:06 阅读更多 →
【创新未发表】基于能量谷优化算法EVO实现复杂山地危险模型无人机路径规划问题求解Matlab实现

【创新未发表】基于能量谷优化算法EVO实现复杂山地危险模型无人机路径规划问题求解Matlab实现

✅作者简介:热爱科研的Matlab仿真开发者,擅长数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &…

2026/10/4 2:34:06 阅读更多 →
LogParser实战:用SQL查IIS日志与Windows事件日志

LogParser实战:用SQL查IIS日志与Windows事件日志

如果你跟我一样,经常在三更半夜被“帮我看看这三天日志里为什么有那么多 500”这种需求叫醒,手头只有一台 Windows Server 和几 GB 的 IIS 日志,那你大概率绕不开 LogParser 这个名字。它是微软 Sysinternals 工具集里的老牌命令行日志分析器…

2026/10/4 2:34:06 阅读更多 →
15个Git核心命令全解析:从分支合并到回滚实战

15个Git核心命令全解析:从分支合并到回滚实战

先把话放在前面:Git 这个工具,你迟早要学,而且越早学越划算。我见过太多人用图形化工具点了一两年的提交,真到了命令行窗口一片黑、同事让你处理分支冲突、或者不小心把错误代码推到远程的时候,整个人是懵的——因为图…

2026/10/4 2:34:06 阅读更多 →
钢材缺陷检测三格式标签实战:VOC/COCO/YOLO工业级打通指南

钢材缺陷检测三格式标签实战:VOC/COCO/YOLO工业级打通指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 2:33:05 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →