Android Rust modülleri

Genel bir ilke olarak, rust_* modülü tanımları cc_* kullanımı ve beklentileri. Aşağıda örnek bir modüldür: Rust ikili programının tanımı:

rust_binary {
    name: "hello_rust",
    crate_name: "hello_rust",
    srcs: ["src/hello_rust.rs"],
    host_supported: true,
}

Bu sayfada rust_* modüllerde en sık kullanılan özellikler ele alınmaktadır. Örneğin, spesifik modül türleri ve örnek modül tanımları hakkında daha fazla bilgi edinebilir, bkz. İkili modüller Kitaplık modülleri veya Test modülleri.

Temel modül türleri

TürTanımDaha Fazla Bilgi Edinmek İçin
rust_binaryPas ikili programı İkili Modüller sayfa
rust_libraryBir Rust kitaplığı oluşturur ve hem rlib hem de dylib varyant. rust_library, Kitaplık Modülleri sayfası.
rust_ffiCC tarafından kullanılabilen bir Rust C kitaplığı oluşturur ve hem statik hem de paylaşılan varyantlar sağlar. rust_ffi, Kitaplık Modülleri sayfası
rust_proc_macroproc-macro Rust kitaplığı oluşturur. (Bunlar, derleyici eklentilerine benzer.) rust_proc_macro, Kitaplık Modülleri sayfası
rust_testŞunları kullanan bir Rust testi ikili programı oluşturur: standart Pasul test bandı. Test Modülleri sayfası
rust_fuzzVeriden yararlanan bir Rust fuzz ikilisi libfuzzer. rust_fuzz modülü örneği
rust_protobufKaynak üretir ve Rust üretir protobuf için arayüz sağlayan bir kaynak kitaplığıdır. Protokol Arabelleği Modülleri ve Kaynak Oluşturucu sayfaları
rust_bindgenKaynak üretir ve C kitaplıklarına Rust bağlamaları içeren Rust kitaplığı. Bindgen Bağlama Modülleri ve Kaynak Oluşturucular sayfaları

Önemli sık kullanılan özellikler

Bu özellikler tüm Android Rust'lerde ortaktır Modüller. Şahıs ile ilişkili ek (benzersiz) özellikler Rust modülleri ilgili modülün sayfasında listelenmiştir.

ad

name, modülünüzün adıdır. Diğer Mostg modüllerinde olduğu gibi, bu modül de benzersiz olmalıdır Android.bp modül türünde. Varsayılan olarak çıkış olarak name kullanılır dosya adı. Çıkış dosya adının modül adından farklı olması gerekiyorsa stem özelliğini kullanmanız gerekir.

gövde

stem (isteğe bağlı), çıkış dosya adı üzerinde doğrudan kontrol sağlar ( dosya uzantısı ve diğer son ekler gibi). Örneğin, rust_library_rlib kök değeri libfoo olan kitaplık bir libfoo.rlib dosyası oluşturur. Şu durumda: stem özelliği için bir değer sağlamazsanız çıkış dosya adı varsayılan olarak modül adını seçin.

Modül adını istediğiniz çıkışa ayarlayamıyorsanız stem işlevini kullanın dosya adı. Örneğin, log kasasının rust_library adı liblog_rust, çünkü liblog cc_library zaten var. Bu durumda stem özelliğini kullanmak, çıkışın dosyasının adı liblog_rust.* yerine liblog.*.

src'ler

srcs, modülünü (genellikle main.rs veya lib.rs) içerir. Çözünürlüğü rustc işler ve ve bunlar, derleme için gereken diğer tüm kaynak dosyaların oluşturulan deps dosyasında numaralandırılır.

Mümkünse platform kodu için bu kullanımdan kaçının; bkz. Kaynak Oluşturucular konulu videomuzu izleyin.

sandık_adı

