יש כמה דרכים לבדוק את התכונות של המעבד בקוד, ולכל אחת מהן יש יתרונות וחסרונות שונים.
ABI: שימוש בפקודות מאקרו שהוגדרו מראש על ידי מעבד מקדים
בדרך כלל הכי נוח לקבוע את ה-ABI בזמן הבנייה באמצעות #ifdef בשילוב עם:
-
__arm__ל-ARM ב-32 ביט -
__aarch64__ל-ARM 64 ביט -
__i386__ל-32 ביט X86 -
__x86_64__ל-X86 64 ביט
שימו לב ש-X86 של 32 ביט נקרא __i386__ ולא __x86__, כמו שאולי ציפיתם.
מספר ליבות המעבד: שימוש ב-sysconf(3) של libc
sysconf(3) מאפשרת לשאול גם על _SC_NPROCESSORS_CONF (מספר ליבות ה-CPU במערכת) וגם על _SC_NPROCESSORS_ONLN (מספר ליבות ה-CPU שמחוברות כרגע לאינטרנט).
תכונות: שימוש ב-getauxval(3) של libc
ב-API ברמה 18 ומעלה, הפונקציה getauxval(3) זמינה בספריית C של Android. הארגומנטים AT_HWCAP ו-AT_HWCAP2
מחזירים מסכות ביטים שמפרטות תכונות ספציפיות למעבד. אפשר לעיין בכותרות השונות ב-NDK כדי לראות את הקבועים שאיתם צריך להשוות, כמו hwcap.h עבור הוראות SHA512 של arm64, או HWCAP_SHA512HWCAP_IDIVT עבור הוראות חלוקת מספרים של Thumb של arm.
הספרייה cpu_features של Google
בעיה אחת ב-AT_HWCAP היא שלפעמים יש טעות בזיהוי המכשירים. לדוגמה, חלק מהמכשירים הישנים טוענים שיש להם הוראות חלוקה של מספרים שלמים, אבל בפועל אין להם.
ספריית Google's cpu_features פועלת כדי לפתור בעיות כאלה על ידי שימוש בידע שלה לגבי מערכות ספציפיות על שבב (SoC) (על ידי ניתוח /proc/cpuinfo כדי להבין איזו מערכת על שבב מדוברת).
הספרייה הזו מתוחזקת לשימוש של צוותי האפליקציות מאינטראקציה ישירה של Google, ויש בה פתרונות לכל מכשיר בעייתי שהם נתקלו בו.
הספרייה NDK cpufeatures (הוצאה משימוש)
ה-NDK עדיין מספק ספרייה שהוצאה משימוש בשם cpufeatures לצורך תאימות למקור עם אפליקציות שכבר משתמשות בה. בניגוד לספרייה החדשה והמלאה יותר cpu_features, בספרייה ההיסטורית הזו אין פתרונות עקיפים למספר רב של מערכות SoC ספציפיות.