Makedonya modundan Assistantg'a dönüştür

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 en kısa sürede Make'ten geçiş yapıp Soong'u benimsemeleri beklenmektedir. Destek almak için sorularınızı android-building Google Grubu'na gönderin.

Soong 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ından ve Ninja derleme sistemi bileşeninden yararlanır.

Android Açık Kaynak Projesi'nde (AOSP) Android Derleme Sistemi açıklamasına bakarak genel talimatlar ve Android.mk Yazıcıları için Sistem Değişiklikleri Derleme bölümüne göz atarak Make'dan Yakındag'a uyum sağlamak için gereken değişiklikleri öğrenin.

Anahtar terimlerin tanımları için sözlükteki derlemeyle ilgili girişlere, tüm ayrıntılar için de 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şturma

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 özgü Soong yapılandırma örnekleri için Basit Derleme Yapılandırması başlıklı makaleyi inceleyin.

Android.bp dosyasındaki alanların açıklaması için Android.bp dosya biçimi bölümüne bakın.

Özel modüller

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

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 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. Bazı önceden oluşturulmuş modüllerin adlarının prebuilt ile başlamadığını (ör. android_app_import) 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.

Soong, her modül ayrı bir ad alanında tanımlandığı sürece farklı dizinlerdeki modüllerin aynı adı belirtmesine olanak tanı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. Ad özelliğinin yolu, otomatik olarak ad özelliğine atanır.

Her Soong 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.