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ür | Tanım | Daha Fazla Bilgi Edinmek İçin |
---|---|---|
rust_binary | Pas ikili programı | İkili Modüller sayfa |
rust_library | Bir Rust kitaplığı oluşturur ve hem rlib hem de
dylib varyant. |
rust_library ,
Kitaplık Modülleri sayfası. |
rust_ffi | CC 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_macro | proc-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_fuzz | Veriden yararlanan bir Rust fuzz ikilisi
libfuzzer . |
rust_fuzz modülü örneği |
rust_protobuf | Kaynak ü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_bindgen | Kaynak ü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ümesivendor
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ümesivendor
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.