crate_name, kasa adı meta verilerini rustc --crate_name aracılığıyla ayarlar tıklayın. Kitaplık oluşturan modüllerde bu, beklenen ile eşleşmelidir kaynakta kullanılan kasa adı. Örneğin, libfoo_bar modülüne referans veriliyorsa kaynakta extern crate foo_bar ise bu değer olmalıdır crate_name: "foo_bar".

Bu özellik tüm rust_* modüllerinde ortak olarak kullanılır ancak modüller için zorunludur. Rust kitaplıkları (ör. rust_library rust_ffi, rust_bindgen, rust_protobuf ve rust_proc_macro). Bu modüller, crate_name arasındaki ilişkide rustc şartı uygular ve çıkış dosya adı. Daha fazla bilgi için Kitaplık Modülleri bölümüne bakın.

hata analizi

rustc lint işlevi, kaynak oluşturucular hariç tüm modül türleri için varsayılan olarak çalıştırılır. Bazı lint kümeleri tanımlanmış ve modül kaynağını doğrulamak için kullanılmaktadır. Bu tür lint'ler için olası değerler kümeleri şu şekildedir:

  • Modülün konumuna bağlı olarak varsayılan lints grubunu default
  • android Tüm Android platform kodları için geçerli olan en katı lint kümesi
  • vendor Tedarikçi firma koduna uygulanan rahat bir çözüm kümesi
  • Tüm lint uyarılarını ve hatalarını yoksaymak için none

Klipsli tüyler

clippy linter da kaynak oluşturucular hariç tüm modül türleri için varsayılan olarak çalışır. Birkaç lint grubu Modül kaynağını doğrulamak için kullanılanlar tanımlanmıştır. Bazı olası işlemler değerleri:

  • Modülün konumuna bağlı olarak default varsayılan lints grubu
  • android Tüm Android platform kodları için geçerli olan en katı lint kümesi
  • vendor Tedarikçi firma koduna uygulanan rahat bir çözüm kümesi
  • Tüm lint uyarılarını ve hatalarını yoksaymak için none

basım

edition, kullanılacak Rust sürümünü tanımlar bu kodu derlemek. Bu, C ve C++ için std sürümlerine benzer. Geçerli değerler 2015 ve 2018 (varsayılan) değerleridir.

bayraklar

flags, derleme sırasında rustc öğesine iletilecek işaretlerin dize listesini içeriyor.

ld_bayrakları

ld-flags, derleme sırasında bağlayıcıya iletilecek işaretlerin dize listesini içerir kaynak. Bunlar -C linker-args rustc işareti ile geçilir. clang şu şekilde kullanılıyor: bağlayıcı ön ucunda, gerçek bağlantı için lld çağrılır.

özellikler

features, derleme sırasında etkinleştirilmesi gereken özelliklerin dize listesidir. Bu öğe --cfg 'feature="foo"' tarafından rustc'a geçirildi. Çoğu özellik katkıdır, Yani çoğu durumda bu, bağımlı olan tüm SDK'ların gerektirdiği özelliklerin modüllerinde yer alır. Ancak özelliklerin birbirinin dışında olduğu durumlarda, çakışan özellikler sunan derleme dosyalarında ek modüller tanımlama.

cfg'ler

cfgs, derleme sırasında etkinleştirilecek cfg işaretinin dize listesini içeriyor. Bu ileti --cfg foo ve --cfg "fizz=buzz" tarafından rustc bölümüne iletildi.

Derleme sistemi özellikle belirli cfg işaretlerini otomatik olarak ayarlar durumlar, aşağıda listelenmiştir:

  • Dlib olarak oluşturulan modüllerde android_dylib cfg grubu bulunur.

  • VNDK'yı kullanacak modüllerde android_vndk cfg ayarlanır. Bu __ANDROID_VNDK__ ile benzer tanımını yapabilirsiniz.

şerit

