ก่อนการเผยแพร่ Android 7.0 Android ใช้ แบรนด์ของ GNU เพื่ออธิบายและใช้กฎการสร้างเพียงอย่างเดียว ระบบสร้างบิลด์คือ รองรับและใช้งานกันอย่างแพร่หลาย แต่ Android จำนวนมากกลับทำงานช้าและมีแนวโน้มที่จะเกิดข้อผิดพลาด ไม่สามารถปรับขนาดได้ และทดสอบได้ยาก ระบบการสร้าง Soong ให้ความยืดหยุ่นที่จำเป็นสำหรับบิลด์ของ Android
ด้วยเหตุนี้ นักพัฒนาซอฟต์แวร์แพลตฟอร์มจึงคาดว่าจะเปลี่ยนจากบริษัทผู้ผลิตและนำมาใช้ Soong โดยเร็วที่สุด ส่งคำถามไปยัง การสร้าง Android Google Group เพื่อรับการสนับสนุน
Soong คืออะไร
ระบบบิลด์ Soong เปิดตัวใน Android 7.0 (Nougat) เพื่อแทนที่ Make ใช้ประโยชน์จาก Kati GNU สร้างเครื่องมือโคลนและระบบบิลด์ของ Ninja เพื่อเร่งความเร็วบิลด์ต่างๆ ของ Android
โปรดดู ระบบบิลด์ของ Android ในโครงการโอเพนซอร์ส Android (AOSP) ทั่วไป วิธีการ และ สร้างการเปลี่ยนแปลงระบบสำหรับผู้เขียน Android.mk เพื่อเรียนรู้เกี่ยวกับการปรับเปลี่ยนที่จำเป็นในการ ปรับเปลี่ยนจาก Make เป็น Soong
ดูรายการที่เกี่ยวข้องกับรุ่นใน สำหรับคำจำกัดความของคำสำคัญ ไฟล์อ้างอิงในเร็วๆ นี้เพื่อดูรายละเอียดทั้งหมด
การเปรียบเทียบเพลงกับแบรนด์
นี่คือการเปรียบเทียบการกำหนดค่า "กำหนดค่า" กับ Soong ที่ทำสำเร็จเหมือนกันใน
ไฟล์การกำหนดค่า Soong (Blueprint หรือ .bp
)
สร้างตัวอย่าง
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)
ตัวอย่าง Soong
cc_library_shared {
name: "libxmlrpc++",
rtti: true,
cppflags: [
"-Wall",
"-Werror",
"-fexceptions",
],
export_include_dirs: ["src"],
srcs: ["src/**/*.cpp"],
target: {
darwin: {
enabled: false,
},
},
}
สำหรับตัวอย่างการกำหนดค่า Soong สำหรับการทดสอบโดยเฉพาะ โปรดดู การกำหนดค่าบิลด์แบบง่าย
หากต้องการคำอธิบายเกี่ยวกับช่องต่างๆ ในไฟล์ Android.bp โปรดดู รูปแบบไฟล์ Android.bp
โมดูลพิเศษ
กลุ่มโมดูลพิเศษบางกลุ่มมีลักษณะเฉพาะ
โมดูลเริ่มต้น
คุณสามารถใช้โมดูลเริ่มต้นเพื่อแสดงคุณสมบัติเดียวกันซ้ำในหลายโมดูล เช่น
cc_defaults {
name: "gzip_defaults",
shared_libs: ["libz"],
stl: "none",
}
cc_binary {
name: "gzip",
defaults: ["gzip_defaults"],
srcs: ["src/test/minigzip.c"],
}
โมดูลที่สร้างไว้ล่วงหน้า
โมดูลบางประเภทที่สร้างไว้ล่วงหน้าช่วยให้โมดูลมีชื่อเหมือนกับโมดูลนั้น
โฆษณาที่ซ้ำกันและอิงตามแหล่งที่มา ตัวอย่างเช่น อาจมี cc_prebuilt_binary
ตั้งชื่อ foo
เมื่อมี cc_binary
ที่ใช้ชื่อนี้แล้ว ซึ่งจะให้
ความยืดหยุ่นในการเลือกเวอร์ชันที่จะรวมไว้ในขั้นสุดท้าย
ผลิตภัณฑ์ หากการกำหนดค่าบิลด์มีทั้ง 2 เวอร์ชัน แฟล็ก prefer
ในคำจำกัดความของโมดูลที่สร้างไว้ล่วงหน้าจะกำหนดว่าเวอร์ชันใดมีลำดับความสำคัญ
โปรดทราบว่าโมดูลที่สร้างไว้ล่วงหน้าบางรายการมีชื่อที่ไม่ได้ขึ้นต้นด้วย prebuilt
เช่น android_app_import
โมดูลเนมสเปซ
การกำหนดค่าผลิตภัณฑ์ "สร้าง" จนกว่า Android จะแปลงจาก Make เป็น Soong โดยสมบูรณ์
ต้องระบุค่า PRODUCT_SOONG_NAMESPACES
คือ
ควรเป็นรายการเนมสเปซที่ Soong ส่งออกไปที่ โดยใช้การเว้นวรรค
จะสร้างด้วยคำสั่ง m
หลังจากการแปลง Android เป็น Soong เสร็จสมบูรณ์
รายละเอียดการเปิดใช้เนมสเปซอาจเปลี่ยนแปลง
Soong ช่วยให้โมดูลในไดเรกทอรีต่างๆ สามารถระบุ ชื่อเดียวกัน ตราบใดที่มีการประกาศแต่ละโมดูลภายในเนมสเปซแยกกัน ต Namespace สามารถประกาศได้ดังต่อไปนี้
soong_namespace {
imports: ["path/to/otherNamespace1", "path/to/otherNamespace2"],
}
โปรดทราบว่าเนมสเปซไม่มีพร็อพเพอร์ตี้ชื่อ ของ URL จะเปลี่ยนเส้นทางโดยอัตโนมัติ เป็นชื่อ
โมดูล Soong แต่ละรายการจะได้รับการกำหนดเนมสเปซตามตำแหน่งของโมดูลในแผนผัง
โมดูล Soong แต่ละรายการจะถือว่าอยู่ในเนมสเปซที่กําหนดโดย
พบ soong_namespace
ในไฟล์ Android.bp
ในไดเรกทอรีปัจจุบันหรือ
ไดเรกทอรีระดับบนที่ใกล้ที่สุด หากไม่พบโมดูล soong_namespace
ดังกล่าว
ถือว่าอยู่ในเนมสเปซรากโดยนัย
ตัวอย่าง: Soong พยายามที่จะแก้ไขทรัพยากร Dependency D ที่ประกาศโดยโมดูล M ในเนมสเปซ N ที่นำเข้าเนมสเปซ I1, I2, I3...
- หาก D เป็นชื่อที่มีคุณสมบัติครบถ้วนของแบบฟอร์ม
//namespace:module
ให้ใช้เฉพาะ ระบบจะค้นหาเนมสเปซที่ระบุเพื่อหาชื่อโมดูลที่ระบุ - มิฉะนั้น Soong จะมองหาโมดูลชื่อ D ที่ประกาศในเนมสเปซก่อน น.
- หากไม่มีโมดูลดังกล่าว Soong จะมองหาโมดูลชื่อ D ใน Namespace I1, I2, I3...
- สุดท้าย Soong ดูในเนมสเปซรูท