ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Comprehensive Rust 课程 Android 章节环境搭建:使用 Cuttlefish 虚拟设备运行 Rust 系统代码

Comprehensive Rust 课程 Android 章节环境搭建:使用 Cuttlefish 虚拟设备运行 Rust 系统代码 Comprehensive Rust 课程 Android 章节环境搭建使用 Cuttlefish 虚拟设备运行 Rust 系统代码【免费下载链接】comprehensive-rustThis is the Rust course used by the Android team at Google. It provides you the material to quickly teach Rust.项目地址: https://gitcode.com/GitHub_Trending/co/comprehensive-rust本篇指南讲解 Google Comprehensive Rust 课程中 Android 章节的开发环境搭建方案借助Cuttlefish Android Virtual DeviceCuttlefish AVD完成 Rust 系统代码的编译、部署与运行验证。读完本文你将掌握从 AOSP 源码树初始化环境、选择目标产品、创建虚拟设备到最终把src/android/目录下的课程示例构建并推送到模拟器执行的完整链路。为什么选择 Cuttlefish 作为实验设备Rust 在 Android 中用于编写系统软件——服务service、库library、驱动driver乃至固件firmware都在支持范围内详见 Android 章节导语。这类代码无法在普通 App 沙箱中验证需要一个与真实设备行为高度一致的运行环境。课程的答案是Cuttlefish参考设备定位Cuttlefish 是 Android 的参考设备实现专门设计用于在通用 Linux 桌面环境上运行属于以软件形式模拟的参考手机其系统镜像与真实设备保持高度一致高保真系统镜像镜像维护对真实设备的高保真度是运行大量 Rust 用例的理想模拟器选择平台支持现状当前面向通用 Linux 桌面macOS 支持已在规划中系统级代码的用武之地课程中的日志、测试、AIDL 服务、JNI 互操作等示例都需要在真实 Android 系统镜像上运行Cuttlefish 恰好满足这一前提。前置条件在开始之前需要满足以下环境要求AOSP 源码检出checkout后续的lunch、m、atest、adb等命令都依赖 AOSP 构建环境。source build/envsetup.sh必须在一个完整的 AOSP 源码树中执行可用的adb工具链用于把构建产物推送到设备并执行课程代码本文涉及的示例代码位于课程的 src/android/ 目录请先克隆仓库以便跟随后续章节动手实践。三步完成环境初始化setup.md见 src/android/setup.md给出了创建 Cuttlefish 虚拟设备的最小命令序列。在 AOSP 源码树根目录依次执行source build/envsetup.sh lunch aosp_cf_x86_64_phone-trunk_staging-userdebug acloud create三条命令各司其职命令作用source build/envsetup.sh加载 AOSP 构建环境的 shell 函数lunch、m、mm、atest等均由此提供并设置ANDROID_BUILD_TOP等关键环境变量lunch aosp_cf_x86_64_phone-trunk_staging-userdebug选择目标产品与构建变体。aosp_cf_x86_64_phone即 Cuttlefishcf Cuttlefish的 x86_64 手机形态产品trunk_staging为分支userdebug为允许 root 与调试的系统构建变体acloud create根据当前lunch选择的产品自动下载/构建并启动一个 Cuttlefish 虚拟设备实例同时完成adb连接配置关于lunch目标还可以参考课程配套构建脚本 src/android/build_all.sh 中的做法——它使用lunch aosp_cf_x86_64_phone-userdebugtrunk 分支之外同样可用的 Cuttlefish 目标说明aosp_cf_x86_64_phone-*系列目标名在不同分支下均可用于启动 Cuttlefish 实验环境。更详细的 AOSP 环境初始化说明可查阅 Android 官方 Codelabsource.android.com/docs/setup/start本节只覆盖课程所需的必要步骤。如何把课程示例跑起来环境就绪后课程的每个示例都遵循构建 → 推送 → 执行三步模式。以build_all.sh中定义的流程为例该脚本会遍历构建课程全部示例防止示例因仓库演进而失效最典型的命令序列是# 1. 使用 Soong 构建目标m make作用于当前产品输出目录 m hello_rust_logs # 2. 把产物推送到虚拟设备 adb push $ANDROID_PRODUCT_OUT/system/bin/hello_rust_logs /data/local/tmp # 3. 在设备上执行 adb shell /data/local/tmp/hello_rust_logs为了让 AOSP 的m命令能识别课程里的构建目标你需要把课程仓库的src/目录挂载进 AOSP 检出树。build_all.sh头部注释给出了两种方式一是把仓库直接克隆进 AOSP 检出目录二是使用 bind mountcd $ANDROID_BUILD_TOP mkdir comprehensive-rust sudo mount -o bind ../path/to/comprehensive-rust/src comprehensive-rust挂载完成后可以先用m hello_rust手工验证 Soong 是否能看到课程目标。验证示例日志输出到 logcat以 src/android/logging.md 中的日志示例为例代码位于 src/android/logging/src/main.rs使用logfacade crate 记录日志use log::{debug, error, info}; fn main() { logger::init( logger::Config::default() .with_tag_on_device(rust) .with_max_level(log::LevelFilter::Trace), ); debug!(Starting program.); info!(Things are going fine.); error!(Something went wrong!); }其 Soong 模块定义src/android/logging/Android.bp展示了 Android Rust 二进制模块的典型结构rust_binary { name: hello_rust_logs, crate_name: hello_rust_logs, srcs: [src/main.rs], rustlibs: [ liblog_rust, liblogger, ], host_supported: true, }注意rustlibs中同时引入了liblog_rustlogfacade 的 Android 绑定与liblogger日志实现。如文档所述logger实现只需出现在最终二进制中如果你只是从库代码里打日志只需要依赖logfacade crate 即可。构建推送执行后日志会出现在adb logcat中可用adb logcat -s rust过滤查看。验证示例测试与 AIDL 服务课程 Android 章节还包含依赖虚拟设备环境的其他示例均按上述模式验证单元测试src/android/testing.md使用rust_test模块直接以atest --host libleftpad_test在宿主机上运行输出中会列出每个测试用例的通过情况AIDL 服务src/android/aidl.mdRust 既可作为客户端调用已有 AIDL 服务也可实现新的 AIDL 服务端让设备上的其他进程调用 Rust 服务build_all.sh中的birthday_server、birthday_client示例即演示了用adb shell service call birthdayservice 1 s16 Bob i32 24这类方式与 Rust 服务交互的完整流程。关键要点回顾Cuttlefish 是参考设备专为通用 Linux 桌面设计的 Android 参考实现macOS 支持尚在规划中高保真是关键特性系统镜像与真实设备高度一致是运行多种 Rust 系统用例的理想模拟器三步启动source build/envsetup.sh→lunch aosp_cf_x86_64_phone-*→acloud create三步运行示例m target构建 →adb push推送 →adb shell执行日志统一进入adb logcat示例代码位置全部实验代码集中在课程的 src/android/ 目录覆盖日志、测试、AIDL、C/C/Java 互操作等主题可逐一复现。【免费下载链接】comprehensive-rustThis is the Rust course used by the Android team at Google. It provides you the material to quickly teach Rust.项目地址: https://gitcode.com/GitHub_Trending/co/comprehensive-rust创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表