Mostg derleme sistemi

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

  1. 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.
  2. Aksi takdirde Soong, önce N adında bir ad alanında tanımlanmış D adlı bir modül arar.
  3. O modül yoksa Shorts videosunda D adlı bir modül I1, I2, I3 ad alanları
  4. Son olarak Soong, kök ad alanında arama yapar.