המרה מ-Make ל-Soong

לפני שחרור Android 7.0, מערכת Android השתמשה ב-GNU Make באופן בלעדי כדי לתאר ולהפעיל את כללי הבנייה שלה. מערכת ה-build של Make נתמכת ברוב המקרים ונעשה בה שימוש נרחב, אבל בקנה מידה של Android היא הפכה לאיטית, מועדת לשגיאות, לא ניתנת להרחבה וקשה לבדיקה. מערכת ה-build של Soong מספקת את הגמישות הנדרשת ל-build של Android. אנחנו מבצעים שינויים משמעותיים במערכת הבנייה של Android, מוציאים משימוש את מערכת הבנייה Make ‏ (Android.mk) ומחליפים אותה ב-Soong ‏ (Android.bp).

לכן, מפתחי פלטפורמות צריכים לעבור מ-Make ל-Soong בהקדם האפשרי. כדי לקבל תמיכה, אפשר לשלוח שאלות לקבוצת Google‏ Android Building.

מה זה Soong?

מערכת ה-build של Soong הושקה ב-Android 7.0‏ (Nougat) כדי להחליף את Make. הוא משתמש בכלי Kati GNU Make clone ובמרכיב של מערכת הבנייה Ninja כדי להאיץ את הבנייה של Android.

במאמר Android Make Build System ב-Android Open Source Project (פרויקט קוד פתוח של Android‏, AOSP) מפורטות הוראות כלליות וגם שינויים במערכת Build לכותבי Android.mk, כדי ללמוד על השינויים שצריך לבצע כדי לעבור מ-Make ל-Soong. הגדרות של מונחים חשובים מופיעות בערכים שקשורים לבנייה במילון המונחים, ופרטים מלאים מופיעים בSoong Modules Reference.

השוואה בין Make ל-Soong

הנה השוואה בין הגדרת Make לבין הגדרת 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 ספציפיות לבדיקות מופיעות במאמר הגדרת build פשוטה.

תהליך המרה בסיסי

ההמרה של קובץ Android.mk לקובץ Android.bp מתבצעת בדרך כלל לפי תהליך העבודה הכללי הזה באמצעות כלי העזר androidmk. באופן כללי, אלה השלבים שמתבצעים בהמרה.

  1. מגדירים את סביבת הטרמינל ויוצרים את הכלי androidmk.

    androidmk הוא כלי לשורת הפקודה שמנתח קובץ Android.mk ומנסה ליצור פלט של קובץ Android.bp דומה. הוא יכול להמיר את רוב הקבצים Android.mk ל-Android.bp עם מעט שינויים ידניים או ללא שינויים ידניים בכלל.

    cd <root-of-the-tree>
    source build/envsetup.sh
    lunch <lunch-target>
    m androidmk
    
  2. מבצעים Build באמצעות Android.mk: sh m <module-name>

  3. מריצים את כלי ההמרה androidmk: sh androidmk <path-to-Android.mk>/Android.mk > <path-to-Android.bp>/Android.bp

  4. עורכים ידנית את הקובץ Android.bp:

    • צריך לטפל בכל האזהרות שמופיעות בכלי androidmk.
    • שומרים על כותרת זכויות היוצרים או מוסיפים אותה. אם מוסיפים תעודה חדשה, צריך להשתמש בשנה הנוכחית.
  5. מסירים את הקובץ Android.mk ויוצרים את הקובץ Android.bp.

  6. כדי לאמת את ההמרה, משווים את הארטיפקטים שנוצרו או מריצים בדיקות יחידה ובדיקות פונקציונליות.

  7. שומרים את השינויים ומעלים אותם לבדיקה.

מידע נוסף זמין במאמר בנושא פורמט של קובץ Android.bp.