Существует два типа модулей библиотеки Rust: один создаёт библиотеки Rust, а другой — библиотеки, совместимые с языком C. Кроме того, для целей системы сборки можно рассматривать процедурные макросы Rust ( proc-macros ) как особый тип библиотеки.
rust_library
 Модуль rust_library создает библиотеки Rust для использования другими модулями Rust.
 Помимо вариантов _host , библиотеки Rust имеют типы модулей, которые управляют доступной компоновкой.
| Тип модуля библиотеки Rust | Определение | 
|---|---|
| rust_library | Предоставляет оба варианта библиотеки: rlibиdylib. AOSP рекомендует этот тип модуля для библиотек Rust, поскольку он позволяет модулям работать корректно, если они указаны в качестве зависимости в свойствеrustlibs | 
| rust_library_rlib | Предоставляет только вариант rlibбиблиотеки Rust; модули, предоставляющие только вариантыrlib, не могут гарантированно работать со свойствомrustlibs. | 
| rust_library_dylib | Предоставляет только вариант dylibбиблиотеки Rust; модули, предоставляющие только вариантыdylib, не могут гарантированно работать со свойствомrustlibs. | 
rust_ffi
 Модуль rust_ffi создает библиотеки, совместимые с C, для взаимодействия с модулями CC.
 Помимо вариантов _host , библиотеки Rust FFI имеют типы модулей, которые управляют доступной компоновкой, как показано в следующей таблице.
| Тип модуля библиотеки Rust FFI | Определение | 
|---|---|
| rust_ffi | Предоставляет оба варианта библиотеки C: статическую и общую. | 
| rust_ffi_shared | Предоставляет только вариант общей библиотеки C. | 
| rust_ffi_static | Предоставляет только вариант статической библиотеки C. | 
 Базовый пример использования rust_ffi для вызова Rust из C см. на странице Шаблоны Android Rust .
Информацию о более расширенном использовании можно найти в официальной документации Rust .
rust_proc_macro
Процедурные макросы Rust (proc-macros) могут быть полезны для расширения возможностей компилятора, позволяя ему выполнять преобразования исходного кода или добавлять новые атрибуты. Подробнее об этом можно узнать на странице «Процедурные макросы» официальной документации Rust.
 Для системы сборки модуль rust_proc_macro работает аналогично модулям rust_library . Для модулей, зависящих от rust_proc_macros , добавьте имя модуля в свойство proc_macros .
 Поскольку proc_macros являются плагинами компилятора, они обязательно нацелены на хост и не создают никакого кода, который мог бы работать на устройстве.
Известные свойства библиотеки Rust
 Свойства, определённые в таблице ниже, дополняют важные общие свойства , применимые ко всем модулям. Они либо особенно важны для модулей библиотеки Rust, либо демонстрируют уникальное поведение, специфичное для модуля типа rust_library .
| Свойства библиотеки Rust | Определение | 
|---|---|
| основа / имя | Свойство stemуправляет именем выходного файла библиотеки, которое в противном случае по умолчанию равноname. Компилятор Rust предъявляет определённые требования к именам файлов библиотек, и система сборки обеспечивает их соблюдение, чтобы избежать проблем компиляции. Имя выходного файла должно соответствовать формату  | 
| имя_ящика | Это обязательное свойство для модулей, создающих библиотеки; оно также связано с именем выходного файла. (См. определение stem.) | 
| export_include_dirs | Для модулей rust_ffiэто свойство определяет список строк, представляющих относительные пути включения: пути, содержащие заголовки, которые могут использовать зависимые модулиcc. | 
Связывание rust_library или rust_ffi
 По умолчанию модули библиотеки Rust, предназначенные для устройств, всегда динамически линкуются с libstd . Однако хост-модули всегда линкуются с libstd статически.
 Связывание, используемое для зависимостей rustlibs , зависит от настроек связывания корневого модуля. (Например, rust_binary с prefer_rlib: true будет использовать варианты библиотеки Rust, которые связывают rustlibs как rlibs .)
 Чтобы обеспечить создание модулей корневой зависимости, не зависящих от динамических библиотек Rust (например, статических исполняемых файлов), rlibs предоставляет как динамические, так и статические варианты компоновки libstd . Soong автоматически компонует нужный вариант.
