☰
Winlator-Ludashi开发者指南:从Gradle到NDK,剖析APK构建、70MB Proton资产下载与SHA-256校验机制
2026/10/15 18:50:04 网站建设 项目流程

【免费下载链接】Winlator-Ludashi

Android application for running Windows applications with Wine and Box86/Box64

项目地址:https://gitcode.com/gh_mirrors/wi/Winlator-Ludashi
点击查看免费下载

Winlator-Ludashi是一款在 Android 上通过 Wine 与 Box86/Box64 运行 Windows x86_64 程序的开源应用。本文面向想参与开发的读者,带你完整走一遍它的构建链路:Gradle 如何自动下载约 70MB 的 Proton 资产并做 SHA-256 校验、NDK/CMake 如何编译三套原生库、以及 Ludashi 等构建变体背后的包名策略。

从零构建 APK:环境要求与一键命令

构建前只需准备 Android Studio(或命令行 + JDK 17),仓库已内置 Gradle Wrapper,无需本地安装特定版本的 Gradle:

git clone https://gitcode.com/gh_mirrors/wi/Winlator-Ludashi cd Winlator-Ludashi ./gradlew assembleDebug

几个关键版本参数(都集中在少数几个文件里):

配置项值位置
Gradle8.10.2gradle/wrapper/gradle-wrapper.properties
Android Gradle Plugin8.8.0gradle/libs.versions.toml
NDK29.0.14206865app/build.gradle
compileSdk / targetSdk35 / 28app/build.gradle
ABI仅 arm64-v8aapp/build.gradle

注意 app/local.properties 中的sdk.dir是开发者本机路径,克隆后需要改成你机器的 Android SDK 路径。

构建链全景:preBuild 触发两次自动下载

Winlator-Ludashi 的 APK 之所以"开箱即装",是因为两个 Gradle 自定义任务被挂到了preBuild上(app/build.gradle):

preBuild └─ downloadProton # 下载并校验 Proton 9 arm64ec(约 70MB) └─ downloadImageFS # 下载并拼接 Ubuntu 根文件系统 imagefs.tar.zst
  • downloadImageFS(app/build.gradle):把分卷的imagefs.tar.zst.00/.01依次下载并拼接成完整镜像;若文件已存在则跳过。
  • downloadProton(app/build.gradle):下载proton-9.0-arm64ec.tar.zst,随后立即做双重校验——文件大小必须精确等于73570637字节,且 SHA-256 必须匹配5f9375640479a5b2...。任一环节不通过就删掉文件并抛出GradleException,构建直接失败。

这个设计的意义在于:Proton 镜像是运行时安装 Wine 的关键资产,一旦下载被网络中断或源站污染,带着坏文件继续打包只会让用户在运行期踩坑。把校验前移到构建期,"失败得快、失败得干净"。

运行时还有一道校验:ProtonPackageManager

构建期校验之外,用户日后在 App 内按需下载的其它 Proton 版本(如 x86_64 版、Proton 10/11)由 ProtonPackageManager.java 管理。每个包在 PackageInfo 中都登记了:

  • partSizes:分卷大小,逐卷比对实际下载字节数(L147-L152);
  • sha256:整包摘要,由 verifySha256 以 64KB 缓冲流式计算,避免一次性把上百 MB 载入内存;
  • 任一校验失败 → 删除残留文件并返回false(L162-L174)。

校验通过后,归档交给 ImageFsInstaller.installWineArchive 解压——先按 ZSTD 解,失败再回退 XZ,最终落到容器根目录的opt/<identifier>下。

NDK 侧:CMake 编译出的三套原生库

原生构建入口是 app/src/main/cpp/CMakeLists.txt,产出三类动态库:

  1. libwinlator:核心渲染/输入/音频库(DisplayX、EGL、SGSR/FSR 后处理等),链接EGL、GLESv3、vulkan、aaudio等系统库(L12-L51);
  2. libvulkan_renderer:独立的 Vulkan 渲染路径,构建期还会用glslangValidator把.vert/.frag着色器编译进头文件,并对VulkanRendererContext.cpp做标记替换式补丁(L171-L234);
  3. libfakeinput:通过LD_PRELOAD注入的假输入库,用于手柄/按键模拟。

另外externalNativeBuild.cmake的abiFilters只保留arm64-v8a,这也是为什么本项目 APK 只能装到 64 位 Android 设备(app/build.gradle)。

三种构建变体:Ludashi 的包名策略

按 README.md 说明,同一个代码基座会出三种功能完全相同、仅包名不同的构建:

  • dev-vanilla:原始包名,可与其他 Winlator fork 共存;
  • ludashi:包名仿冒知名性能检测应用 Ludashi,部分手机(尤其小米系)检测到该包名会自动进入性能模式,减少降频;
  • redmagic:包名仿冒《原神》,可在红魔手机上触发厂商的帧生成(framegen)等游戏增强特性。

关键文件速查

文件作用
settings.gradle模块声明与仓库配置
gradle.propertiesJVM 内存(8GB)、AndroidX、配置缓存开关
gradle/libs.versions.toml版本目录:AGP、zstd-jni、commons-compress 等
app/build.gradle核心构建脚本:下载任务、NDK、依赖
app/src/main/cpp/CMakeLists.txt原生库编译定义
app/proguard-rules.pro混淆规则(当前 release 未开启 minify)

掌握"preBuild → 下载 → 双校验 → CMake 编译"这条主线,你基本就具备了修改 Winlator-Ludashi 并产出可分发 APK 的全部构建知识 🚀

【免费下载链接】Winlator-Ludashi

Android application for running Windows applications with Wine and Box86/Box64

项目地址:https://gitcode.com/gh_mirrors/wi/Winlator-Ludashi
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询