Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Библиотеки Rust

Чтобы создать новую библиотеку Rust для Android, используйте rust_library.

Здесь мы объявляем зависимость от двух библиотек:

  • libgreeting, которую мы определим ниже,
  • libtextwrap, которая уже включена в дерево исходников как крейт в external/rust/android-crates-io/crates/.

hello_rust/Android.bp:

rust_binary {
    name: "hello_rust_with_dep",
    crate_name: "hello_rust_with_dep",
    srcs: ["src/main.rs"],
    rustlibs: [
        "libgreetings",
        "libtextwrap",
    ],
    prefer_rlib: true, // Нужно, чтобы избежать ошибки динамической линковки.
}

rust_library {
    name: "libgreetings",
    crate_name: "greetings",
    srcs: ["src/lib.rs"],
}

hello_rust/src/main.rs:

// Copyright 2022 Google LLC
// SPDX-License-Identifier: Apache-2.0

//! Демонстрация Rust.

use greetings::greeting;
use textwrap::fill;

/// Выводит приветствие в стандартный вывод.
fn main() {
    println!("{}", fill(&greeting("Борис"), 24));
}

hello_rust/src/lib.rs:

// Copyright 2022 Google LLC
// SPDX-License-Identifier: Apache-2.0

//! Библиотека приветствий.

/// Поприветствовать `name`.
pub fn greeting(name: &str) -> String {
    format!("Hello {name}, it is very nice to meet you!")
}

Собираем, загружаем и запускаем бинарный файл так же, как раньше:

m hello_rust_with_dep
adb push "$ANDROID_PRODUCT_OUT/system/bin/hello_rust_with_dep" /data/local/tmp
adb shell /data/local/tmp/hello_rust_with_dep
Hello Bob, it is very
nice to meet you!
  • Пройдите шаги сборки и продемонстрируйте, как они работают в вашем эмуляторе.

  • Крейт Rust с именем greetings должен собираться правилом libgreetings. Обратите внимание, как Rust-код использует имя крейта, как это принято в Rust.

  • Опять же, правила сборки требуют добавлять комментарии документации ко всем публичным элементам.