Простая библиотека на Rust
Экспорт функций и типов Rust в C несложен. Вот простая библиотека Rust:
interoperability/rust/libanalyze/analyze.rs
// Copyright 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0
//! Демонстрация FFI Rust.
#![deny(improper_ctypes_definitions)]
use std::os::raw::c_int;
/// Анализирует числа.
// SAFETY: Нет другой глобальной функции с таким именем.
#[unsafe(no_mangle)]
pub extern "C" fn analyze_numbers(x: c_int, y: c_int) {
if x < y {
println!("x ({x}) is smallest!");
} else {
println!("y ({y}) is probably larger than x ({x})");
}
}
interoperability/rust/libanalyze/Android.bp
rust_ffi {
name: "libanalyze_ffi",
crate_name: "analyze_ffi",
srcs: ["analyze.rs"],
include_dirs: ["."],
}
#[unsafe(no_mangle)] отключает обычное искажение имён (name mangling) в Rust, поэтому экспортируемый символ будет просто именем функции. Также можно использовать #[unsafe(export_name = "some_name")], чтобы задать любое нужное имя.