strip, çıkış dosyasının çıkarılıp çıkarılmayacağını ve nasıl çıkarılacağını (varsa) kontrol eder. Bu politika ayarlanmazsa cihaz modülleri, mini hata ayıklama bilgileri hariç varsayılan olarak her şeyi kaldırır. Ana makine modülleri, varsayılan olarak hiçbir simgeyi çıkarmaz. Geçerli değerler şunları içerir: none çıkarmayı devre dışı bırakır ve all küçük hata ayıklama bilgisi dahil her şeyi çıkarır. Ek değerler Soong Modülleri Referansı.

ana_makine_destekli

Cihaz modüllerinde host_supported parametresi, modülün bir ana makine varyantı da sağlamalıdır.

Kitaplık bağımlılıklarını tanımlama

Rust modülleri hem CC hem de Aşağıdaki özellikler aracılığıyla Rust kitaplıkları:

Mülk Adı Açıklama
rustlibs Aynı zamanda bağımlılık olan rust_library modülün listesi. Bunu şu şekilde kullan: bağımlılıkları bildirmeyi tercih ettiğiniz yöntemi kullanır. Bu, derleme sisteminin tercih edilen bağlantıyı seçin. (Aşağıdaki Rust kitaplıklarına bağlantı oluştururken bölümüne göz atın)
rlibs Statik olarak bağlı olması gereken rust_library modülün listesi rlibs olarak. (Dikkatli kullanın; bkz. Aşağıdaki Rust kitaplıklarına bağlantı oluştururken aşağıdaki adımları uygulayın.)
shared_libs Dinamik olarak ayarlanması gereken cc_library modülün listesi paylaşılan kitaplıklar olarak bağlandı.
static_libs Statik olarak olması gereken cc_library modülün listesi statik kitaplık olarak bağlı.
whole_static_libs Statik olarak bulunması gereken cc_library modülün listesi statik kitaplıklar olarak bağlanır ve sonuç olarak elde edilen kitaplığa bütün olarak eklenir. Örneğin, rust_ffi_static varyant ve whole_static_libraries varyantı dahil edilecek statik kitaplık arşivini oluşturur. rust_library_rlib varyant için whole_static_libraries kitaplık, sonuç olarak elde edilen rlib içinde birleştirilecek kitaplığını tanıtır.

Rust kitaplıklarına bağlantı oluştururken en iyi uygulamaya göre, bunu rlibs yerine rustlibs özelliğini kullanarak yapın veya Belirli bir nedeniniz yoksa dylibs. Bu, derlemenin kök modülün gereksinimlerine göre doğru bağlantıyı seçmesini ve bir bağımlılık ağacının hem rlib hem de Bir kitaplığın dylib sürümleri (derlemenin başarısız olmasına neden olur).

Desteklenmeyen ve sınırlı destek derleme özellikleri

Yakındag'ın Rust hizmeti vendor ve vendor_ramdisk resim ve anlık görüntü. Ancak staticlibs, cdylibs, rlibs ve binaries desteklenir. Tedarikçi firma görüntüsü derleme hedefleri için android_vndk cfg özelliği ayarlandı. Varsa bunu kodda kullanabilirsiniz arasındaki farkları konuşacağız. rust_proc_macros değil tedarikçi anlık görüntülerinin bir parçası olarak yakalanır. ve bunlara güveniyorsanız sürüm denetimi yapması gerekir.

Ürün, VNDK ve Kurtarma görüntüleri desteklenmez.

Artımlı derlemeler

Geliştiriciler, uygulama geliştirmeleri için SOONG_RUSTC_INCREMENTAL ayarlayarak pas kaynağı ortam değişkenini true olarak ayarlayın.

Uyarı: Bunun, şunlarla aynı olan ikili programlar üretmesi garanti edilmez oluşturmak için kullanılır. Bu komutta yer alan işlevlerin veya verilerin nesne dosyaları farklı olabilir. Oluşturulan yapıların %100 olduğundan emin olmak gibi bir sürüm oluşturuyorsa bu değeri ayarlamadan bırakın.