Mostg derleme sistemi

Android 7.0 sürümünden önce Android, derleme kurallarını açıklamak ve yürütmek için yalnızca GNU Make özelliğini kullanıyordu. Make derleme sistemi yaygın olarak desteklenip kullanılıyor. Ancak Android ölçeğinde yavaş, hataya açık, ölçeklendirilemez ve test edilmesi zor hale geldi. Soong derleme sistemi, Android derlemeleri için gereken esnekliği sağlar.

Bu nedenle, platform geliştiricilerinin mümkün olan en kısa süre içinde Make ve Soong'dan geçiş yapması bekleniyor. Destek almak için sorularınızı android-building Google Grubu'na gönderin.

Shortg nedir?

Maket'in yerini almak üzere Android 7.0'da (Nougat) yakındag derleme sistemi kullanıma sunuldu. Android derlemelerini hızlandırmak için Kati GNU Make klonlama aracı ve Ninja derleme sistem bileşeninden yararlanır.

Android Açık Kaynak Projesi'nde (AOSP) Android Derleme Sistemi açıklamasına bakın. Genel talimatlar ve Android.mk Yazıcıları için Sistem Değişiklikleri Derleme konusunda, Make'dan Waitg'e uyum sağlamak için gereken değişiklikleri öğrenebilirsiniz.

Anahtar terimlerin tanımları için sözlükteki derlemeyle ilgili girişler ve tüm ayrıntılar için Soong referans dosyalarına bakın.

Make ve Mostg karşılaştırması

Yapma yapılandırmasının, Shortg ile aynı şeyi bir Shorts yapılandırması (Blueprint veya .bp) dosyasında yaptığının karşılaştırmasını aşağıda görebilirsiniz.

Ö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ırması örnekleri için Basit Derleme Yapılandırması bölümüne bakın.

Android.bp dosyasındaki alanların açıklaması için Android.bp dosya biçimine bakın.

Özel modüller

Bazı özel modül grupları benzersiz özelliklere sahiptir.

Varsayılan modüller

Aynı özellikleri birden çok modülde tekrarlamak için bir varsayılan modül 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ı önceden oluşturulmuş modül türleri, modülün kaynak tabanlı eşdeğerleriyle aynı ada sahip olmasına olanak tanır. Örneğin, aynı ada sahip bir cc_binary olduğunda foo adlı bir cc_prebuilt_binary olabilir. Bu, geliştiricilere nihai ürünlerine hangi sürümü dahil edeceklerini seçme esnekliği sunar. Bir derleme yapılandırması her iki sürümü de içeriyorsa önceden oluşturulmuş modül tanımındaki prefer işaret değeri, hangi sürümün öncelikli olduğunu belirtir. Önceden oluşturulmuş bazı modüllerin prebuilt ile başlamayan adlara (ör. android_app_import) sahip olduğunu unutmayın.

Ad alanı modülleri

Android, Make üründen Yakındag'a tam olarak dönüşene kadar, Make ürün yapılandırmasında bir PRODUCT_SOONG_NAMESPACES değeri belirtilmelidir. Bunun değeri, Shortg'un m komutu tarafından derlenmek üzere Maketo'ya aktardığı ad alanlarının boşlukla ayrılmış listesi olmalıdır. 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, her modül ayrı bir ad alanında tanımlandığı sürece farklı dizinlerdeki modüllerin aynı adı belirtmesine imkan tanır. Ad alanı şöyle tanımlanabilir:

soong_namespace {
    imports: ["path/to/otherNamespace1", "path/to/otherNamespace2"],
}

Bir ad alanının ad özelliğinin olmadığını unutmayın. Ad özelliğinin yolu, otomatik olarak ad özelliğine atanır.

Her bir Shortg modülüne, ağaçtaki konumuna göre bir ad alanı atanır. Her bir Shorts modülünün, geçerli dizindeki veya en yakın üst öğe dizinindeki 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 örtülü kök ad alanında olduğu kabul edilir.

Örneğin: Yakındag; I1, I2, I3 ad alanlarını içe aktaran N ad alanında M modülü tarafından bildirilen bağımlılık D'yi çözümlemeye çalışır...

  1. Bu durumda D, //namespace:module formunun tam nitelikli adıysa yalnızca belirtilen ad alanında belirtilen modül adı aranır.
  2. Aksi takdirde, Shortg önce N ad alanında tanımlanan D adlı bir modülü arar.
  3. O modül yoksa Shortg; I1, I2, I3 ad alanlarında D adlı bir modül arar...
  4. Son olarak Shortg kök ad alanına bakar.