Android 7.0 sürümünden önce Android, derleme kurallarını tanımlamak ve yürütmek için yalnızca GNU Make'i kullanıyordu. Make derleme sistemi yaygın bir şekilde desteklenmeye ve kullanılmaya başlandı ancak Android ölçeğinde yavaşlaştı, hataya açık hale geldi. ve test edilmesi zordur. İlgili içeriği oluşturmak için kullanılan Mostg derleme sistemi Android derlemeleri için gereken esnekliği sağlar.
Bu nedenle, platform geliştiricilerinin Marka ve En kısa zamanda. Soruları şuraya gönderin: android-bina Google Gruplar'a ekleyin.
Shortg nedir?
Soong derleme sistemi, Make'in yerini almak için Android 7.0 (Nougat) sürümünde kullanıma sunulmuştur. Android derlemelerini hızlandırmak için Kati GNU Make klonlama aracından ve Ninja derleme sistemi bileşeninden yararlanır.
Bkz. Android Marka Derleme Sistemi Android Açık Kaynak Projesi'nde (AOSP) genel açıklama talimatları ve Android.mk Yazıcıları İçin Sistem Değişiklikleri Derleme başlıklı makalemize göz atın.
Derlemeyle ilgili girişleri terimlerin tanımlarını ve Tüm ayrıntılar için Soong referans dosyaları.
Make ve Soong karşılaştırması
Aşağıda, Make yapılandırma ile Soong yapılandırma (Blueprint veya .bp
) dosyasında aynı işlemi gerçekleştirmenin karşılaştırması verilmiştir.
Örnek oluştur
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libxmlrpc++
LOCAL_MODULE_HOST_OS := linux
LOCAL_RTTI_FLAG := -frtti
LOCAL_CPPFLAGS := -Wall -Werror -fexceptions
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/src
LOCAL_SRC_FILES := $(call \
all-cpp-files-under,src)
include $(BUILD_SHARED_LIBRARY)
Shorts örneği
cc_library_shared {
name: "libxmlrpc++",
rtti: true,
cppflags: [
"-Wall",
"-Werror",
"-fexceptions",
],
export_include_dirs: ["src"],
srcs: ["src/**/*.cpp"],
target: {
darwin: {
enabled: false,
},
},
}
Teste özel Shortg yapılandırma örnekleri için bkz. Basit Derleme Yapılandırması.
Android.bp dosyasındaki alanların açıklaması için Android.bp dosya biçimindedir.
Özel modüller
Bazı özel modül gruplarının benzersiz özellikleri vardır.
Varsayılan modüller
Varsayılanlar modülü, aynı özellikleri birden fazla modülde tekrarlamak için kullanılabilir. Örnek:
cc_defaults {
name: "gzip_defaults",
shared_libs: ["libz"],
stl: "none",
}
cc_binary {
name: "gzip",
defaults: ["gzip_defaults"],
srcs: ["src/test/minigzip.c"],
}
Önceden oluşturulmuş modüller
Bazı hazır modül türleri, bir modülün kaynak tabanlı muadilleriyle aynı ada sahip olmasına olanak tanır. Örneğin, aynı ada sahip bir cc_binary
varken foo
adlı bir cc_prebuilt_binary
olabilir. Bu sayede geliştiriciler, nihai ürünlerine hangi sürümü dahil edeceklerini seçebilirler. Bir derleme yapılandırması her iki sürümü de içeriyorsa prefer
işareti
değeri, hangi sürümün öncelikli olduğunu belirtir.
Önceden oluşturulmuş bazı modüllerin prebuilt
ile başlamayan adlara sahip olduğunu,
(ör. android_app_import
).
Ad alanı modülleri
Android, Make'ten Soong'a tamamen geçiş yapana kadar Make ürün yapılandırmasında bir PRODUCT_SOONG_NAMESPACES
değeri belirtilmelidir. Bu
değeri, Shortg'un Yapma aracına dışa aktardığı, boşlukla ayrılmış bir ad alanları listesi olmalıdır
komutu m
komutuyla derlenir. Android'in Shortg'a dönüştürülmesi tamamlandıktan sonra
ad alanlarını etkinleştirmeyle ilgili ayrıntılar değişebilir.
Shortg, farklı dizinlerdeki modüllerin adını belirtme imkanı sunar. her modül ayrı bir ad alanında tanımlandığı sürece aynı ada sahip olmalıdır. Bir ad alanı şu şekilde tanımlanabilir:
soong_namespace {
imports: ["path/to/otherNamespace1", "path/to/otherNamespace2"],
}
Bir ad alanının ad özelliğinin olmadığını unutmayın. yolu otomatik olarak olarak atanmıştır.
Her Shortg modülüne, ağaçtaki konumuna bağlı olarak bir ad alanı atanır.
Her Soong modülünün, geçerli dizindeki veya en yakın üst dizindeki bir Android.bp
dosyasında bulunan soong_namespace
tarafından tanımlanan ad alanında olduğu kabul edilir. Böyle bir soong_namespace
modülü bulunamazsa modülün, varsayılan kök ad alanında olduğu kabul edilir.
Örnek: Shortg, M modülü tarafından açıklanan bağımlılık D'yi çözümlemeye çalışıyor I1, I2, I3 ad alanlarını içe aktaran N ad alanında
- Ardından, D
//namespace:module
biçiminde tam nitelikli bir ad ise belirtilen modül adı için yalnızca belirtilen ad alanı aranır. - Aksi takdirde Soong, önce N adında bir ad alanında tanımlanmış D adlı bir modül arar.
- O modül yoksa Shorts videosunda D adlı bir modül I1, I2, I3 ad alanları
- Son olarak Soong, kök ad alanında arama yapar.