כדי לצמצם את שטח הפנים של הסמלים והסוגים שצריך לשמור על יציבותם, לליבת GKI יש יכולות להגביל את הסמלים המיוצאים רק לאלה שנדרשים על ידי מודולים. במודולים שעברו קומפילציה חיצונית, צריך שתהיה רשימה של סמלים בשימוש כדי לאפשר ייצוא שלהם על ידי ליבת ה-GKI. לדוגמה, סמלים שמשמשים מודולים של Cuttlefish מאוחסנים ב-gki/aarch64/symbols/virtual_device.
הוספת יעד ליצירת רשימת הסמלים
רשימות הסמלים נוצרות על ידי יעד kernel_abi. מוסיפים את יעד ההמרה הזה למכשיר BUILD.bazel באמצעות האפשרויות הבאות:
- name- הפורמט הנדרש הוא: - <kernel_build>_abi.
- kernel_build- צריך להכיל את שם מכשיר היעד - kernel_build.
אפשר גם להשתמש באפשרויות הבאות:
- kernel_modules- רשימה של יעדים למודולים out-of-tree. אין לכלול כאן מודולים בתוך העץ. אפשר לעיין במאמר בנושא הכנת מודולים בתוך העץ לחילוץ סמלים. 
- kmi_symbol_list_add_only- האפשרות הזו מונעת את ההסרה של סמלים שלא נעשה בהם שימוש. אפשר להסיר סמלים רק בזמנים ספציפיים במהלך הייצוב של KMI, ואי אפשר לעשות זאת אחרי ש-KMI קפוא. - האפשרות הזו שימושית גם כשמשתמשים באותה רשימת סמלים בכמה מכשירים שונים. כך לא יוסרו סמלים שמשמשים במכשיר א' אבל לא במכשיר ב'. 
- module_grouping- אם - Trueאו לא צוין, אז רשימת הסמלים מקבצת סמלים על סמך מודולי הליבה שמפנים לסמל. אחרת, רשימת הסמלים היא רשימה ממוינת של סמלים שמשמשים את כל מודולי הליבה.
לדוגמה, ראו את common-modules/virtual-device/BUILD.bazel:
kernel_abi(
    name = "virtual_device_aarch64_abi",
    kernel_build = ":virtual_device_aarch64",
    kernel_modules = [":virtual_device_aarch64_external_modules"],
    kmi_symbol_list_add_only = True,
)
אפשר גם לעיין במאמרי העזרה בנושא היעד kernel_abi ב-Kleaf.
הכנה של מודולים בתוך העץ לחילוץ סמלים
כדי להכין מודולים בתוך העץ לחילוץ סמלים, צריך לרשום מודולים בתוך העץ שספציפיים לספק במאפיין module_outs של יעד kernel_build. _VIRT_COMMON_MODULES
ודוגמה לשימוש אל תכללו ברשימה הזו מודולים של GKI.
צריך להגדיר את המודולים האלה כלא חתומים, אחרת רשימת הסמלים עשויה להיות ריקה. כדי לעשות זאת, מוסיפים את השורה הזו לקטעי ההגדרות של ליבת המערכת:
# CONFIG_MODULE_SIG_ALL is not set
לדוגמה, ראו
common-modules/virtual-device/virtual_device_core.fragment.
הוספת רשימת סמלים של מכשיר ל-build של ליבת המכשיר
מוסיפים את מאפיין kmi_symbol_list ליעד kernel_build שמוגדר במכשיר BUILD.bazel. שם רשימת הסמלים צריך להיות בפורמט
//common:gki/<arch>/symbols/<device>.
דוגמה:
common-modules/virtual-device/BUILD.bazel,
kernel_build(
    name = "virtual_device_aarch64",
    base_kernel = "//common:kernel_aarch64",
    kmi_symbol_list = "//common:gki/aarch64/symbols/virtual_device",
    ...
    module_outs = _VIRT_COMMON_MODULES + _VIRT_AARCH64_MODULES,
)
יצירה ושליחה של רשימת סמלים ראשונית
תצור רשימה ריקה של סמלים בcommon/gki/<arch>/symbols/<device>. בדוגמה שלמעלה, הפקודה תהיה:
touch common/gki/aarch64/symbols/virtual_deviceמוסיפים את הקובץ הזה אל additional_kmi_symbol_lists של גרסת הבסיס של ליבת GKI. לדוגמה, //common:gki/aarch64/symbols/virtual_device נוסף לקבוצת הקבצים aarch64_additional_kmi_symbol_lists, שמוצהרת ב-common/BUILD.bazel.
מעדכנים את רשימת הסמלים של המכשירים כדי למלא את רשימת הסמלים החדשה ושולחים אותה למאגר של ליבת Android Common.
עדכון רשימת סמלי מכשירים
כל הסמלים של ליבת הקרנל שנעשה בהם שימוש במודולים ב-module_outs של kernel_build וב-kernel_modules של kernel_abi צריכים להיכלל ברשימת הסמלים. כדי לעשות זאת, מריצים את היעד kernel_abi עם הסיומת _update_symbol_list. לדוגמה, הפקודה הבאה מעדכנת את רשימת הסמלים של //common-modules/virtual-device:virtual_device_aarch64:
tools/bazel run //common-modules/virtual-device:virtual_device_aarch64_abi_update_symbol_listשליחת עדכון של רשימת סמלים ל-ACK
שולחים תיקון עם השינוי ברשימת הסמלים אל Android Common Kernel gerrit כדי שהסמלים החדשים יהיו חלק מ-KMI.
הודעת השמירה צריכה לכלול רשימה של סמלים שנוספו או הוסרו. אפשר לכתוב את הרשימה הזו באופן ידני אם רוצים לעדכן רשימה קטנה של סמלים, או להשתמש ב$DIST_DIR/abi_stgdiff/abi.report.short דוח אחרי עדכון הייצוג של ה-ABI של ההפניה.
עדכון הייצוג של ה-ABI של ההפניה לפני שליחת עדכון של רשימת סמלים הוא לא חובה, אבל הוא יכול למנוע שלבים נוספים לפני השליחה ולזרז את מוכנות השינוי לשליחה. בכל מקרה, הוא נבדק ומעודכן אם צריך במהלך בדיקת הקוד לפני השליחה.
עבודה עם רשימות של סמלים (Android 13)
Android 13 תומך גם ב-Kleaf וגם בסקריפטים ישנים של build, כך שאפשר לנהל רשימות של סמלים כמו שמתואר בקטעים הקודמים או כמו שמתואר בקטע הבא.
עבודה עם רשימות של סמלים (Android מגרסה 12 ומטה)
משתמשים בכלי build_abi.sh באופן הבא:
BUILD_CONFIG=path/to/build.config.device build/build_abi.sh --update-symbol-listבדוגמה הזו, build.config.device צריך לכלול את אפשרויות ההגדרה הבאות:
- vmlinux- הערך חייב להיות חלק מהרשימה - FILES. כדי לעשות זאת, אפשר להוסיף את התוכן הבא:- build.config.aarch64.
- KMI_SYMBOL_LIST- צריך להגדיר את המשתנה כך שיצביע על רשימת הסמלים של KMI כדי לעדכן. 
אחרי שמעדכנים את רשימת הסמלים של המכשיר, צריך גם לשקף את השינויים האלה ב-GKI build  (common/build.config.gki.aarch64):
- מעתיקים את רשימת הסמלים המעודכנת אל - common/android/abi_gki_aarch64_<device>.
- בודקים ש- - android/abi_gki_aarch64_<device>נכלל ב-- ADDITIONAL_KMI_SYMBOL_LISTSב-- common/build.config.gki.aarch64.
