Android如何支援Rust程式
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
參考: