Android已經在AOSP上引入了rust語言,因此學習rust語言已經成為Android系統工程師需要掌握的一項能力。並且rust語言作為這幾年熱門語言,也需要關注。後面我會基於Android平臺上Rust語言應用進行討論。

1 編譯工具鏈

rust語言的編譯器是rustc,前端使用rust語言編寫,將語言轉為LLVM IR,後面使用llvm框架進行編譯到目的碼。

Android整合的編譯器在路徑:prebuilts/rust/

編譯器版本:build/soong/rust/config/global。go配置

//https://android。googlesource。com/platform/build/soong/+/refs/heads/master/rust/config/global。go

RustDefaultVersion

=

“1。54。0”

RustDefaultBase

=

“prebuilts/rust/”

DefaultEdition

=

“2018”

2 構建系統支援

Android Soog系統集成了rustc編譯器,直接呼叫

rustc

,並不依賴傳統的rust crate管理器。整合的構建系統程式碼位於

build/soong/rust/

。支援的構建模組型別:

可執行檔案

rust_binary:裝置和host

rust_binary_host:host

rust_library:動態和靜態庫

rust_library_dylib:動態庫

rust_library_rlib:靜態庫

rust_library_host:host上庫

rust_library_host_dylib:host上的動態庫

rust_library_host_rlib:host上的靜態庫

rust_prebuilt_library:預製庫

rust_prebuilt_dylib:預製動態庫

rust_prebuilt_rlib:預製靜態庫

FFI,用於產生呼叫C/C++庫的FFI wrap庫

rust_ffi

rust_ffi_shared

rust_ffi_static

rust_ffi_host

rust_ffi_host_shared

rust_ffi_host_static

單元和benchmark測試

//https://github。com/rust-lang/libtest

rust_test //依賴rust的libtest。rlib

rust_test_host

rust_benchmark //libtest。rlib

rust_benchmark_host

rust_proc_macro

//https://doc。rust-lang。org/proc_macro/

rust_proc_macro

aidl產生rust庫

rust_bindgen

rust_bindgen_host

protobuf wrap

rust_protobuf

rust_protobuf_host

3 語言Runtime基礎庫整合

Rust庫分為靜態庫和動態庫,靜態庫以*。rlib結尾,動態庫。dylib。so 為結尾。Rust執行需要依賴一些最小的基礎庫才能執行,目前Android平臺主要整合的基礎庫包括:

路徑:prebuilts/rust/linux-x86/xxx

庫功能介紹

liblibc。dylib。so

ffi binding to platform libc

libtest。dylib。so

src/stdlibs/src/libtest

libstd。dylib。so

src/stdlibs/src/libstd

libbacktrace_rs。so

vendor/backtrace/src/lib。rs

librustc-demangle。dylib。so

vendor/rustc-demangle/src/lib。rs

compiler_builtins

vendor/compiler_builtins/src/lib。rs

liballoc。dylib。so

library/alloc/src/lib。rs

libpanic_abort。dynlib。so

library/panic_abort/src/lib。rs

libunwind。dynlib。so

library/unwind/src/lib。rs

profiler_builtins

library/profiler_builtins/src/lib。rs

4 Android 自身Rust主要模組介紹

模組

功能

libandroid_logger。dylib。so

external/rust/crates/android_logger/

librusqlite。dylib。so

external/rust/crates/rusqlite

liblibsqlite3_sys。dylib。so

external/rust/crates/libsqlite3-sys

libandroid_log_sys。dylib。so

external/rust/crates/android_logger/

libenv_logger。dylib。so

external/rust/crates/env_logger/

liblog。dylib。so

log庫external/rust/crates/log/

libbinder_rs。dylib。so

binder庫frameworks/native/libs/binder/rust/

。。。

5 Android整合開源庫

主要:

external/crosvm/

external/libchromeos-rs

external/rust/crates

6 除錯支援

反編譯工具

支援dwarf格式,用gdb,objdump都可以。

rustfmt

格式化程式碼

sanitizer支援

android tombstone中支援demangle

參考: