ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

RustDesk 如何交叉编译 Android APK 与 App Bundle?

RustDesk 如何交叉编译 Android APK 与 App Bundle? RustDesk 如何交叉编译 Android APK 与 App Bundle【免费下载链接】rustdeskAn open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.项目地址: https://gitcode.com/GitHub_Trending/ru/rustdesk如果你要从 RustDesk 源码构建可分发的 Android 安装包而不只是运行开发调试flutter/目录下提供了完整的交叉编译入口先用flutter/build_android_deps.sh按 ABI 构建 C 依赖用flutter/ndk_arm64.sh、flutter/ndk_arm.sh交叉编译 Rust 原生库最后用flutter/build_android.sh产出 APK 与 App Bundleappbundle。这条路径依赖仓库内现成脚本前提是你已具备文档中明确要求的工具链ANDROID_NDK_HOME已设置NDK 版本为 r25c 或更新版本flutter/build_android_deps.sh 头部注释VCPKG_ROOT已设置vcpkg 已初始化同上RustDesk 源码位于 vcpkg.json 上一级即可依赖脚本会检查脚本所在目录的上级是否存在vcpkg.json找不到时直接报错退出Flutter 工具链可用flutter build命令由 flutter/build_android.sh 直接调用Rust 侧交叉编译由cargo ndk完成对应cargo-ndk工具见下文的 ndk 脚本。按 ABI 构建 vcpkg 依赖依赖脚本接收一个 ABI 参数脚本内部把 ABI 映射到 vcpkg triplet 后执行安装ABI 参数vcpkg tripletarm64-v8aarm64-androidarmeabi-v7aarm-neon-androidx86_64x64-androidx86x86-android构建主发行包只需要前两个在 RustDesk 仓库根目录执行flutter/build_android_deps.sh arm64-v8a flutter/build_android_deps.sh armeabi-v7a脚本的实际动作是进入仓库根目录并运行vcpkg install --triplet triplet --x-install-root$VCPKG_ROOT/installed依赖清单来自根目录的 vcpkg.json对应的 triplet 定义文件位于 res/vcpkg-triplets/ 目录下。两个需要注意的细节缺少ANDROID_NDK_HOME或VCPKG_ROOT时脚本直接打印ERROR: Please set ...并退出armeabi-v7a构建完成后脚本会把$VCPKG_ROOT/installed/arm-neon-android符号链接到$VCPKG_ROOT/installed/arm-android。注释中给出的原因是cargo-ndk不理解 NEON 后缀若目录缺失脚本报错退出。交叉编译 Rust 原生库依赖就绪后用仓库提供的两个 ndk 脚本分别编译 64 位和 32 位 ARM 的 Rust 原生库flutter/ndk_arm64.sh flutter/ndk_arm.sh两个脚本各执行一条cargo ndk命令参数来自 flutter/ndk_arm64.sh 和 flutter/ndk_arm.sh# ndk_arm64.sh cargo ndk --platform 21 --target aarch64-linux-android build --locked --release --features flutter,hwcodec # ndk_arm.sh cargo ndk --platform 21 --target armv7-linux-androideabi build --locked --release --features flutter,hwcodec--platform 21指定最小 Android API level--features flutter,hwcodec启用 Flutter 与硬件编解码特性--locked锁定 Cargo.lock 中的依赖版本。构建 APK 与 App BundleRust 原生库和 vcpkg 依赖都就绪后运行 flutter/build_android.sh。脚本默认以 release 模式构建可用环境变量MODE改为其他模式如debug。脚本依次执行MODE${MODE:release} # 剥离 arm64-v8a 的 .so 符号信息 $ANDROID_NDK_HOME/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip android/app/src/main/jniLibs/arm64-v8a/* flutter build apk --target-platform android-arm64,android-arm --${MODE} --obfuscate --split-debug-info ./split-debug-info flutter build apk --split-per-abi --target-platform android-arm64,android-arm --${MODE} --obfuscate --split-debug-info ./split-debug-info flutter build appbundle --target-platform android-arm64,android-arm --${MODE} --obfuscate --split-debug-info ./split-debug-info三条 flutter 命令的分工第一条产出包含 arm64 与 arm 两种 ABI 的单个 APK第二条用--split-per-abi产出按 ABI 拆分的 APK第三条产出用于应用市场分发的 App Bundle。三者都带--obfuscate混淆 DEX并把调试符号拆分到./split-debug-info目录避免符号留在发布产物里。验证与边界判断每一步是否成功的依据来自脚本本身的输出build_android_deps.sh成功时打印INFO: Completed building vcpkg dependencies for Android ABI失败时打印对应ERROR:信息并退出退出码非零脚本以set -e -o pipefail启动flutter build三条命令依次完成后APK 与 appbundle 即由 Flutter 构建系统产出构建失败时 flutter 命令本身会报错终止。两点边界需要留意build_android.sh只构建android-arm64,android-arm两个 target。依赖脚本虽然支持x86_64/x86但打包脚本不会用到它们模拟器场景不在默认主路径内strip 步骤走的是$ANDROID_NDK_HOME下的aarch64-linux-android-4.9工具链路径这是较老 NDK 的目录结构README 中构建 Flutter 版本的一般指引指向项目的 CI 配置如果本地 strip 路径因 NDK 版本不同而找不到二进制以 CI 中的环境配置为参照。整条链路为设置ANDROID_NDK_HOME与VCPKG_ROOT→ 逐 ABI 运行build_android_deps.sh→ 运行ndk_arm64.sh与ndk_arm.sh→ 运行build_android.sh全部命令均在 RustDesk 仓库根目录执行。【免费下载链接】rustdeskAn open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.项目地址: https://gitcode.com/GitHub_Trending/ru/rustdesk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表