Segera Bangun Sistem

Sebelum Android 7.0 dirilis, Android menggunakan GNU Make secara eksklusif untuk mendeskripsikan dan menjalankan aturan build-nya. Sistem Make build didukung dan digunakan secara luas, namun pada skala Android menjadi lambat, rawan kesalahan, tidak dapat diskalakan, dan sulit untuk diuji. Sistem build Soong memberikan fleksibilitas yang diperlukan untuk build Android.

Oleh karena itu, pengembang platform diharapkan untuk beralih dari Make dan mengadopsi Soong sesegera mungkin. Kirim pertanyaan ke Google Grup pembuat android untuk menerima dukungan.

Apa itu Soon?

Sistem build Soong diperkenalkan di Android 7.0 (Nougat) untuk menggantikan Make. Ini memanfaatkan alat kloning Kati GNU Make dan komponen sistem pembuatan Ninja untuk mempercepat pembuatan Android.

Lihat deskripsi Android Make Build System di Android Open Source Project (AOSP) untuk petunjuk umum dan Build System Changes untuk Android.mk Writers guna mempelajari modifikasi yang diperlukan untuk beradaptasi dari Make ke Soong.

Lihat entri terkait build di glosarium untuk definisi istilah-istilah utama dan file referensi Soong untuk detail selengkapnya.

Perbandingan Make dan Soon

Berikut ini perbandingan konfigurasi Make dengan Soong yang melakukan hal yang sama dalam file konfigurasi Soong (Cetak Biru atau .bp ).

Berikan contoh

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)

Contoh segera

cc_library_shared {
     name: "libxmlrpc++",

     rtti: true,
     cppflags: [
           "-Wall",
           "-Werror",
           "-fexceptions",
     ],
     export_include_dirs: ["src"],
     srcs: ["src/**/*.cpp"],

     target: {
           darwin: {
                enabled: false,
           },
     },
}

Untuk contoh konfigurasi Soong khusus pengujian, lihat Konfigurasi Build Sederhana .

Untuk penjelasan mengenai kolom dalam file Android.bp, lihat format file Android.bp .

Modul khusus

Beberapa kelompok modul khusus mempunyai karakteristik yang unik.

Modul default

Modul default dapat digunakan untuk mengulangi properti yang sama di beberapa modul. Misalnya:

cc_defaults {
    name: "gzip_defaults",
    shared_libs: ["libz"],
    stl: "none",
}

cc_binary {
    name: "gzip",
    defaults: ["gzip_defaults"],
    srcs: ["src/test/minigzip.c"],
}

Modul bawaan

Beberapa jenis modul bawaan memungkinkan modul memiliki nama yang sama dengan modul berbasis sumber. Misalnya, mungkin ada cc_prebuilt_binary bernama foo ketika sudah ada cc_binary dengan nama yang sama. Hal ini memberikan fleksibilitas kepada pengembang untuk memilih versi mana yang akan disertakan dalam produk akhir mereka. Jika konfigurasi build berisi kedua versi, nilai tanda prefer dalam definisi modul bawaan menentukan versi mana yang memiliki prioritas. Perlu diperhatikan bahwa beberapa modul bawaan memiliki nama yang tidak diawali dengan prebuilt , misalnya android_app_import .

Modul ruang nama

Hingga Android sepenuhnya berkonversi dari Make ke Soong, konfigurasi produk Make harus menentukan nilai PRODUCT_SOONG_NAMESPACES . Nilainya harus berupa daftar namespace yang dipisahkan spasi yang diekspor Soong ke Make untuk dibuat dengan perintah m . Setelah konversi Android ke Soong selesai, detail pengaktifan namespace dapat berubah.

Soong memberikan kemampuan bagi modul di direktori berbeda untuk menentukan nama yang sama, selama setiap modul dideklarasikan dalam namespace terpisah. Namespace dapat dideklarasikan seperti ini:

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

Perhatikan bahwa namespace tidak memiliki properti nama; jalurnya secara otomatis ditetapkan sebagai namanya.

Setiap modul Soong diberi namespace berdasarkan lokasinya di pohon. Setiap modul Soong dianggap berada dalam namespace yang ditentukan oleh soong_namespace yang ditemukan dalam file Android.bp di direktori saat ini atau direktori leluhur terdekat. Jika tidak ada modul soong_namespace yang ditemukan, modul tersebut dianggap berada dalam namespace root implisit.

Berikut ini contohnya: Soong mencoba menyelesaikan ketergantungan D yang dideklarasikan oleh modul M di namespace N yang mengimpor namespace I1, I2, I3…

  1. Kemudian jika D adalah nama formulir yang sepenuhnya memenuhi syarat //namespace:module , hanya namespace tertentu yang dicari untuk nama modul yang ditentukan.
  2. Jika tidak, Soong pertama-tama mencari modul bernama D yang dideklarasikan di namespace N.
  3. Jika modul tersebut tidak ada, Soong mencari modul bernama D pada namespace I1, I2, I3…
  4. Terakhir, Soong mencari di namespace root.