בדף הזה מפורטים השינויים בכל הגרסאות היציבות שפורסמו של NDK. כדי להוריד את הגרסה היציבה האחרונה של NDK או כל גרסת בטא שזמינה כרגע, אפשר לעיין בדף הורדות של NDK.
מידע נוסף זמין בקבוצת Google android-ndk-announce. אפשר גם להירשם לקבלת הודעות על גרסאות חדשות.
Android NDK r29 (אוקטובר 2025)
יומן שינויים- הורדות
-
- הורדות של הגרסה הזו זמינות כאן.
Android NDK r28 (פברואר 2025)
יומן שינויים- הורדות
-
- הורדות של הגרסה הזו זמינות כאן.
Android NDK r27 LTS (יולי 2024)
יומן שינויים- הורדות
-
- הורדות של הגרסה הזו זמינות כאן.
Android NDK r26 LTS (ספטמבר 2023)
יומן שינויים- הורדות
-
- הורדות של הגרסה הזו זמינות כאן.
- הודעות
-
- אין יותר תמיכה ב-KitKat (גרסאות API 19 ו-20).
Android NDK r25 LTS (יולי 2022)
יומן שינויים- הורדות
-
- הורדות של הגרסה הזו זמינות כאן.
- הודעות
-
- כולל ממשקי API של Android 13.
- LLVM עודכן ל-clang-r450784d, על סמך פיתוח LLVM 14.
Android NDK r24 (מרץ 2022)
יומן שינויים- הורדות
-
- הורדות של הגרסה הזו זמינות כאן.
- הודעות
-
-
הוסר GNU Assembler (GAS). אם השתמשתם ב-
-fno-integrated-as
כדי לבנות את האפליקציה, תצטרכו להסיר את הדגל הזה. במאמר הערות על העברה של Clang יש עצות להפיכת קובצי Assembly לתואמים ל-LLVM. - הוסר GDB. במקום זאת, צריך להשתמש ב-LLDB. הערה: ndk-gdb משתמש ב-LLDB כברירת מחדל, ו-Android Studio תמיד תמכה רק ב-LLDB.
- אין יותר תמיכה ב-Jelly Bean (ממשקי API 16, 17 ו-18). מערכת ההפעלה המינימלית שנתמכת על ידי NDK היא KitKat (רמת API 19).
- התמיכה במכשירים שאינם Neon הסתיימה. מספר קטן מאוד של מכשירים ישנים מאוד לא תומכים ב-Neon, ולכן רוב האפליקציות לא יבחינו בכך, מלבד שיפור הביצועים.
- הוסרה התמיכה ב-RenderScript build. RenderScript הוצא משימוש ב-Android 12. אם לא סיימתם להעביר את האפליקציות שלכם מ-RenderScript, תוכלו להשתמש ב-NDK r23 LTS.
-
הוסר GNU Assembler (GAS). אם השתמשתם ב-
Android NDK r23 LTS (אוגוסט 2021)
יומן שינויים- הורדות
-
- הורדות של הגרסה הזו זמינות כאן.
- הודעות
-
-
הוסר GNU binutils, לא כולל GNU Assembler (GAS). GAS
יוסר בגרסה הבאה. אם אתם משתמשים ב-
-fno-integrated-as
, דווחו על באגים אם משהו מונע מכם להסיר את הדגל הזה. -
התמיכה ב-GDB הסתיימה. GDB יוסר מהגרסה הבאה.
במקום זאת, צריך להשתמש ב-LLDB. הערה:
ndk-gdb
משתמש ב-LLDB כברירת מחדל. - NDK r23 היא הגרסה האחרונה שתתמוך ב-non-Neon. החל מ-NDK r24, ספריות armeabi-v7a ב-sysroot ייבנו עם Neon. מספר קטן מאוד של מכשירים ישנים מאוד לא תומכים ב-Neon, ולכן רוב האפליקציות לא יבחינו בכך, מלבד שיפור הביצועים.
- לא תהיה תמיכה ב-Jelly Bean (ממשקי API 16, 17 ו-18) בגרסה הבאה של NDK. מערכת ההפעלה המינימלית שנתמכת על ידי NDK לגרסה r24 היא KitKat (רמת API 19).
-
הוסר GNU binutils, לא כולל GNU Assembler (GAS). GAS
יוסר בגרסה הבאה. אם אתם משתמשים ב-
Android NDK r22b (מרץ 2021)
יומן שינויים- הורדות
-
- הורדות של הגרסה הזו זמינות כאן.
- הודעות
-
-
הכלי GNU binutils הוצא משימוש ויוסר בגרסה הקרובה של NDK. שימו לב שה-GNU assembler (
as
) is הוא חלק מזה. אם אתם משתמשים ב--fno-integrated-as
, דווחו על באגים אם משהו מונע מכם להסיר את הדגל הזה. אם אתם משתמשים ב-as
ישירות, אתם צריכים להשתמש ב-clang
. - LLD הוא עכשיו ה-linker שמוגדר כברירת מחדל. גם ndk-build וקובץ שרשרת הכלים של CMake עברו לשימוש ב-llvm-ar וב-llvm-strip.
- ndk-gdb משתמש עכשיו ב-lldb כמנפה הבאגים. gdb הוצא משימוש ויוסר בגרסה עתידית. כדי לחזור ל-gdb, משתמשים באפשרות --no-lldb . אבל כדאי לדווח על באג ולציין למה לא הצלחת להשתמש ב-lldb.
-
התמיכה ב-
std::filesystem
כלולה עכשיו. יש שתי בעיות מוכרות:
-
הכלי GNU binutils הוצא משימוש ויוסר בגרסה הקרובה של NDK. שימו לב שה-GNU assembler (
Android NDK r21e LTS (ינואר 2021)
יומן שינויים- הורדות
-
- הורדות של הגרסה הזו זמינות כאן.
- הודעות
-
-
אין יותר תמיכה ב-Windows בגרסת 32-bit. השינוי הזה לא ישפיע על רוב המשתמשים. אם עדיין יש לכם צורך ליצור אפליקציות NDK מגרסאות 32 ביט של Windows, המשיכו להשתמש ב-NDK r20.
מידע נוסף על השינוי הזה בכלי Android למפתחים זמין בפוסט הזה בבלוג.
-
LLD זמין עכשיו לבדיקה.
ב-AOSP נעשה מעבר לשימוש ב-LLD כברירת מחדל, ו-NDK יפעל בהתאם (ציר הזמן לא ידוע). כדי לבדוק את LLD באפליקציה, מעבירים את
-fuse-ld=lld
כשמבצעים קישור. שימו לב: בעיה 843 תשפיע על בנייה באמצעות LLD עם binutils strip ו-objcopy, ולא על llvm-strip ו-llvm-objcopy. -
נתיבי ההתקנה של ערכת הכלים הקודמת יוסרו בגרסאות הבאות. הנתיבים האלה כבר לא רלוונטיים מאז NDK r19, והם תופסים כמות משמעותית של מקום ב-NDK. הנתיבים שיוסרו הם:
- פלטפורמות
- sources/cxx-stl
- sysroot
- toolchains (with the exception of toolchains/llvm)
make_standalone_toolchain.py
(למרות שהסקריפט הזה כבר לא נחוץ מאז r19). מידע על מעבר מפריסת ערכת הכלים מדור קודם זמין במדריך לתחזוקת מערכת ה-Build לגרסת ה-NDK שבה אתם משתמשים. - החל מאוגוסט 2019, כדי להעלות קובץ APK לחנות Play, צריך לוודא שיש תמיכה ב-64 ביט. כדאי להתחיל את הניוד עכשיו כדי להימנע מהפתעות כשמגיע הזמן. מידע נוסף זמין בפוסט הזה בבלוג.
- חבילת אפליקציות ל-macOS שחתומות ומאושרות זמינה עכשיו להורדה מהוויקי ומהאתר שלנו. שימו לב: אפשר להשתמש בנתיבי חיפוש רק בחבילות, ולכן אי אפשר לאמת את חבילת ה-NDK המסורתית ל-macOS. ערכת ה-SDK תמשיך להשתמש בחבילה הרגילה כי קובץ ה-App Bundle דורש שינויים בפריסה שיגרמו לאי-תאימות ל-Android Studio. ה-NDK לא מוכנס להסגר כשהוא מורד דרך SDK Manager, ולכן הוא מותר כרגע על ידי Gatekeeper. מנהל ה-SDK הוא כרגע הדרך הכי מהימנה להשיג את ה-NDK ל-macOS.
-
Android NDK r20b (יוני 2019)
יומן שינויים- הורדות
-
- הורדות של הגרסה הזו זמינות כאן.
- הודעות
-
-
LLD זמין עכשיו לבדיקה.
מערכת AOSP עוברת כרגע לשימוש ב-LLD כברירת מחדל, ו-NDK יעבור בהמשך (ציר הזמן לא ידוע). כדי לבדוק את LLD באפליקציה, מעבירים את הערך
-fuse-ld=lld
כשמבצעים קישור. - החל מאוגוסט 2019, כדי להעלות קובץ APK לחנות Play, צריך לוודא שיש תמיכה ב-64 ביט. כדאי להתחיל את הניוד עכשיו כדי להימנע מהפתעות כשמגיע הזמן. מידע נוסף זמין בפוסט הזה בבלוג.
- נוספו ממשקי Android Q APIs.
-
LLD זמין עכשיו לבדיקה.
מערכת AOSP עוברת כרגע לשימוש ב-LLD כברירת מחדל, ו-NDK יעבור בהמשך (ציר הזמן לא ידוע). כדי לבדוק את LLD באפליקציה, מעבירים את הערך
Android NDK r19c (ינואר 2019)
יומן שינויים- הורדות
-
- הורדות של הגרסה הזו זמינות כאן.
- הודעות
-
-
מפתחים צריכים להתחיל לבדוק את האפליקציות שלהם באמצעות LLD. מערכת AOSP עברה לשימוש ב-LLD כברירת מחדל, ו-NDK ישתמש בו כברירת מחדל בגרסה הבאה. BFD ו-Gold יוסרו אחרי ש-LLD יעבור מחזור הפצה ללא בעיות חמורות שלא נפתרו (ההערכה היא r21). כדי לבדוק את LLD באפליקציה, מעבירים את הערך
-fuse-ld=lld
כשמבצעים קישור. הערה: נכון לעכשיו, lld לא תומך בסמלים דחוסים ב-Windows. בעיה 888. בנוסף, אי אפשר ליצור סמלים דחוסים ב-Windows באמצעות Clang, אבל זה יכול להיות בעייתי כשמשתמשים בארטיפקטים שנבנו מ-Darwin או מ-Linux. - החל מאוגוסט 2019, כדי להעלות קובץ APK לחנות Play, צריך לוודא שיש תמיכה ב-64 ביט. כדאי להתחיל את הניוד עכשיו כדי להימנע מהפתעות כשמגיע הזמן. מידע נוסף זמין בפוסט הזה בבלוג.
-
בעיה מספר 780:
Standalone
toolchains כבר לא נדרשים. Clang, binutils, sysroot ורכיבים אחרים של ערכת הכלים מותקנים עכשיו ב-
$NDK/toolchains/llvm/prebuilt/<host-tag>
ו-Clang ימצא אותם באופן אוטומטי. במקום ליצור שרשרת כלים עצמאית ל-API 26 ARM, אפשר להפעיל את הקומפיילר ישירות מ-NDK: בגרסה r19, שרשרת הכלים מותקנת גם בנתיב הישן כדי לתת למערכות בנייה הזדמנות להתאים את עצמן לפריסה החדשה. הנתיבים הישנים יוסרו בגרסה r20. הסקריפט$ $NDK/toolchains/llvm/prebuilt/
/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.py
לא יוסר. היא כבר לא נחוצה, ותוצג אזהרה עם המידע שלמעלה, אבל הסקריפט יישאר כדי לשמור על תהליכי עבודה קיימים. אם אתם משתמשים ב-ndk-build, ב-CMake או בשרשרת כלים עצמאית, לא אמור להיות שינוי בתהליך העבודה שלכם. השינוי הזה חשוב למנהלים של מערכות build של צד שלישי, כי עכשיו הם יכולים למחוק קוד ספציפי ל-Android. מידע נוסף זמין במדריך Build System Maintainers. - הוסר ndk-depends. אנחנו מאמינים ש-ReLinker הוא פתרון טוב יותר לבעיות בטעינת ספריות מקומיות בגרסאות ישנות של Android.
- בעיה 862: הוסרו סקריפטים של GCC wrapper שהפנו אוטומטית ל-Clang, כי הם לא מספיק פונקציונליים כדי לשמש כתחליפים.
-
מפתחים צריכים להתחיל לבדוק את האפליקציות שלהם באמצעות LLD. מערכת AOSP עברה לשימוש ב-LLD כברירת מחדל, ו-NDK ישתמש בו כברירת מחדל בגרסה הבאה. BFD ו-Gold יוסרו אחרי ש-LLD יעבור מחזור הפצה ללא בעיות חמורות שלא נפתרו (ההערכה היא r21). כדי לבדוק את LLD באפליקציה, מעבירים את הערך
Android NDK r18b (ספטמבר 2018)
יומן שינויים- הורדות
-
- הורדות של הגרסה הזו זמינות כאן.
- הודעות
-
- הוסר GCC.
-
LLD זמין עכשיו לבדיקה.
מערכת AOSP עוברת כרגע לשימוש ב-LLD כברירת מחדל, ו-NDK יעבור בהמשך (ציר הזמן לא ידוע). כדי לבדוק את LLD באפליקציה, מעבירים את הערך
-fuse-ld=lld
כשמבצעים קישור. - הוסרו gnustl, gabi++ ו-stlport.
- הוסרה התמיכה ב-ICS (android-14 ו-android-15). אפליקציות שמשתמשות בקובצי הפעלה לא צריכות יותר לספק קובץ הפעלה מסוג PIE וקובץ הפעלה מסוג non-PIE.
- החל מאוגוסט 2019, כדי להעלות קובץ APK לחנות Play, צריך לוודא שיש תמיכה ב-64 ביט. כדאי להתחיל את הניוד עכשיו כדי להימנע מהפתעות כשמגיע הזמן. מידע נוסף זמין בפוסט הזה בבלוג.
Android NDK r17c (יוני 2018)
יומן שינויים- הורדות
-
- הורדות של הגרסה הזו זמינות כאן.
- הודעות
-
- אין יותר תמיכה ב-GCC. היא תוסר ב-NDK r18.
-
libc++ היא עכשיו STL שמוגדר כברירת מחדל ב-CMake ובשרשרות כלים עצמאיות. אם
בחרתם ידנית STL אחר, מומלץ מאוד לעבור אל
libc++
. הערה: ndk-build עדיין מוגדר כברירת מחדל ללא STL. פרטים נוספים זמינים בפוסט הזה בבלוג. - הספריות gnustl ו-stlport הוצאו משימוש ויוסרו ב-NDK r18.
- הוסרה התמיכה ב-ARMv5 (armeabi), MIPS ו-MIPS64. ניסיון ליצור ABI כלשהו מהרשימה הזו יוביל לשגיאה.
- התמיכה ב-ICS (android-14 ו-android-15) תוסר מ-r18.
- החל מאוגוסט 2019, כדי להעלות קובץ APK לחנות Play, צריך לוודא שיש תמיכה ב-64 ביט. כדאי להתחיל את הניוד עכשיו כדי להימנע מהפתעות כשמגיע הזמן. מידע נוסף זמין בפוסט הזה בבלוג.
Android NDK r16b (דצמבר 2017)
יומן שינויים- הורדות
- הורדות של הגרסה הזו זמינות כאן.
- הודעות
-
- הכותרות שהוצאו משימוש הוסרו. הכותרות המאוחדות נקראות עכשיו פשוט 'הכותרות'. טיפים להעברה זמינים במאמר הערות בנושא העברת כותרות מאוחדות.
- אין יותר תמיכה ב-GCC. היא לא תוסר מה-NDK בשלב הזה, אבל לא יתבצעו יותר העברות של תיקוני באגים מגרסאות חדשות לגרסאות קודמות. אי אפשר להסיר אותו עד ש-libc++ יהיה יציב מספיק כדי להיות ברירת המחדל, כי חלקים מסוימים ב-gnustl עדיין לא תואמים ל-Clang. הוא יוסר כששאר קובצי ה-STL יוסרו בגרסה r18.
-
libc++
יצאה משלב הבטא ועכשיו היא ספריית ה-STL המועדפת ב-NDK. החל מגרסה r17, libc++
היא ספריית STL שמוגדרת כברירת מחדל עבור CMake ושרשרות כלים עצמאיות. אם בחרתם ידנית STL אחר, מומלץ מאוד לעבור אלlibc++
. פרטים נוספים זמינים בפוסט הזה בבלוג. - התמיכה ב-ARM5 (armeabi), MIPS ו-MIPS64 הוצאה משימוש. הם לא ייבנו יותר כברירת מחדל באמצעות ndk-build, אבל עדיין אפשר לבנות אותם אם מציינים את השם שלהם באופן מפורש, והם ייכללו ב-all, ב-all32 וב-all64. התמיכה בכל אחד מהם הוסרה בגרסה r17. גם CMake וגם ndk-build יציגו אזהרה אם תגדירו את אחד מ-ABI האלה כיעד.
- ממשקי API
-
נוספו ממשקי API מקוריים ל-Android 8.1. מידע נוסף על ממשקי ה-API האלה זמין במאמר סקירה כללית על ממשקי API מקוריים.
למידע נוסף על מה חדש ומה השתנה בגרסה הזו, אפשר לעיין ביומן השינויים.
Android NDK r15c (יולי 2017)
יומן שינויים- הורדות
- הורדות של הגרסה הזו זמינות כאן.
- הודעות
-
- כותרות מאוחדות מופעלות כברירת מחדל. מידע נוסף על השימוש בכותרות האלה זמין במאמר כותרות מאוחדות.
- אין יותר תמיכה ב-GCC. הוא עדיין לא הוסר מ-NDK, אבל הוא כבר לא מקבל תיקוני באגים. אי אפשר להסיר אותו עד ש-libc++ יתייצב מספיק כדי להיות ברירת המחדל, כי חלקים מסוימים של gnustl עדיין לא תואמים ל-Clang.
- אין יותר תמיכה ב-Android 2.3 (
android-9
). רמת ה-API המינימלית לטירגוט ב-NDK היא עכשיו Android 4.0 (android-14
). אם הערך שלAPP_PLATFORM
מוגדר כערך נמוך מ-android-14
, נעשה שימוש ב-android-14
במקום זאת. - CMake ב-NDK תומך עכשיו בבניית קוד אסמבלי שנכתב ב-YASM להפעלה בארכיטקטורות x86 ו-x86-64. מידע נוסף זמין במאמר בנושא יצירת קוד אסמבלי.
הערה: הכותרות שהוצאו משימוש יוסרו בגרסה הקרובה. אם נתקלתם בבעיות בכותרות האלה, אתם יכולים לשלוח באג.
טיפים להעברה זמינים בהערות בנושא העברת כותרות מאוחדות.
- ממשקי API
-
נוספו ממשקי API מקוריים ל-Android 8.0. מידע נוסף על ממשקי ה-API האלה זמין במאמר סקירה כללית על ממשקי API מקוריים.
למידע נוסף על מה חדש ומה השתנה בגרסה הזו, אפשר לעיין ביומן השינויים.
Android NDK r14b (מרץ 2017)
יומן שינויים- הורדות
- הורדות של הגרסה הזו זמינות כאן.
- הודעות
-
- כותרות מאוחדות: בגרסה הזו מוצגות כותרות פלטפורמה שמסונכרנות ומתעדכנות תמיד באופן מדויק עם פלטפורמת Android. תיקוני באגים שקשורים לכותרות בלבד משפיעים עכשיו על כל רמות ה-API. הוספנו כותרות מאוחדות כדי לתקן חוסר עקביות בגרסאות קודמות של NDK, כמו:
- הכותרות בעמודות M ו-N היו למעשה כותרות של עמודה L.
- ההצהרות על פונקציות בכותרות לא תאמו לרמות הפלטפורמה שלהן בצורה נכונה; הכותרות הכריזו על פונקציות שלא קיימות או שלא הכריזו על פונקציות שזמינות.
- בכמה רמות API יש קבועים חסרים או שגויים, שקיימים ברמות API חדשות יותר.
הכותרות המאוחדות החדשות האלה לא מופעלות כברירת מחדל. במאמר כותרות מאוחדות מוסבר איך להפעיל את הכותרות האלה ואיך להשתמש בהן.
- הוצאה משימוש של GCC: בגרסה הזו מסתיימת התמיכה הפעילה ב-GCC. GCC עדיין לא מוסר מ-NDK, אבל לא יתקבלו יותר תיקונים לגרסאות קודמות. חלקים מסוימים ב-gnustl עדיין לא תואמים ל-Clang, ולכן לא נסיר את GCC לגמרי עד ש-libc++ יהיה יציב מספיק כדי להיות ברירת המחדל.
- כותרות מאוחדות: בגרסה הזו מוצגות כותרות פלטפורמה שמסונכרנות ומתעדכנות תמיד באופן מדויק עם פלטפורמת Android. תיקוני באגים שקשורים לכותרות בלבד משפיעים עכשיו על כל רמות ה-API. הוספנו כותרות מאוחדות כדי לתקן חוסר עקביות בגרסאות קודמות של NDK, כמו:
למידע נוסף על מה חדש ומה השתנה בגרסה הזו, אפשר לעיין ביומן השינויים.
Android NDK r13b (אוקטובר 2016)
- הורדות
- ההורדות של הגרסה הזו נמצאות בארכיון כאן.
- הודעות
-
- אין יותר תמיכה ב-GCC. היא לא תוסר מה-NDK בשלב הזה, אבל לא יתבצעו יותר העברות של תיקוני באגים (backports). אי אפשר להסיר אותו עד ש-libc++ יהיה יציב מספיק כדי להיות ברירת המחדל, כי חלקים מסוימים של gnustl עדיין לא תואמים ל-Clang. סביר להניח שהיא תוסר אחרי השלב הזה.
- נוסף simpleperf, כלי לניתוח ביצועי ה-CPU ל-Android.
- r13b
-
-
תיקונים נוספים ל-
__cxa_bad_cast
חסר.
-
תיקונים נוספים ל-
- NDK
-
- ברירת המחדל של
NDK_TOOLCHAIN_VERSION
היא עכשיו Clang. - libc++ עודכן ל-r263688.
- ביצענו איפוס ל-upstream (כמעט) נקי. הפעולה הזו אמורה להסיר מספר באגים, אבל עדיין צריך לנקות את libandroid_support לפני שנוכל להמליץ עליה כברירת מחדל.
-
make-standalone-toolchain.sh
הוא עכשיו פשוט עטיפה מסביב לגרסת Python של הכלי. יש כמה הבדלים בהתנהגות. פרטים נוספים זמינים בהודעת השמירה. - הוסרו ספריות מסוימות של ממשקי ABI שלא נתמכים (mips64r2, mips32r6, mips32r2 ו-x32). יכול להיות שעדיין יש כמה משתמשים שלא נמחקו.
- נפתרו בעיות ב-crtbegin_static.o שגרמו לכך ש-atexit לא היה זמין בזמן הקישור כשבונים קובץ הפעלה סטטי ל-ARM android-21+: בעיה 132
- נוסף קובץ CMake toolchain ב-build/cmake/android.toolchain.cmake.
- ברירת המחדל של
- בעיות מוכרות
-
- זו לא רשימה מלאה של כל הבאגים הפתוחים.
- ערכות כלים עצמאיות שמשתמשות ב-libc++ וב-GCC לא פועלות. נראה שמדובר בבאג ב-GCC. פרטים נוספים זמינים בהודעת השמירה.
- עדיין לא נחשפו כותרות וספריות של Bionic ל-Marshmallow ול-N למרות הנוכחות של android-24. הפלטפורמות האלה הן עדיין הכותרות והספריות של Lollipop (לא מדובר בנסיגה מ-r11).
- הכלים של RenderScript לא קיימים (לא מדובר בבאג שנוצר בגרסה r11): Issue 7.
Android NDK r12b (יוני 2016)
- הורדות
- ההורדות של הגרסה הזו נמצאות בארכיון כאן.
- הודעות
- כברירת מחדל, הפקודה
ndk-build
משתמשת ב-Clang בגרסה r13. נפסיק את התמיכה ב-GCC בגרסה הבאה. - הסקריפט
make-standalone-toolchain.sh
יוסר בגרסה r13. מוודאים ש-make_standalone_toolchain.py
מתאים לצרכים שלכם. - דיווח על בעיות ב-GitHub.
- תיקנו את
ndk-gdb.py
. (בעיה מספר 118) -
עדכנו את
NdkCameraMetadataTags.h
כך שהוא לא יכיל יותר ערך enum לא תקין. - תוקן באג ב-ndk-build שגרם להצגת אזהרות שגויות לגבי ספריות סטטיות שמשתמשות ב-libc++. מידע נוסף על השינוי הזה זמין בתגובות כאן.
- הכותרות של OpenSLES עודכנו עבור android-24.
- NDK
- הסרנו את התמיכה ב-ABI armeabi-v7a-hard. מידע נוסף זמין בהסבר הזה.
- הוסרו כל sysroots לרמות פלטפורמה שלפני GB. הפסקנו את התמיכה בהם בגרסה r11, אבל לא הסרנו אותם בפועל.
- טיפול בחריגים כשמשתמשים ב-c++_shared ב-ARM32 פועל עכשיו ברוב המקרים. ה-unwinder יקושר עכשיו לכל אובייקט מקושר ולא ל-libc++ עצמו. מידע נוסף על הטיפול בחריגים האלה זמין במאמר בעיות מוכרות.
- הוסרו דגלים של קומפיילר שמוגדרים כברירת מחדל.
(בעיה מספר 27).
- מידע מלא על השינויים האלה זמין ברשימת השינויים הזו.
- נוספה הטמעה של Python של שרשראות כלים עצמאיות:
build/tools/make_standalone_toolchain.py
.- משתמשי Windows לא צריכים יותר את Cygwin כדי להשתמש בתכונה הזו.
- אנחנו נסיר את טעם ה-bash בגרסה r13, לכן כדאי לבדוק את הגרסה החדשה עכשיו.
- האפשרות
-fno-limit-debug-info
מופעלת כברירת מחדל בגרסאות ניפוי באגים של Clang. השינוי הזה אמור לשפר את יכולת הניפוי באגים באמצעות LLDB. - ההגדרה
--build-id
מופעלת עכשיו כברירת מחדל.- מזהה ה-Build יוצג עכשיו בדוחות קריסה מקוריים, כדי שתוכלו לזהות בקלות איזו גרסה של הקוד שלכם פעלה.
NDK_USE_CYGPATH
לא אמור לגרום יותר לבעיות ב-libgcc. (Android בעיה 195486)- האפשרויות
-Wl
,--warn-shared-textrel
ו--Wl,--fatal-warnings
מופעלות עכשיו כברירת מחדל. אם שיתפתם העברות טקסט, אי אפשר לטעון את האפליקציה ב-Android 6.0 (רמת API 23) ואילך. מעולם לא הייתה אפשרות להעביר טקסט באפליקציות 64 ביט. - כותרות הידור מראש אמורות לפעול טוב יותר. (בעיה מספר 14 ובעיה מספר 16)
- הוסרו ספריות STL של ARM (לא thumb) שלא ניתן להגיע אליהן.
- הוספנו תמיכה ב-Vulkan ל-android-24.
- הוספנו את Choreographer API ל-android-24.
- הוספנו ממשקי API למכשירים עם
libcamera2
או גרסה מתקדמת יותר.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
מידע נוסף זמין במאמר מאפייני המצלמה. - Clang
- Clang עודכן לגרסה 3.8svn (r256229, build 2812033).
- קובצי ההפעלה
clang.exe
ו-clang++.exe
בחבילת Windows של 32 ביט הם למעשה 64 ביט. קובץ ההפעלה של 32 ביט נקראclang_32.exe
.
הפעם, - קובצי ההפעלה
- GCC
- הסנכרון עם ChromeOS GCC @ google/gcc-4_9 r227810.
- תיקון לניקוי כיסוי שהועבר מ-ToT (r231296).
- תוקן libatomic כך שלא ישתמש ב-
ifuncs
. (בעיה מספר 31) - Binutils
- השתקנו הודעות מידע מסוג Erratum 843419 found and fixed.
- הוספנו את האפשרות
--long-plt
לתיקון שגיאת מקשר פנימית שמתרחשת כשמבצעים קישור של קבצים בינאריים גדולים של arm32. - תוקנו קטעי קוד שגויים של זמן ריצה עבור AArch64. הדבר גרם לחישוב שגוי של כתובות קפיצה עבור רשתות גדולות מאוד של תחנות שידור.
- הוספנו את אפשרות ברירת המחדל
--no-apply-dynamic
כדי לעקוף באג במקשר הדינמי בגרסאות קודמות של Android. - NDK r11 KI ל-
dynamic_cast
לא פועל עם Clang. תיקנו בעיות שקשורות ל-x86,stlport_static
ולאופטימיזציה. - GDB
- עודכן ל-GDB 7.11. מידע נוסף זמין בדף GDB News.
- תיקנו כמה באגים ב-
ndk-gdb.py
. - בעיות מוכרות
- x86 ASAN עדיין לא פועל. מידע נוסף זמין בדיון על רשימת השינויים הזו.
- הסרת חריגים באמצעות
c++_shared
עדיין לא פועלת ב-ARM ב-Android 2.3 (רמת API 9) או ב-Android 4.0 (רמת API 14). - הכותרות והספריות של Bionic ל-Android 6.0 (רמת API 23) ול-Android 7.0 (רמת API 24) עדיין לא נחשפות למרות הנוכחות של android-24. הפלטפורמות האלה הן עדיין הכותרות והספריות של Android 5.0 (רמת API 21) (לא מדובר בנסיגה מגרסה r11).
- הכלים של RenderScript לא קיימים (לא מדובר ברגרסיה מגרסה r11). (בעיה 7)
- יומן השינויים הזה לא אמור להיות רשימה מקיפה של כל הבאגים שלא נפתרו.
__thread
אמור לפעול באמת.
Android NDK r12 (יוני 2016)
- הורדות
- ההורדות של הגרסה הזו נמצאות בארכיון כאן.
- הודעות
- בגרסה הקרובה, הפקודה
ndk-build
תשתמש ב-Clang כברירת מחדל. GCC יוסר בגרסה מאוחרת יותר. - סקריפט
make-standalone-toolchain.sh
יוסר בגרסה הקרובה. אם אתם משתמשים בסקריפט הזה, מומלץ לתכנן מעבר ל-make_standalone_toolchain.py
בהקדם האפשרי. - NDK
- הוסרה התמיכה ב-ABI armeabi-v7a-hard. הסבר מפורט מופיע ב מסמכי התיעוד.
- הוסרו כל sysroots לרמות פלטפורמה שקודמות ל-Android 2.3 (רמת API 9). הפסקנו את התמיכה בהן ב-NDK r11, אבל לא הסרנו אותן בפועל.
- עודכן הטיפול בחריגים כשמשתמשים ב-c++_shared ב-ARM32, כך שרוב הפעולות פועלות (ראו בעיות מוכרות). ה-unwinder מקושר עכשיו לכל אובייקט מקושר ולא ל-libc++ עצמו.
- הוסרו דגלי המהדר שמוגדרים כברירת מחדל (NDK Issue 27). פרטים על העדכון הזה מופיעים בשינוי 207721.
- הוספנו הטמעה של Python לשרשראות כלים עצמאיות ב-
build/tools/make_standalone_toolchain.py
. ב-Windows, כבר לא צריך את Cygwin כדי להשתמש בתכונה הזו. שימו לב: בקרוב נסיר את גרסת ה-bash, לכן מומלץ לבדוק את הגרסה החדשה כבר עכשיו. - הגדרנו שגרסאות Clang לניפוי באגים יכללו את האפשרות
-fno-limit-debug-info
כברירת מחדל. השינוי הזה מאפשר ניפוי באגים טוב יותר באמצעות LLDB. - הפעלנו את
--build-id
כאפשרות ברירת מחדל. האפשרות הזו גורמת להצגת מזהה בדוחות קריסה מקוריים, כדי שתוכלו לזהות בקלות איזו גרסה של הקוד שלכם פעלה. - תוקנה בעיה ב-
NDK_USE_CYGPATH
כך שהיא לא גורמת יותר לבעיות ב-libgcc (בעיה 195486). - האפשרויות הבאות מופעלות כברירת מחדל:
-Wl,--warn-shared-textrel
ו--Wl,--fatal-warnings
. אם יש לכם העברות טקסט משותפות, האפליקציה לא נטענת ב-Android 6.0 (רמת API 23) ואילך. חשוב לדעת שההגדרה הזו אף פעם לא הייתה מותרת לאפליקציות 64 ביט. - תוקנו כמה בעיות כדי שכותרות שעברו קומפילציה מראש יפעלו בצורה טובה יותר (NDK Issue 14, NDK Issue 16).
- הוסרו ספריות STL של ARM (לא thumb) שלא ניתן להגיע אליהן.
- הוספנו תמיכה ב-Vulkan ל-android-24.
- נוסף Choreographer API ל-android-24.
- הוספנו libcamera2 APIs למכשירים שתומכים ברמת התכונה
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
ומעלה. מידע נוסף זמין במאמר בנושאCameraCharacteristics
. - Clang
- Clang עודכן לגרסה 3.8svn (r256229, build 2812033). קובצי ההפעלה
clang.exe
ו-clang++.exe
בחבילת Windows של 32 ביט הם למעשה 64 ביט. קובץ ההפעלה של 32 ביט נקראclang_32.exe
. - תוקנה הבעיה ב-
__thread
, ועכשיו היא פועלת כמו שצריך. - GCC
- הקומפיילר סונכרן עם ChromeOS GCC @ google/gcc-4_9 r227810.
- תיקון לניקוי כיסוי שהועבר מ-ToT (r231296).
- תוקנה בעיה שגרמה ל-
libatomic
לא להשתמש ב-ifuncs (NDK Issue 31). - Binutils
- השתקנו את הודעות המידע 'נמצאה שגיאה מספר 843419 ותוקנה'.
- הוספנו את האפשרות
--long-plt
לתיקון שגיאת מקשר פנימית בקישור של קבצים בינאריים גדולים של arm32. - תוקנו קטעי קוד של זמן ריצה שגויים עבור
AArch64
. הבעיה הזו גרמה לחישוב שגוי של כתובות דילוג עבור אובייקטים דינמיים משותפים (DSO) גדולים מאוד. - הוספנו את אפשרות ברירת המחדל
--no-apply-dynamic
כדי לעקוף באג במקשר דינמי בגרסאות קודמות של Android. - תוקנה בעיה ידועה ב-NDK r11 שבה
dynamic_cast
לא פעל עם Clang, x86, stlport_static ואופטימיזציה. - GDB
- הגרסה עודכנה ל-GDB 7.11. פרטים נוספים על הגרסה הזו זמינים בחדשות GDB.
- תוקנו מספר באגים בסקריפט
ndk-gdb.py
. - בעיות מוכרות
- בשלב הזה, Address Sanitizer (ASAN) של x86 לא פועל. מידע נוסף זמין במאמר בנושא בעיה מספר 186276.
- הסרת חריגים באמצעות
c++_shared
לא פועלת ב-ARM ב-Android 2.3 (רמת API 9) או ב-Android 4.0 (רמת API 14). - כותרות וספריות של Bionic ל-Android 6.0 (רמת API 23) ומעלה עדיין לא נחשפות למרות הנוכחות של android-24. בפלטפורמות האלה עדיין יש כותרות וספריות של Android 5.0 (רמת API 21), וזה עולה בקנה אחד עם NDK r11.
- הכלים של RenderScript לא קיימים, וזה תואם ל-NDK r11. (בעיה מספר 7 ב-NDK)
- בקובץ הכותרת
NdkCameraMetadataTags.h
, ערך ה-enum של תג המטא-נתונים של המצלמהACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
נכלל בטעות ויוסר בגרסה הבאה. במקום זאת, צריך להשתמש בערךACAMERA_STATISTICS_LENS_SHADING_MAP
.
Android NDK r11c (מרץ 2016)
- שינויים
- הוחלו תיקונים נוספים על סקריפט
ndk-gdb.py
. - נוסף ארגומנט אופציונלי של שם חבילה לאפשרות
ndk-gdb
של הפקודה--attach
. (בעיה מספר 13) - תוקנו נתיבים לא תקינים של ערכת כלים לפלטפורמת Windows 32-bit. (בעיה מספר 45)
- תוקן הנתיב היחסי לפקודה
ndk-which
. (בעיה מספר 29) - תוקן השימוש ב-cygpath עבור המהדר libgcc. (Android Issue 195486)
Android NDK r11b (מרץ 2016)
- NDK
-
- הודעות חשובות
- העברנו את הכלי שלנו למעקב אחר באגים אל GitHub.
- שינויים
- הבעיה
ndk-gdb.py
תוקנה. הוא התדרדר לחלוטין בגרסה r11. -
ndk-gdb
ל-Mac תוקן. - הוספנו עוד קיצורי דרך ברמה העליונה לכלי שורת הפקודה:
ndk-depends
.ndk-gdb
.ndk-stack
.ndk-which
. הפקודה הזו לא הייתה קיימת בכלל בגרסאות קודמות.
- תוקנו שרשראות כלים עצמאיות עבור libc++, שהיו חסרות
__cxxabi_config.h
. - תוקנו מסמכי העזרה של
--toolchain
ב-make-standalone-toolchain.sh
.
- הבעיה
- הודעות חשובות
- Clang
-
- תיקוני שגיאות
- בניגוד למה שדיווחנו בהערות לגרסה r11, הפונקציה
__thread
לא פועלת. הסיבה לכך היא שבגרסה של Clang שאנחנו שולחים חסר תיקון באג לתמיכה מדומה ב-TLS.
Android NDK r11 (מרץ 2016)
- Clang
-
- הודעות חשובות
- מומלץ מאוד לעבור ל-Clang.
- Clang עודכן לגרסה 3.8svn (r243773, build 2481030).
- הגרסה הזו היא כמעט Clang טהור במעלה הזרם.
- חבילת ה-NDK להורדה ל-Windows בגרסת 64 ביט מכילה גרסת 32 ביט של Clang.
- תוספות
- Clang כולל עכשיו תמיכה ב-TLS מדומה.
- הקומפיילר תומך עכשיו ב-
__thread
באמצעות הדמיה של ELF TLS עם נתונים ספציפיים לשרשור pthread. - C++11
thread_local
פועל במקרים מסוימים, אבל לא עבור נתונים עם דסטרקטורים לא טריוויאליים, כי במקרים האלה נדרשת תמיכה מ-libc. המגבלה הזו לא חלה כשמריצים את האפליקציה ב-Android 6.0 (רמת API 23) ומעלה. - הדמיית TLS עדיין לא פועלת עם Aarch64 כשניגשים למשתני TLS מספרייה משותפת.
- הקומפיילר תומך עכשיו ב-
- Clang כולל עכשיו תמיכה ב-TLS מדומה.
- הודעות חשובות
- GCC
-
- הודעות חשובות
- הוצאנו משימוש את GCC ב-NDK לטובת Clang.
- ה-NDK לא ישודרג לגרסה 5.x, ולא יקבל תיקוני באגים לא קריטיים.
- תחזוקה של שגיאות קומפילציה ושגיאות פנימיות בקומפיילר בגרסה 4.9 תטופל על בסיס כל מקרה לגופו.
- הסרות
- הוסרה גרסה GCC 4.8. כל היעדים משתמשים עכשיו ב-GCC 4.9.
- שינויים אחרים
- בוצע סנכרון של google/gcc-4_9 עם r224707. בעבר, הוא סונכרן עם r214835.
- NDK
-
- הודעות חשובות
- הדוגמאות כבר לא נכללות בחבילת ה-NDK. במקום זאת, הם זמינים ב-GitHub.
- התיעוד כבר לא נכלל בחבילת ה-NDK. במקום זאת, הוא מופיע באתר למפתחי Android.
- תוספות
- הוספנו ל-
android-23
API מקורי למעקב. - הוספנו API מקורי לריבוי רשתות ל-
android-23
. - הפעלנו את libc, m ו-dl כדי לספק סמלים עם גרסאות, החל מרמת API 21.
- נוספו כותרות וספרייה של Vulkan לרמת API N.
- הוספנו ל-
- הסרות
- הוסרה התמיכה ב-
_WCHAR_IS_8BIT
. - הוסר sed.
- הוסר mclinker.
- הוסר Perl.
- הוסרו מכל הגרסאות של NDK libc, m ו-dl כל הסמלים שגרסאות הפלטפורמה של הספריות האלה לא תומכות בהם.
- הוסרה תמיכה חלקית ב-mips64r2. שאר האפשרויות יוסרו בעתיד.
- הוסרה התמיכה ב-
- שינויים אחרים
- הגדרנו כברירת מחדל את arm7 בשרשראות כלים עצמאיות של ARM.
- כדי לשחזר את ההתנהגות הקודמת, צריך להעביר את האפשרות
-target
כ-armv5te-linux-androideabi
.
- כדי לשחזר את ההתנהגות הקודמת, צריך להעביר את האפשרות
- מערכת ה-build שונתה כך שהיא משתמשת ב-
-isystem
כדי לכלול פלטפורמות.- אזהרות ש-bionic גורם להן כבר לא משבשות את בניית האפליקציות.
- תוקנה שגיאת חלוקת זיכרון (segfault) שהתרחשה כשקובץ בינארי העלה חריגים דרך gabi++. (בעיה 179410)
- השם של מרחב השמות המוטבע של libc++ השתנה ל-
std::__ndk1
כדי למנוע בעיות ODR ב-libc++ של הפלטפורמה. - כל ספריות libc++ נבנות עכשיו באמצעות libc++abi.
- הגרסה שמוגדרת כברירת מחדל
APP_PLATFORM
שודרגה ל-Gingerbread.- התמיכה ב-Froyo ובגרסאות ישנות יותר תוסר בגרסה עתידית.
- הגדרנו כברירת מחדל את arm7 בשרשראות כלים עצמאיות של ARM.
- מבנה gabi++
_Unwind_Exception
עודכן ל-64 ביט. - הוספנו את היכולות הבאות ל-cpufeatures:
- זיהוי של SSE4.1 ו-SSE4.2.
- זיהוי תכונות של מעבד ב-x86_64.
- libc++abi עודכן לגרסה העדכנית ביותר r231075.
- עודכנו
byteswap.h
,endian.h
,sys/procfs.h
,sys/ucontext.h
,sys/user.h
ו-uchar.h
מ-ToT Bionic. - מסונכרן
sys/cdefs.h
בכל רמות ה-API. - תוקן
fegetenv and fesetenv
עבור זרוע. - תיקון הגודל או היישור של מצביע הסיום של
crtend_*
עבור mips64 ו-x86_64.
- הודעות חשובות
- Binutils
-
- תוספות
- נוספה אפשרות חדשה:
--pic-veneer
.
- נוספה אפשרות חדשה:
- הסרות
- חבילת Windows בגרסת 32 ביט כבר לא מכילה ld.gold. במקום זאת, אפשר לקבל את ld.gold מחבילת Windows של 64 ביט.
- שינויים
- מקור מאוחד של binutils בין Android ו-ChromiumOS. מידע נוסף על השינוי הזה זמין בתגובות כאן.
- שיפור המהימנות של Gold עבור aarch64. משתמשים ב-
-fuse-ld=gold
בזמן הקישור כדי להשתמש ב-gold במקום ב-bfd. סביר להניח שברירת המחדל תשתנה בגרסה הבאה. - קיצור זמן הקישור לקבצים בינאריים גדולים מאוד עבור קצה העורפי של Gold ARM (עד 50% קיצור זמן הקישור לדפדפן Chrome שניתן לניפוי באגים).
- תוספות
- GDB
-
- הסרות
- הסרנו את ndk-gdb לטובת ndk-gdb.py.
- שינויים
- גרסת gdb עודכנה ל-7.10.
- שיפור הביצועים.
- שיפרנו את הודעות השגיאה.
- נתיבי פרויקט יחסיים קבועים.
- הפסקנו את האפשרות להשתמש ב-Ctrl-C כדי להפסיק את gdbserver שפועל ברקע.
- שיפור התמיכה ב-Windows.
- הסרות
- YASM
-
- שינויים
- גרסת YASM עודכנה ל-1.3.0.
- שינויים
- בעיות מוכרות
-
- בשלב הזה, x86 ASAN לא פועל. מידע נוסף זמין בדיון כאן.
- השילוב של Clang, x86, stlport_static ורמות אופטימיזציה גבוהות מ-
-O0
גורם לכשלים בבדיקות עםdynamic_cast
. מידע נוסף זמין בתגובות כאן. - טיפול בחריגים נכשל לעיתים קרובות ב-c++_shared ב-ARM32. הסיבה הבסיסית היא חוסר תאימות בין הכלי לביטול הערימה של LLVM שמשמש את libc++abi עבור ARM32 לבין libgcc. ההתנהגות הזו לא נובעת מרגרסיה מ-r10e.
Android NDK r10e (מאי 2015)
- הורדות
- ההורדות של הגרסה הזו נמצאות בארכיון כאן.
- שינויים חשובים:
-
- שילבנו את הפתרון הזמני ל-Cortex-A53 Erratum 843419 ב-
aarch64-linux-android-4.9
linker. מידע נוסף על הפתרון העקיף הזה זמין במאמר Workaround for cortex-a53 erratum 843419. - נוספה גרסה Clang 3.6;
NDK_TOOLCHAIN_VERSION=clang
בוחרת עכשיו בגרסה הזו של Clang כברירת מחדל. - הוסר Clang 3.4.
- הוסר GCC 4.6.
- הטמענו תמיכה בריבוי שרשורים ב-
ld.gold
לכל הארכיטקטורות. מעכשיו אפשר לקשר אותו עם או בלי תמיכה בריבוי תהליכים. ברירת המחדל היא לקשר אותו בלי תמיכה כזו.- כדי לבצע קומפילציה עם ריבוי שרשורים, משתמשים באפשרות
--threads
. - כדי לבצע קומפילציה בלי ריבוי שרשורים, משתמשים באפשרות
--no-threads
.
- כדי לבצע קומפילציה עם ריבוי שרשורים, משתמשים באפשרות
- שודרגו GDB/gdbserver לגרסה 7.7 לכל הארכיטקטורות.
- הוסרה חבילת NDK עבור Darwin בגרסת 32 ביט.
- שילבנו את הפתרון הזמני ל-Cortex-A53 Erratum 843419 ב-
- תיקוני באגים חשובים:
-
- תוקנה קריסה שהתרחשה כשהיו לולאות OpenMP מחוץ ל-thread הראשי.
- תוקנה שגיאה פנימית של מהדר GCC 4.9 (ICE) שהתרחשה כשהמשתמש הצהיר על
#pragma GCC optimize ("O0")
, אבל ציין רמת אופטימיזציה שונה בשורה של פקודת הפעלה. המדיניותpragma
מקבלת עדיפות. - תוקנה שגיאה שגרמה לקריסה עם הודעת השגיאה הבאה:
in add_stores, at var-tracking.c:6000
- הוטמע פתרון עקיף לבעיה ב-Clang 3.5 שבה וקטוריזציה אוטומטית של LLVM יוצרת את
llvm.cttz.v2i64()
, הוראה ללא מקבילה בערכת ההוראות של ARM.
- תיקוני באגים אחרים:
-
- בוצעו התיקונים הבאים בכותרת ובספרייה:
- הבעיה
PROPERTY_*
נפתרה ב-media/NdkMediaDrm.h
. - תוקן
sys/ucontext.h
עבורmips64
. - הוסרה בדיקת הגרסה של Clang עבור
__builtin_isnan
ו-__builtin_isinf
. - הוספת את
android-21/arch-mips/usr/include/asm/reg.h
ואתandroid-21/arch-mips64/usr/include/asm/reg.h
. - תוקנה אזהרה שגויה לגבי גבולות מערך שנוצרה על ידי GCC 4.9 עבור x86, והופעלה מחדש האזהרה לגבי גבולות מערך שנוצרה על ידי GCC 4.9 עבור ARM. האזהרה לגבי ARM הושבתה בעבר ללא תנאי.
- תוקן Clang 3.5 עבור
mips
ו-mips64
כדי ליצור קטע.gcc_except_table
שניתן לכתיבה, וכך להתאים להתנהגות של GCC. השינוי הזה מאפשר לכם להימנע מאזהרת המקשר הבאה:.../ld: warning: creating a DT_TEXTREL in a shared object
- הוספנו תיקון לבעיות ב-
compiler-rt
שגרמו לקריסות כש-Clang הידור ל-mips64
. מידע נוסף זמין בבעיה מספר 20098 ב-LLVM. - תוקנו קריסות של Clang 3.5 שהתרחשו בתגובות שלא נכללות ב-ASCII. (בעיה מספר 81440)
- תוקן
stlport collate::compare
כדי להחזיר-1
ו-1
. בעבר, הפונקציה החזירה מספרים שרירותיים עם סימן. - תוקן
ndk-gdb
עבור ממשקי ABI של 64 ביט. (בעיה מספר 118300) - תוקנה הקריסה שדוגמת HelloComputeNDK עבור RenderScript יצרה ב-Android 4.4 (רמת Android API 19). מידע נוסף זמין בדף הזה.
- תוקן
libc++ __wrap_iter
עבור GCC. מידע נוסף זמין בבעיה מספר 22355 ב-LLVM. - תוקנה התמיכה ב-
.asm
עבור ABIx86_64
. - הטמענו פתרון עקיף לבעיה
stlport
ב-GCC 4.8. (בעיה מספר 127773) - הוסר תו נתיב התיקייה
\\
בסוף נתיב הפרויקט ב-Windows. (בעיה 160584) - תוקנה שגיאת
no rule to make target
שהתרחשה בזמן קומפילציה של קובץ.c
יחיד על ידי הפעלת הפקודהndk-build.cmd
מ-gradle
. (בעיה מספר 66937) - נוספו הספריות
libatomic.a
ו-libgomp.a
שהיו חסרות בערכות הכלים הבאות של המארח:aarch64-linux-android-4.9
mips64el-linux-android-4.9
mipsel-linux-android-4.9
x86_64-4.9
- שינויים אחרים:
-
- הוספת
ld.gold
ל-aarch64
. קישור ברירת המחדל נשארld.bfd
. כדי להפעיל אתld.gold
באופן מפורש, מוסיפים את-fuse-ld=gold
למשתנהLOCAL_LDFLAGS
אוAPP_LDFLAGS
. - נוצרו שרשראות הכלים MIPS ו-MIPS64 באמצעות
binutils-2.25
, שמספק תמיכה משופרת ב-R6. - הגדרנו את
-fstandalone-debug
(מידע מלא על ניפוי הבאגים) כאפשרות ברירת מחדל עבור Clang. - החלפנו את
-fstack-protector
ב--fstack-protector-strong
בשרשראות הכלים ARM, AArch64, X86 ו-X86_64 עבור GCC 4.9, Clang 3.5 ו-Clang 3.6. - הוספנו את המתג
--package
בשורת הפקודה ל-ndk-gdb
כדי לאפשר למערכת הבנייה לדרוס את שם החבילה. (בעיה מספר 56189) - הוצא משימוש
-mno-ldc1-stc1
עבור MIPS. יכול להיות שהאפשרות הזו לא תפעל עם האפשרויות החדשות-fpxx
ו--mno-odd-spreg
, או עם FPXX ABI. - הוספנו זיהוי של MIPS MSA ו-R6 אל
cpu-features
.
- הוספת
Android NDK r10d (דצמבר 2014)
- שינויים חשובים:
-
- הגדרנו את GCC 4.8 כברירת המחדל לכל ה-ABI של 32 ביט. הוצאנו משימוש את GCC 4.6, ונסיר אותה בגרסה הבאה. כדי לשחזר את ההתנהגות הקודמת, מוסיפים את
NDK_TOOLCHAIN_VERSION=4.6
ל-ndk-build, או מוסיפים את--toolchain=arm-linux-androideabi-4.6
כשמריצים אתmake-standalone-toolchain.sh
בשורת הפקודה. GCC 4.9 נשארת ברירת המחדל ל-ABI של 64 ביט. - הפסקנו את ההוספה של
-mstackrealign
כברירת מחדל לכל שרשראות הכלים של x86[_64]. ערכת הכלים של NDK מניחה יישור של מחסנית בגודל 16 בייט. הכלים והאפשרויות שמשמשים כברירת מחדל לאכיפת הכלל הזה. משתמש שכותב קוד אסמבלי צריך לוודא ששמירת יישור המחסנית מתבצעת, וגם לוודא שקומפיילרים אחרים פועלים בהתאם לכלל הזה. (באג ב-GCC 38496) - נוספה פונקציונליות של Address Sanitizer לתמיכה ב-Clang 3.5 ב-ABI של ARM ו-x86. מידע נוסף על השינוי הזה זמין בפרויקט Address Sanitizer.
- הוספנו את הדרישה, החל מרמת API 21, להשתמש ב-
-fPIE -pie
כשמבצעים build. ב-API ברמה 16 ומעלה, הפקודה ndk-build משתמשת ב-PIE
במהלך הבנייה. לשינוי הזה יש כמה השלכות, שמפורטות ב בעיה מספר 888 בגרסת התצוגה המקדימה למפתחים. ההשלכות האלה לא רלוונטיות לספריות משותפות.
- הגדרנו את GCC 4.8 כברירת המחדל לכל ה-ABI של 32 ביט. הוצאנו משימוש את GCC 4.6, ונסיר אותה בגרסה הבאה. כדי לשחזר את ההתנהגות הקודמת, מוסיפים את
- תיקוני באגים חשובים:
-
- בוצעו תיקונים נוספים שקשורים ל-
A53 Errata #835769 במקשר aarch64-linux-android-4.9. כחלק מהשינוי הזה, GCC מעבירה אפשרות חדשה,
--fix-cortex-a53-835769
, כשמציינים את-mfix-cortex-a53-835769
(מופעל כברירת מחדל). מידע נוסף זמין בהודעה הזו בנושא binutils ובהודעה הזו בנושא binutils. - תועד תיקון לבעיה של
sscanf/vsscanf
hang ב-libc++ שקרתה ברמת API 21. התיקון עצמו הוטמע בגרסה r10c. (בעיה 77988) - תוקן קראש של AutoFDO (
-fauto-profile
) שהתרחש ב-GCC 4.9 כשצוין-Os
. (בעיה 77571)
- בוצעו תיקונים נוספים שקשורים ל-
A53 Errata #835769 במקשר aarch64-linux-android-4.9. כחלק מהשינוי הזה, GCC מעבירה אפשרות חדשה,
- תיקוני באגים אחרים:
-
- בוצעו התיקונים הבאים בכותרת ובספרייה:
- הוספנו את
posix_memalign
לרמת API 16. בנוסף, נוסף אב טיפוס ב-stdlib.h
לרמות API 16 עד 19. (בעיה 77861) - תוקן
stdatomic.h
כך שהוא כולל<atomic>
רק עבור C++11. - שינינו את הכותרות הבאות לשימוש עצמאי:
sys/user.h
ו-gl2ext.h
, dlext.h
, fts.h
, sgidefs.h
לרמת API 21. - בוצע שינוי ב-
sys/user.h
כדי לשנות את השם שלmxcsr_mask
ל-mxcr_mask
, וכדי לשנות את סוג הנתונים שלu_ar0
מ- - השתנה סוג ערך ההחזרה של
sysconf()
מ-int
ל-long
. - תוקן הטיפול של ndk-build ב-
thumb
עבורLOCAL_ARM_MODE
: בגרסה r10d, ndk-build מוסיף אתLOCAL_LDFLAGS+=-mthumb
כברירת מחדל, אלא אם מתקיים אחד מהתנאים הבאים: - הגדרתם את
LOCAL_ARM_MODE
כ-arm
. - אתם מבצעים בניית ניפוי באגים (עם הגדרות כמו
APP_OPTIM=debug
ו-AndroidManifest.xml
שמכילותandroid:debuggable="true"
), שבה מצב ARM הוא ברירת המחדל כדי לשמור על תאימות לשרשרות כלים קודמות. (בעיה 74040) - תוקנה הבעיה
LOCAL_SRC_FILES
ב-ndk-build שגרמה לשימוש בנתיבים מוחלטים של Windows. (בעיה 74333) - הוסר קוד ספציפי ל-bash מ-ndk-gdb. (בעיה 73338)
- הוסר קוד ספציפי ל-Bash מ-
make-standalone-toolchain.sh
. (בעיה מספר 74145) - תיעוד מתוקן בנוגע לתיקון של
System.loadLibrary()
transitive dependencies. (בעיה 41790) - תוקנה בעיה שמנעה חילוץ של חבילות 64 ביט ב-Ubuntu 14.04 וב-OS X 10.10 (Yosemite). (בעיה 78148)
- תוקנה בעיה ב-
LOCAL_PCH
כדי לשפר את התמיכה ב-Clang. (בעיה מספר 77575) - הבהרנו את האזהרה 'נדרשת ערימה של קובץ הפעלה' מ-ld.gold. (בעיה מספר 79115)
unsigned long
ל-struct user_regs_struct*.
Android NDK r10c (אוקטובר 2014)
- שינויים חשובים:
-
- בוצעו השינויים הבאים במבנה ההורדה:
- כל חבילה מכילה עכשיו את הכותרות, הספריות והכלים של 32 ו-64 ביט עבור הפלטפורמה המתאימה.
- כבר לא צריך להוריד בנפרד ספריות STL עם מידע על ניפוי באגים.
- כל מה שנקרא בעבר
Android-L
נקרא עכשיו בשם הרשמי של הגרסה:android-21
. - GCC 4.9 עודכן על ידי שינוי הבסיס לענף
google
של מאגר GCC. ההבדלים העיקריים מגרסת ה-upstream של GCC 4.9 כוללים: - האפשרות
-O2
מפעילה עכשיו וקטוריזציה, בלי loop peeling אבל עם unrolling אגרסיבי יותר. - שיפורים ב-FDO וב- LIPO
- נוסף תמיכה ב-Clang 3.5 לכל המארחים:
NDK_TOOLCHAIN_VERSION=clang
מעכשיו בוחר Clang 3.5. חשוב לדעת: - ב-ARM וב-x86, ברירת המחדל היא שימוש באסמבלר המשולב. אם זה גורם לבעיות, אפשר להשתמש ב-
-fno-integrated-as
כפתרון עקיף. - Clang 3.5 מציג יותר אזהרות לגבי דגלים שלא נעשה בהם שימוש, כמו האפשרות
-finline-functions
שנתמכת על ידי GCC. - אפשר להיכנס למצב ניפוי באגים של ART כשמנפים באגים במכשיר Android 5.0 באמצעות ART כמכונה וירטואלית, על ידי ציון האפשרות
art-on
. מידע נוסף זמין בprebuilt/common/gdb/common.setup
בספרייה שמכילה את NDK. - הוסרה התמיכה ב-Clang 3.3.
- הוצאה משימוש של GCC 4.6, ויכול להיות שהיא תוסר מגרסאות עתידיות.
- הכלי mclinker עודכן לגרסה 2.8 עם תמיכה בקיפול קוד זהה (ICF). מציינים את ה-ICF באמצעות האפשרות
--icf
. - הרחבנו את התמיכה ב-
arm_neon.h
ב-x86 וב-x86_64, והגענו לכיסוי של כ-93% מהפונקציות הפנימיות של NEON. מידע נוסף על תמיכה ב-NEON:- עוברים אל NDK Programmer's Guide (
docs/Programmers_Guide/html/
) וקוראים את המאמר בנושא Architectures and CPUs > Neon. - בודקים את הדוגמה המעודכנת
hello-neon
ב-samples/
. - אפשר לעיין במדריך של Intel בנושא העברה מ-ARM NEON ל-Intel SSE.
- עוברים אל NDK Programmer's Guide (
- תמיכה מתועדת ב-
_FORTIFY_SOURCE
ב-headers/libs/android-21
, שהופיעה בגרסה r10 (כש-android-21
עדיין נקראAndroid-L
), אבל לא היה תיעוד.
מידע מפורט יותר זמין בקטע תיקוני באגים חשובים בהמשך המאמר.
כשמעבירים נתונים מפרויקטים שמשתמשים ב-GCC, אפשר להשתמש ב-
-Wno-invalid-command-line-argument
וב--Wno-unused-command-line-argument
כדי להתעלם מהדגלים שלא בשימוש עד שתחליטו מה לעשות איתם בטווח הארוך. - תיקוני באגים חשובים:
-
- תוקנה שגיאת קומפיילר פנימית ב-GCC4.9/aarch64 שגרמה להודעת השגיאה הבאה (בעיה 77564):
- תוקנה יצירת קוד שגויה מ-GCC4.9/arm. (בעיה מספר 77567)
- תוקנה שגיאה פנימית בקומפיילר ב-GCC4.9/mips שקשורה להרכבה מוטבעת. (בעיה 77568)
- תוקן קוד שגוי שנוצר על ידי GCC4.9/arm עבור
x = (cond) ? y : x
. (בעיה 77569) - תוקנו GCC4.9/aarch64 ו-Clang3.5/aarch64 כדי לעקוף את
Cortex-A53 erratum (835769) כברירת מחדל. כדי להשבית את הפתרון העקיף, מציינים את הערך
-mno-fix-cortex-a53-835769
.
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- תיקוני באגים אחרים:
-
- בוצעו התיקונים הבאים בכותרת ובספרייה של
android-21
:- נוספו עוד קודי מקשים לטלוויזיה:
android/keycodes.h
- נוספו עוד קבועים ושש פונקציות חדשות של חיישנים ל-
android/sensor.h
:ASensorManager_getDefaultSensorEx
,ASensor_getFifoMaxEventCount
,ASensor_getFifoReservedEventCount
,ASensor_getStringType
,ASensor_getReportingMode
ו-ASensor_isWakeUpSensor
. - בוצע תיקון של
stdatomic.h
כדי לשפר את התאימות ל-GCC 4.6 ולספק תמיכה בכותרת<atomic>
. - נוספו
sys/ucontext.h
ו-sys/user.h
לכל רמות ה-API. הכותרתsignal.h
כוללת עכשיו את<sys/ucontext.h>
. אפשר להסיר כל הגדרה קיימת שלstruct ucontext
. - הוספנו את
posix_memalign
לרמות API 17, 18 ו-19. - הוספנו את הפונקציות הבאות לכל הארכיטקטורות:
android_set_abort_message
,posix_fadvise
,posix_fadvise64
,pthread_gettid_np
. - הוספנו את ההרשאות הנדרשות לדוגמה
native-media/AndroidManifest.xml
. (בעיה 106640) - הוספנו את
clock_nanosleep
ואתclock_settime
לרמת API 21. (בעיה מספר 77372) - הסרנו את הסמלים הבאים מכל הארכיטקטורות:
get_malloc_leak_info
,free_malloc_leak_info
,__srget
,__swbuf
,__srefill
,__swsetup
,__sdidinit
,__sflags
,__sfp
,__sinit
,__smakebuf
,__sflush
,__sread
,__swrite
,__sseek
,__sclose
,_fwalk
,__sglue
,__get_thread
,__wait4
,__futex_wake
,__open
,__get_tls
,__getdents64
ו-dlmalloc
. - הפונקציות הבאות הוסרו מארכיטקטורות 64 ביט:
basename_r
,dirname_r
,__isthreaded
,_flush_cache
(mips64). - הפונקציה הבאה הוסרה מארכיטקטורות 32 ביט:
__signalfd4
. - השתנה סוג הארגומנט השלישי מ-
size_t
ל-int
בפונקציות הבאות:strtoll_l
,strtoull_l
,wcstoll_l
ו-wcstoull_l
. - החזרנו את הפונקציות הבאות לארכיטקטורת 64 ביט:
arc4random
,arc4random_buf
ו-arc4random_uniform
. - האופרטורים
cxa_*
,new
ו-delete
הועברו חזרה אלlibstdc++.so
. השינוי הזה משחזר את ההתנהגות של r9d. גרסאות קודמות של r10 כללו קבצים של placeholder.
- נוספו עוד קודי מקשים לטלוויזיה:
- הוחזרה התמיכה ב-MXU ב-GCC 4.8 וב-4.9 עבור mips. התמיכה הזו לא הייתה קיימת בגרסאות r10 ו-r10b כי הגרסאות האלה של GCC קומפלו עם binutils-2.24, שלא תמך ב-MXU. עכשיו הוא כן.
- תוקן
--toolchain=
ב-make-standalone-toolchain.sh
כך שעכשיו יש תמיכה נכונה בשימוש בסיומת שמציינת גרסה של Clang. - תוקנו הפונקציות של libc++/armeabi
strtod()
. - בוצעו תיקונים במסמכי NDK ב-
docs/
.
- בוצעו התיקונים הבאים בכותרת ובספרייה של
- שינויים אחרים:
-
- שיפרנו את
cpu-features
כדי לזהות תמיכה ב-ARMv8 עבור קבוצות ההוראות הבאות: AES, CRC32, SHA2, SHA1 ו-64-bit PMULL/PMULL2. (בעיה מספר 106360) - בוצע שינוי ב-ndk-build כדי להשתמש ב-
*-gcc-ar
, שזמין ב-GCC 4.8, ב-GCC 4.9 וב-Clang. ב-Clang מציינים את זה במקום*-ar
. ההגדרה הזו משפרת את התמיכה ב-LTO. - הוסרו הכותרות
include-fixed/linux/a.out.h
ו-include-fixed/linux/compiler.h
מהקומפיילר GCC. (בעיה 73728) - תוקנה בעיה שקשורה ל-
-flto
ב-GCC 4.8 ב-Mac OS X. הודעת השגיאה הייתה: - תוקנה שגיאת הקלדה ב-
build-binary.mk.
(בעיה מספר 76992)
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- שיפרנו את
- בעיות חשובות שמוכרות:
-
- הגדרה של -Os (
-fauto-profile
) ב-GCC4.9 עלולה לגרום לקריסה. (בעיה 77571)
- הגדרה של -Os (
Android NDK r10b (ספטמבר 2014)
- הערות חשובות:
-
- בגלל מגבלת הגודל של 512MB על חבילות שאפשר להוריד, הפריטים הבאים של 32 ביט לא נכללים בחבילות ההורדה של NDK 32 ביט. במקום זאת, הם נמצאים בגרסאות ה-64 ביט:
- כותרות של Android-L
- GCC 4.9
- נכון לעכשיו, התמיכה היחידה ב-Renderscript ש-NDK מספק היא ל-Renderscript ב-32 ביט עם Android 4.4 (רמת API 19). אי אפשר ליצור את HelloComputeNDK (הדוגמה היחידה של Renderscript) עם שילוב אחר של Renderscript (32 או 64 ביט) וגרסת Android.
- כדי לקמפל קודק מקורי, צריך להשתמש בחבילת NDK 64 ביט, שבה נמצאות כל הכותרות של Android-L.
- תיקוני באגים חשובים:
- תיקוני באגים אחרים:
-
- הוסר
stdio.h
מהספריותinclude-fixed/
של כל הגרסאות של GCC. (בעיה 73728). - הוסרו קובצי כותרת כפולים מחבילות Windows בספריות
platforms/android-L/arch-*/usr/include/linux/netfilter*/
. (בעיה 73704). - תוקנה בעיה שמנעה מ-Clang ליצור את HelloComputeNDK.
- תוקן atexit. (בעיה 66595).
- ביצענו תיקונים שונים במסמכים ב-
docs/
וב-sources/third_party/googletest/README.NDK
. (בעיה 74069). - בוצעו התיקונים הבאים בכותרות של Android-L:
- הוספנו את הפונקציות הבאות ל-
ctype.h
ול-wchar.h
: dn_expand()
,grantpt()
,inet_nsap_addr()
,inet_nsap_ntoa()
,insque()
,nsdispatch()
,posix_openpt()
,__pthread_cleanup_pop()
,__pthread_cleanup_push()
,remque()
,setfsgid()
,setfsuid()
,splice()
,tee()
,twalk()
(בעיה 73719) ו-42 פונקציות של*_l()
. - השם של
cmsg_nxthdr
שונה ל-__cmsg_nxthdr
. - בוצעה הסרה של
__libc_malloc_dispatch
. - האב-טיפוס
ptrace()
השתנה ל-long ptrace(int, ...);
. - בוצעה הסרה של
sha1.h
. - הארכה של
android_dlextinfo
ב-android/dlext.h
. - הערה
__NDK_FPABI__
לפונקציות שמקבלות או מחזירות ערכים מסוג float או double ב-stdlib.h
,time.h
,wchar.h
ו-complex.h
.
- הוסר
- שינויים אחרים:
-
- עדכנו את
mipsel-linux-android-4.9
ואתmips64el-linux-android-4.9
, הטמענו פריסת ספריות חדשה של multilib וסיפקנו תמיכה ב-gdb-7.7 - שיפרנו את
cpu-features
כדי לזהות עוד תכונות של arm64. (רשימת שינויים 100339).
- עדכנו את
Android NDK r10 (יולי 2014)
- שינויים חשובים:
-
- נוספו 3 ממשקי ABI חדשים, כולם בגרסת 64 ביט: arm64-v8a, x86_64 ו-mips64. חשוב לזכור:
- GCC 4.9 הוא הקומפיילר שמוגדר כברירת מחדל ל-ABI של 64 ביט. הגרסה הנוכחית של Clang היא 3.4.
NDK_TOOLCHAIN_VERSION=clang
יכול להיות שלא יפעל ב-arm64-v8a וב-mips64. - Android-L היא הרמה הראשונה עם תמיכה ב-64 ביט. שימו לב שרמת ה-API הזו היא זמנית, ורלוונטית רק לגרסת L-preview. מספר רמת API בפועל יחליף אותו בגרסה L.
- הגרסה הזו כוללת עכשיו את ההגדרות
all32
ו-all64
שלAPP_ABI
.- הפונקציה
APP_ABI=all32
שוות ערך לפונקציהAPP_ABI=armeabi,armeabi-v7a,x86,mips
. - הפונקציה
APP_ABI=all64
שוות ערך לפונקציהAPP_ABI=arm64-v8a,x86_64,mips64
. -
APP_ABI=all
בחירה של כל ממשקי ה-ABI.
- הפונקציה
- GNU libstdc++ החדשה ב-Android-L מכילה את כל
<tr1/cmath>
לפני שמגדירים פונקציה מתמטית משלכם, כדאי לבדוק ב-_GLIBCXX_USE_C99_MATH_TR1
אם קיימת כבר פונקציה עם השם הזה, כדי להימנע משגיאות מסוג 'הגדרה מרובה' מהמצמיד. - ספריית cpu-features עודכנה עבור ליבת ARMv8. יכול להיות שהספרייה הקיימת cpu-features לא תזהה את הנוכחות של NEON בפלטפורמת ARMv8. קומפילציה מחדש של הקוד עם הגרסה החדשה.
- הוספנו ספריית API חדשה
platforms/android-L/
. היא כוללת: - עדכנו את הכותרות של Bionic, שלא השתנו מרמות API של Android 3 (Cupcake) עד 19 (KitKat). הגרסה החדשה הזו, לרמה L, צריכה להיות מסונכרנת עם AOSP.
- ממשקי API חדשים למדיה ודוגמה של קודק מקורי.
- כותרת
Android.h
מעודכנת ל-SLES/OpenSLES, שמאפשרת תמיכה בפורמט אודיו של נקודה צפה עם דיוק יחיד ב-AudioPlayer. - GLES 3.1 ותוספי AEP ל-
libGLESv3.so.
- הכותרות של GLES2 ו-GLES3 עודכנו לגרסאות הרשמיות העדכניות ביותר של Khronos.
- נוספו קומפיילרים של GCC 4.9 ל-ABI של 32 ו-64 ביט. GCC 4.9 הוא קומפיילר ברירת המחדל (היחיד) ל-ABI של 64 ביט, כפי שצוין קודם. ב-ABI של 32 ביט, צריך להפעיל באופן מפורש את GCC 4.9, כי GCC 4.6 עדיין מוגדר כברירת מחדל.
- ב-ndk-build, מפעילים בנייה של 32 ביט, GCC 4.9 על ידי הוספה של
NDK_TOOLCHAIN_VERSION=4.9
אלApplication.mk
, או על ידי ייצוא שלו כמשתנה סביבה משורת הפקודה. - כדי להשתמש בשרשרת כלים עצמאית, משתמשים באפשרות
--toolchain=
בסקריפטmake-standalone-toolchain.sh
. לדוגמה:--toolchain=arm-linux-androideabi-4.9.
- שודרג GDB לגרסה 7.6 ב-GCC 4.8/4.9 וב-x86*. מכיוון ש-GDB עדיין בגרסה GDB-7.3.x ב-GCC 4.6 (ברירת המחדל ל-ARM ול-MIPS), צריך להגדיר את
NDK_TOOLCHAIN_VERSION=4.8
או את4.9
כדי להפעיל את ndk-gdb לבחירת GDB 7.6. - הוספנו את אפשרות ה-build
-mssse3
כדי לספק תמיכה ב-SSSE3, והגדרנו אותה כברירת המחדל עבור ABI x86 (שדרוג מ-SSE3). התמונה שפורסמה על ידי Google לא מכילה הוראות SSSE3. - GCC 4.8 עודכן ל-4.8.3.
- שיפור התמיכה ב-ARM libc++ EH על ידי מעבר מ-gabi++ ל-libc++abi. פרטים נוספים זמינים בקטע 'תמיכה ב-C++' במסמכי התיעוד. חשוב לדעת:
- כל הבדיקות, מלבד הבדיקה של הלוקאל, עוברות עכשיו ב-Clang 3.4 וב-GCC 4.8. מידע נוסף זמין בקטע 'תמיכה ב-C++' במאמרי העזרה.
- ספריות libc++ ל-X86 ול-MIPS libc++ עדיין משתמשות ב-gabi++.
- מעכשיו אפשר להשתמש ב-<atomic> ב-GCC 4.7 ואילך.
- אם משתמשים ב-
<list>
, צריך להוסיף את-fno-strict-aliasing
, כי__list_imp::_end
_ גורם להפרה של כללי TBAA. (בעיה 61571). - החל מ-GCC 4.6, האפשרות LIBCXX_FORCE_REBUILD:=true לא בונה מחדש את libc++. כדי לבנות אותה מחדש, צריך להשתמש במהדר אחר. שימו לב שלא נערכו בדיקות ל-Clang 3.3.
- mclinker הוא עכשיו גרסה 2.7, ויש לו תמיכה ב-aarch64 Linux.
- נוספה תמיכה בכותרות שעברו קומפילציה מראש, שצוינו על ידי
LOCAL_PCH
. (בעיה מספר 25412).
- תיקוני באגים חשובים:
-
- תוקן libc++ כך שהוא עכשיו קומפילציה של
std::feof
וכו'. (בעיה 66668). - תוקן קריאה לספריית Clang 3.3/3.4 atomic שגרמה לקריסות בחלק מהבדיקות של libc++ עבור ABI armeabi.
- תוקנו קריסות של Clang 3.4 שהתרחשו בקריאת כותרות שהודרו מראש. (בעיה 66657).
- תוקן ה-assert של Clang 3.3/3.4
-O3
ב: - תוקנה הקריסה הבאה ב-Clang 3.3/3.4:
llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef
(בעיה מספר 57381).): Assertion Weights.size() >= 2 && "Need at least two branch weights!" Assertion failed: (!Fn && "cast failed but able to resolve overload expression!!"), function CheckCXXCStyleCast, file Volumes/data/ndk-toolchain/src/llvm-3.3/llvm/tools/clang/lib/Sema/SemaCast.cpp, line 2018
. (בעיה 66950). - תוקן libc++ כך שהוא עכשיו קומפילציה של
- תיקוני באגים אחרים:
-
- כותרות קבועות:
- הערך של
ssize_t
ב-32 ביט הואint
במקוםlong int
. - תוקנו
WCHAR_MIN
ו-WCHAR_MAX
כך שהם מקבלים סימנים מתאימים בהתאם לארכיטקטורה שבה הם פועלים: - X86/MIPS: חתום.
- ARM: לא חתום.
- כדי לחייב את X86/MIPS להשתמש בברירת המחדל של חתימה לא חתומה, משתמשים ב-
-D__WCHAR_UNSIGNED__
. - כדי לאלץ את
wchar_t
להיות 16 ביט, משתמשים ב--fshort-wchar
. - הוסרו סמלים שלא קיימים מ-
libc.so
של 32 ביט, והוספוpread64
,pwrite64
ו-ftruncate64
לרמת API של Android מגרסה 12 ומעלה. (בעיה 69319). מידע נוסף זמין בהודעת האישור שמצורפת לרשימת השינויים ב-AOSP 94137. - תוקנה אזהרת GCC לגבי הגדרה מחדש של
putchar
. הודעת האזהרה: - תוקן
make-standalone-toolchain.sh --stl=libc++
כך ש: - עותקים
cxxabi.h
. (בעיה מספר 68001). - הפקודה פועלת בספריות שאינן ספריית ההתקנה של NDK. (בעיות 67690 ו-68647).
- תוקן GCC/Windows כך שארגומנטים יצוטטו רק כשנדרש ליצור תהליכים בתוכניות חיצוניות. השינוי הזה מקטין את הסיכוי לחרוג ממגבלת האורך של 32,000 תווים.
- תוקנה בעיה שגרמה לכך שלא הייתה אפשרות לשנות את משתנה הסביבה
APP_PLATFORM
. - תוקנה ההטמעה של
IsSystemLibrary()
ב-crazy_linker כך שהיא תשתמש ב-strrchr()
במקום ב-strchr()
כדי למצוא את שם הבסיס האמיתי של נתיב הספרייה. - תוקנה הבעיה שגרמה לכך שלא ניתן היה ליצור native-audio במצב ניפוי באגים.
- תוקנה הבעיה שגרמה לכך ש-gdb לא הצליח להדפיס מספרי נקודה צפה קיצוניים. (בעיה מספר 69203).
- תוקנה הבעיה שגרמה לכך שלא הייתה אפשרות להדר ב-Clang 3.4 עם
-Wl,-shared
(בניגוד ל--shared
, שלא היו בו בעיות הידור). הבעיה הייתה ש-Clang הוסיף-pie
ליעדי Android אם אף אחד מהערכים-shared
או-static
לא היה קיים. ההתנהגות הזו, שהייתה שגויה, גרמה לבעיה בקישור כי לא הייתה אפשרות לשלב בין-shared
לבין-pie
.
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);
(רשימת שינויים 91185). - שינויים אחרים:
-
- נוספה התכונה
arm_neon.h
לשרשרת הכלים x86, כך שהיא מדמה עכשיו כ-47% מ-Neon. אין כרגע תמיכה בסוגים של 64 ביט. מידע נוסף זמין בקטע בנושא תמיכה ב-ARM Neon intrinsics בתיעוד של x86. - העברה של אופטימיזציה של ARM/GOT_PREL (שקיימת ב-GCC 4.6 שנבנה מהסניף של Google ב-GCC) אל
ARM GCC 4.8/4.9. האופטימיזציה הזו מפחיתה לפעמים את מספר ההוראות כשניגשים למשתנים גלובליים. לדוגמה, אפשר לעיין בסקריפט build.sh ב-
$NDK/tests/build/b14811006-GOT_PREL-optimization/
. - נוספה גרסת ARM ל-STL gabi++, ל-stlport ול-libc++. עכשיו יש להם גם את הגרסה הזו וגם את מצב Thumb mode.
- עכשיו אפשר להפעיל את הסקריפט make-standalone-toolchain.sh עם
--toolchain=x86_64-linux-android-4.9
, ששווה ל---toolchain=x86_64-4.9
.
- נוספה התכונה
Android NDK r9d (מרץ 2014)
- שינויים חשובים:
-
- נוספה תמיכה בקומפיילר Clang 3.4. האפשרות
NDK_TOOLCHAIN_VERSION=clang
בוחרת עכשיו ב-Clang 3.4. GCC 4.6 עדיין מוגדר כקומפיילר ברירת המחדל. - נוספה האפשרות
APP_ABI=armeabi-v7a-hard
, עם אפשרות נוספת של multilib-mfloat-abi=hard
. האפשרויות האלה מיועדות לשימוש עם ARM GCC 4.6/4.8 ו-Clang 3.3/3.4 (שמשתמשים ב-assembler, linker ו-libs של 4.8). כשמשתמשים באפשרויות האלה, חשוב לשים לב לשינויים הבאים: - כשמריצים את הסקריפט
ndk-build
, מוסיפים את האפשרויות הבאות לטירגוט armeabi-v7a: הספרייה שנוצרה מועתקת אלTARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
libs/armeabi-v7a
. כדי שהפקודה make תפעל כמו שצריך, אי אפשר לציין גם אתarmeabi-v7a
וגם אתarmeabi-v7a-hard
כיעדים של הפקודה make (כלומר, בשורה APP_ABI=). אם תעשו את זה, המערכת תתעלם מאחד מהם. חשוב לזכור ש-APP_ABI=all
עדיין שווה ל-armeabi armeabi-v7a x86 mips
. - הסקריפט
make-standalone-toolchain.sh
מעתיק ספריות נוספות אל מתחת לספריות/hard
. מוסיפים אתCFLAGS
ו-LFLAGS
שצוינו למעלה לקובץ ה-makefile כדי לאפשר ל-GCC או ל-Clang לקשר לספריות ב-/hard
. - נוסף המהדר yasm, וגם הדגלים
LOCAL_ASMFLAGS
ו-EXPORT_ASMFLAGS
ליעדי x86. הסקריפטndk-build
משתמש ב-prebuilts/*/bin/yasm*
כדי ליצורLOCAL_SRC_FILES
עם התוסף.asm
. - הגרסה של MClinker עודכנה ל-2.6.0, שכוללת תמיכה ב-
-gc-sections
. - נוספה תמיכה ניסיונית ב-libc++ (upstream r201101). כדי להשתמש בתכונה החדשה הזו:
- הוספה של
APP_STL := c++_static
אוAPP_STL := c++_shared
ב-Application.mk
. אפשר לבנות מחדש ממקור דרךLIBCXX_FORCE_REBUILD := true
- מריצים את הפקודה
make-standalone-toolchain.sh --stl=libc++
כדי ליצור שרשרת כלים עצמאית עם כותרות/ספרייה של libc++.
CPLUSPLUS-SUPPORT.html
. (בעיה 36496) - הוספה של
- נוספה תמיכה בקומפיילר Clang 3.4. האפשרות
- תיקוני באגים חשובים:
-
- תוקנה בעיה של throw שלא נתפס ממטפל חריגים לא צפוי ב-GCC 4.6/4.8 ARM EABI. (בעיה ב-GCC 59392)
- תוקן GCC 4.8 כך שעכשיו הוא פותר נכון התמחות חלקית של תבנית עם ארגומנט תבנית תלוי שאינו מסוג type. (בעיה ב-GCC 59052)
- נוספו עוד מודולים ל-Python שנוצר מראש (בעיה 59902):
- Mac OS X:
zlib
,bz2
,_curses
,_curses_panel
,_hashlib
,_ssl
- Linux:
zlib
,nis
,crypt
,_curses
ו-_curses_panel
- Mac OS X:
- תוקן gdbserver של x86 ו-MIPS
event_getmsg_helper
. - תוקנו מספר רב של בעיות ב-toolchain של RenderScript NDK, כולל בעיות בתאימות במכשירים ישנים יותר ובעיות בהשתקפות של C++.
- תיקוני באגים אחרים:
-
- תיקונים בכותרות:
- תוקן חוסר של
#include <sys/types.h>
ב-android/asset_manager.h
עבור Android API ברמה 13 ומעלה. (בעיה 64988) - תוקן חוסר של
#include
ב-android/rect_manager.h
עבור Android API ברמה 14 ומעלה. - הוספת את
JNICALL
אלJNI_OnLoad
ואלJNI_OnUnload
ב-jni.h
. שימו לב שהמדדJNICALL
מוגדר כ-__NDK_FPABI__
מידע נוסף זמין במאמרsys/cdefs.h
. - עדכנו את הכותרות הבאות כך שאפשר לכלול אותן בלי צורך לכלול באופן ידני את התלויות שלהן (בעיה 64679):
- נוסף
sys/cachectl.h
לכל הארכיטקטורות. מפתחי MIPS יכולים עכשיו לכלול את הכותרת הזו במקום לכתוב#ifdef __mips__
. - תוקנה הבעיה
platforms/android-18/include/android/input.h
על ידי הוספת__NDK_FPABI__
לפונקציות שמקבלות או מחזירות ערכים מסוג float או double. - תוקנה בעיה ב-MIPS
struct stat
, שהוגדר באופן שגוי כגרסת 64 ביט שלו ב-Android API מגרסה 12 ואילך. ההגדרה השגויה הזו הייתה רגרסיה שהוצגה בגרסה r9c. - מוגדרים
__PTHREAD_MUTEX_INIT_VALUE
,__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE
, ו-__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE
ב-Android API ברמה 9 ומטה. - נוספו
scalbln
,scalblnf
ו-scalblnl
ל-x86libm.so
לממשקי API מגרסה 18 ואילך. - תוקנה שגיאת הקלדה ב-
sources/android/support/include/iconv.h
. (בעיה 63806)
android/tts.h EGL/eglext.h fts.h GLES/glext.h GLES2/gl2ext.h OMXAL/OpenMAXSL_Android.h SLES/OpenSLES_Android.h sys/prctl.h sys/utime.h
- תוקן חוסר של
- תוקן gabi++
std::unexpected()
כדי לקרוא ל-std::terminate()
כך שמטפלstd::terminate()
שהוגדר על ידי המשתמש יוכל לפעול. - תוקן gabi++ כדי לזהות
std::nullptr
. - דוגמאות קבועות Teapot ו-MoreTeapots:
- נפתרה בעיה בשבבי Tegra 2 ו-3 על ידי שינוי משתני ההשתקפות כך שישתמשו בדיוק בינוני. הערכים של עוצמת ההשתקפות יכולים להיות עכשיו קטנים מ-1.0.
- השתנו הדוגמאות כך שלחיצה על לחצן עוצמת הקול משחזרת את מצב ההפעלה המלא ומבטלת את התוקף של
SYSTEM_UI_FLAG_IMMERSIVE_STICKY
. סיבוב המסך לא מפעיל אתonSystemUiVisibilityChange
, ולכן לא משחזר את מצב המסך המלא.
- תוקן הסקריפט
ndk-build
כדי להוסיף את-rpath-link=$SYSROOT/usr/lib
ואת-rpath-link=$TARGET_OUT
כדי להשתמש ב-ld.bfd
לקישור קבצים הפעלה. (בעיה 64266) - הוסר
-Bsymbolic
מכל הגרסאות של STL. - תוקן
ndk-gdb-py.cmd
על ידי הגדרתSHELL
כמשתנה סביבה במקום להעביר אותו אלpython.exe
, שמתעלם מההגדרה. (בעיה 63054) - תוקן הסקריפט
make-standalone-toolchain.sh
כך שהאפשרות--stl=stlport
מעתיקה את הכותרות של gabi++ במקום ליצור קישור סמלי אליהן. מעטפתcmd.exe
ו-MinGW לא מבינות קישורים סמליים שנוצרו על ידי cygwin.
- תיקונים בכותרות:
- שינויים אחרים:
-
- הוחלו הרשאות הפעלה על כל הסקריפטים
*cmd
שבעבר נועדו לשימוש רק במעטפתcmd.exe
, למקרה שמפתחים מעדיפים להשתמש ב-ndk-build.cmd
ב-cygwin במקום בסקריפטndk-build
המומלץ. - שיפרנו את המהירות של סקריפט
make-standalone-toolchain.sh
על ידי העברה במקום העתקה, אם ספריית היעד שצוינה לא קיימת.
- הוחלו הרשאות הפעלה על כל הסקריפטים
Android NDK r9c (דצמבר 2013)
זוהי גרסה שכוללת תיקוני באגים בלבד.
- תיקוני באגים חשובים:
-
- תוקנה בעיה ב-GCC 4.8 ARM, שבה מצביע המחסנית משוחזר מוקדם מדי. הבעיה הזו מנעה מ-frame pointer לגשת למשתנה ב-stack frame באופן מהימן. (בעיה מספר 58854 ב-GCC)
- תוקנה בעיה ב-GCC 4.8 libstdc++, שבה באג ב-std::nth_element גרם ליצירת קוד שהפיק שגיאת פילוח אקראית. (בעיה 62910)
- תוקן ICE ב-GCC 4.8 ב-cc1/cc1plus עם
-fuse-ld=mcld
, כך שהשגיאה הבאה לא מתרחשת יותר:cc1: internal compiler error: in common_handle_option, at opts.c:1774
- תוקנה התמיכה ב-
-mhard-float
בפונקציות מתמטיות של__builtin
. כדי לקבל מידע שוטף על תיקונים של-mhard-float
עם STL, אפשר לעקוב אחרי בעיה 61784.
- תיקוני באגים אחרים:
-
- תיקונים בכותרות:
- השתנה אב טיפוס של
poll
ל-poll(struct pollfd *, nfds_t, int);
ב-poll.h
. - נוספה
utimensat
ל-libc.so
לרמות API 12 ו-19 ב-Android. הספריות האלה כלולות עכשיו בכל רמות ה-API של Android מ-12 עד 19. - הוספנו את
futimens
ל-libc.so
, לרמת Android API 19. - נוספו התגים החסרים
clock_settime()
ו-clock_nanosleep()
ל-time.h
עבור רמת API 8 ומעלה ב-Android. - הוספת את
CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,
ואתCLOCK_BOOTTIME_ALARM
ב-time.h.
- הוסרו
CLOCK_REALTIME_HR
וCLOCK_MONOTONIC_HR.
שיצאו משימוש
- השתנה אב טיפוס של
- בדוגמאות Teapot, MoreTeapots ו-
source/android/ndk_helper
:- שינינו אותם כך שהם משתמשים עכשיו ב-ABI של נקודה צפה קשיחה עבור armeabi-v7a.
- עדכנו אותם לשימוש במצב immersive ב-Android API ברמה 19 ומעלה.
- תוקנה בעיה ב-
Check_ReleaseStringUTFChars
ב-/system/lib/libdvm.so
שגרמה לקריסות במכשירי x86.
- תוקנה שגיאה שמתרחשת ב-cygwin כשמתבצעת הפניה לחבילת NDK באמצעות קישור סמלי.
ndk-build
- תוקנו כשלים של
ndk-build.cmd
שמתרחשים ב-Windowscmd.exe
כש-LOCAL_SRC_FILES
מכיל נתיבים מוחלטים. (בעיה 69992) - תוקן הסקריפט
ndk-stack
כדי להמשיך גם אם אי אפשר לנתח פריים בגלל חוסר אפשרות למצוא שגרה, שם קובץ או מספר שורה. בכל אחד מהמקרים האלה, המדפסת תדפיס??
. - תוקן ה-stack של
ndk-stack
ליעדים מסוג windows-x64_64 כך שהוא לא יתאים יותר בטעות לשורת פריימים עם שורה בקטעstack:
שלא מכילה אתpc
,eip
אוip
. לדוגמה:I/DEBUG ( 1151): #00 5f09db68 401f01c4 /system/lib/libc.so
- תיקנו את gabi++ כך שהוא:
- לא משתמש ב-malloc() כדי להקצות אובייקטים של C++ thread-local.
- מונעים מצבים של קיפאון ב-gabi++ במקרים שבהם libc.debug.malloc הוא לא אפס בגרסאות של פלטפורמת Android מסוג userdebug/eng.
- תיקונים בכותרות:
- שינויים אחרים:
-
- ההוספה של
LOCAL_EXPORT_LDFLAGS
התבצעה. - הוספנו את ההגדרה
NDK_PROJECT_PATH=null
לשימוש במערכת בנייה משולבת שבה האפשרויות מועברות באופן מפורש אלndk-build
. אם משתמשים בהגדרה הזו,ndk-build
לא מנסה לחפש אתNDK_PROJECT_PATH.
. ההגדרה הזו גם מונעת ממשתנים לגזור הגדרות ברירת מחדל מ-NDK_PROJECT_PATH. כתוצאה מכך, עכשיו צריך לציין במפורש את המשתנים הבאים (עם ערכי ברירת המחדל שלהם, אם קיימים כאלה):NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG
(אופציונלי, ברירת המחדל היא 0) ומשתנים אחרים מסוגAPP_*
שנכללים ב-Application.mk
. - אפשר עכשיו למנות את
APP_ABI
ברשימה שמופרדת בפסיקים. לדוגמה:APP_ABI := "armeabi,armeabi-v7a"
- נוספה אפשרות לבנות מחדש את כל STL עם מידע על ניפוי באגים בחבילה נפרדת ואופציונלית בשם
android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip
, באמצעות האפשרות-g
. האפשרות הזו עוזרת לסקריפטndk-stack
לספק dump טוב יותר של המחסנית ב-STL. השינוי הזה לא אמור להשפיע על הקוד או על הגודל של הקובץ הסופי אחרי ההסרה. - דגימות משופרות של
hello-jni
לדיווח עלAPP_ABI
בזמן ההידור. - השתמשתם בכלי
ar
במצב דטרמיניסטי (האפשרות-D
) כדי ליצור ספריות סטטיות. (בעיה 60705)
- ההוספה של
Android NDK r9b (אוקטובר 2013)
- שינויים חשובים:
-
- עודכנו
include/android/*h
ו-math.h
לכל רמות ה-API של Android עד 18, כולל הוספה של רמות 13, 15, 16 ו-17. מידע על ממשקי API שנוספו מופיע בהודעות על השינויים 68012 ו-68014. (בעיות 47150, 58528 ו- 38423) - הוספנו תמיכה ברמת Android API 19, כולל Renderscript binding.
- הוספנו תמיכה ב-
-mhard-float
ב-ABI הקיים armeabi-v7a. מידע נוסף על Clang וההגבלות הנוכחיות עליו זמין במאמרtests/device/hard-float/jni/Android.mk
. - הועבר מ-GNU Compiler Collection (GCC) 4.8 ל-4.8.2, ונוספה תמיכה בצבעי אבחון. כדי להפעיל צבעי אבחון, מגדירים את
-fdiagnostics-color=auto
,-fdiagnostics-color=always,
או מייצאים אתGCC_COLORS
כמו שמוצג בהמשך: מידע נוסף זמין במאמר בנושא אפשרויות ב-GCC שלא תלויות בשפה.GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
- נוספו שתי דוגמאות חדשות שמדגימות את התכונות של OpenGL ES 3.0: Teapot ו-MoreTeapots. הדוגמאות האלה פועלות במכשירים עם Android 4.1 (API ברמה 16) ומעלה.
- הוצאה משימוש התמיכה ב-GCC 4.7 וב-Clang 3.2, שתוסר בגרסה הבאה.
- עודכנו
- תיקוני באגים חשובים:
-
- תוקנה בעיה ב-ARM GCC 4.6
thumb2
שגרמה לכשל ביצירת טבלאות של קפיצות יחסיות של 16 ביט. (בעיה ב-GCC) - תוקנה שגיאה פנימית של מהדר (ICE) ב-GCC 4.8 ב-
g++.dg/cpp0x/lambda/lambda-defarg3.C
. (Change 62770, GCC Issue) - תוקנה בעיה שגרמה לכך שקובצי הפעלה (executables) של
*-gdb.exe
ב-Windows 32-bit לא הופעלו. (בעיה מספר 58975) - תוקנה שגיאת ICE ב-GCC 4.8 במהלך בניית ספריית bullet. הודעת השגיאה היא:
(Issue 58916, GCC Issue)internal compiler error: verify_flow_info failed
- בוצע שינוי ב-build של GDB/ARM כדי לדלג על נתוני
ARM.exidx
לצורך ביטול ההרשמה בקוד המבוא, והוספנו פקודה (set arm exidx-unwinding
) לשליטה בביטול ההרשמה של המחסנית שמבוסס על exidx. (בעיה מספר 55826) - תוקנה בעיה בקומפיילר Clang 3.3 MIPS שבה נעשה שימוש חוזר לא נכון ברגיסטרים HI ו-LO.
- תוקנה בעיה ב-MIPS 4.7 ICE ב-
dbx_reg_number
. הודעת השגיאה היא: (GCC Patch)external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
- תוקנה בעיה ב-ARM GCC 4.6
- תיקוני באגים אחרים:
-
- תיקונים בכותרת
- תוקנו הערכים של ARM
WCHAR_MIN
ו-WCHAR_MAX
כך שלא יהיו חתומים בהתאם למפרט (הגרסאות של X86/MIPS חתומות). מגדירים את_WCHAR_IS_ALWAYS_SIGNED
כדי לשחזר את ההתנהגות הקודמת. (בעיה מספר 57749) - תוקן
include/netinet/tcp.h
כך שיכיל את מצב ה-enum שלTCP_INFO
. (בעיה מספר 38881) - תוקן רכיב המאקרו
cdefs_elh.h
_C_LABEL_STRING
כדי שלא יפיק אזהרות בערכת הכלים GCC 4.8 כשמשתמשים במצב c++11. (בעיה מספר 58135, בעיה מספר 58652) - הוסרו הפונקציות שלא קיימות
imaxabs
ו-imaxdiv
מהכותרתinttypes.h
. - תוקנה בעיה בערכי ההחזרה של
pthread_exit()
וב-pthread_self()
. (בעיה מספר 60686) - נוספה פונקציה חסרה
mkdtemp()
, שכבר קיימת בכותרתstdlib.h
.bionic
- תוקנו הערכים של ARM
- תוקנה בעיה בבניית
samples/gles3jni
באמצעות Clang ברמת Android API 11. - תיקנו את MCLinker כדי לאפשר כמה מקרים של האפשרויות הבאות:
-gc-sections
ו---eh-frame-hdr
. - תוקן MCLinker כך שיקבל את האפשרות
--no-warn-mismatch
. - האפשרות
cpu-features
שונתה כך שלא תניח שכל מכשירי VFPv4 תומכים ב-IDIV. עכשיו האפשרות הזו מוסיפה IDIV רק למכשירים ברשימת ההיתרים, כולל Nexus 4. (בעיה מספר 57637) - תוקנה בעיה שגרמה ל-
android_native_app_glue.c
לרשום שגיאות באופן שגוי בפעולות של שליחת אירועים מראש. - תוקנו כל הפעולות ב-
gabi++
terminate וב-unexpected_handler כך שיהיו thread-safe. - תוקנו כמה בעיות באפשרות Clang
-integrated-as
כדי שהיא תוכל לעבור בדיקות עבורssax-instructions
ו-fenv
. - תוקן באוסף GCC 4.6/4.7/4.8 כדי להעביר את אפשרות המקשר
--eh-frame-hdr
גם לקבצים הפעלה סטטיים. מידע נוסף זמין במאמר בנושא תיקון GCC. - תוקן גרש מיותר ב-
CPU-ARCH-ABIS.html
. מידע נוסף זמין במאמרNDK-DEPENDS.html
. (בעיה מספר 60142) - תוקנו מרכאות מיותרות בפלט של ndk-build ב-Windows. (בעיה מספר 60649)
- תוקנה בעיה ב-Clang 3.3 שגרמה לכך שלא ניתן היה לקמפל פעולות אטומיות מובנות של ARM, כמו
__atomic_fetch_add
,__atomic_fetch_sub
ו-__atomic_fetch_or
. - תוקנה שגיאת ICE ב-Clang 3.3 עם
vfprintf
בהתאמה אישית. (בעיה ב-Clang)
- תיקונים בכותרת
- שינויים אחרים:
-
- הפעלנו את OpenMP לכל הגרסאות של GCC. כדי להשתמש בתכונה הזו, מוסיפים את הדגלים הבאים להגדרות הבנייה:
דוגמאות קוד מופיעות במאמרLOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
tests/device/test-openmp
- הקטינו את הגודל של
ld.mcld
באופן משמעותי (1.5MB לעומתld.bfd
3.5MB ו-ld.gold
7.5MB), וכתוצאה מכך חל שיפור במהירות של כ-20%. - נוספו האפשרויות
LOCAL_CONLYFLAGS
ו-APP_CONLYFLAGS
כדי לציין אפשרויות שרלוונטיות רק ל-C ולא ל-C++. האפשרויות הקיימותLOCAL_CFLAGS
ו-APP_CFLAGS
משמשות גם לקומפילציה של C++ (כדי לחסוך את הצורך לציין את רוב האפשרויות פעמיים), ולכן אפשרויות כמו-std=gnu99
עלולות להיכשל ב-build של g++ עם אזהרה וב-build של clang++ עם שגיאה. - נוספו פונקציות עזר למערכים
gabi++
. - שינינו את הגרסאות של GCC כך שכל הקבצים מסוג
libgcc.a
ייבנו עם-funwind-tables
כדי לאפשר את ביטול הערימה מעבר לנקודות שנחסמו בעבר, כמו__aeabi_idiv0
. - נוספה תמיכה ב-Ingenic MXU ב-MIPS GCC4.6/4.7/4.8 עם אפשרות חדשה
-mmxu
. - Extended MIPS GCC4.6/4.7/4.8
-mldc1-sdc1
to control ldxc1/sdxc1 too - נוסף קישור מטורף. מידע נוסף זמין במאמר
sources/android/crazy_linker/README.TXT
. - תוקן
bitmap-plasma
כך שיצייר במסך מלא ולא באזור של 200x200 פיקסלים. - הקטנו את הגודל של ערכת הכלים של Linux ו-Darwin ב-25% על ידי יצירת קישורים סמליים לקבצים זהים.
- הפעלנו את OpenMP לכל הגרסאות של GCC. כדי להשתמש בתכונה הזו, מוסיפים את הדגלים הבאים להגדרות הבנייה:
Android NDK r9 (יולי 2013)
- שינויים חשובים:
-
- הוספנו תמיכה ב-Android 4.3 (רמת API 18). מידע נוסף זמין במאמר בנושא
STABLE-APIS.html
samples/gles3jni/README
. - נוספו כותרות וספריות ל-OpenGL ES 3.0, שנתמך על ידי Android 4.3 (רמת API 18) ואילך.
- נוסף קומפיילר GNU Compiler Collection (GCC) 4.8 ל-NDK. GCC 4.6 עדיין מוגדר כברירת מחדל, ולכן צריך להפעיל את האפשרות הזו באופן מפורש:
- בגרסאות
ndk-build
, מייצאים אתNDK_TOOLCHAIN_VERSION=4.8
או מוסיפים אותו ב-Application.mk
. - בגרסאות build עצמאיות, משתמשים באפשרות
--toolchain=
ב-make-standalone-toolchain.sh
, לדוגמה:
--toolchain=arm-linux-androideabi-4.8
הערה: האפשרות
-Wunused-local-typedefs
מופעלת על ידי-Wall
. חשוב להוסיף את__attribute__((unused))
אם משתמשים בטענות בזמן קומפילציה כמוsources/cxx-stl/stlport/stlport/stl/config/features.h
, שורה מס' 311. מידע נוסף זמין במאמר שינוי 55460הערה: בגרסה GCC 4.7 ואילך, קומפיילרים של ARM יוצרים כברירת מחדל קוד גישה לא מיושר עבור יעדי בנייה של ARMv6 ומעלה. יכול להיות שתצטרכו להוסיף את אפשרות הבנייה
-mno-unaligned-access
כשאתם בונים ליבות שלא תומכות בתכונה הזו. - בגרסאות
- נוספה תמיכה ב-Clang 3.3. אפשרות ה-build
NDK_TOOLCHAIN_VERSION=clang
בוחרת עכשיו ב-Clang 3.3 כברירת מחדל.הערה: הגרסאות GCC 4.4.3 ו-Clang 3.1 הוצאו משימוש ויוסרו מהגרסה הבאה של NDK.
- הכלי GNU Project Debugger (GDB) עודכן כדי לתמוך ב-Python 2.7.5.
- הוספנו את MCLinker כדי לתמוך במארחי Windows.
ld.gold
היא ברירת המחדל במקומות שבהם היא זמינה, לכן צריך להוסיף את-fuse-ld=mcld
ב-LOCAL_LDFLAGS
או ב-APP_LDFLAGS
כדי להפעיל את MCLinker. - נוסף כלי
ndk-depends
שמדפיס את התלויות של ספריות ELF. מידע נוסף זמין במאמרNDK-DEPENDS.html
. (בעיה מספר 53486)
- הוספנו תמיכה ב-Android 4.3 (רמת API 18). מידע נוסף זמין במאמר בנושא
- תיקוני באגים חשובים:
-
- תוקנה בעיה פוטנציאלית בטיפול באירועים ב-
android_native_app_glue
. (בעיה מספר 41755) - תוקן build של ARM/GCC-4.7 כדי ליצור יישור מספיק לטעינה ולאחסון של NEON הוראות VST ו-VLD. (GCC Issue 57271)
- תוקנה שגיאה פנימית (ICE) של מהדר GCC 4.4.3/4.6/4.7 עבור ערך קבוע של אינדקס שלילי במחרוזת מילולית. (בעיה מספר 54623)
- תוקנה שגיאת פילוח (segmentation fault) ב-GCC 4.7 בהפעלת קבוע עם כתובת אובייקט. (בעיה מספר 56508)
- תוקנה שגיאת פילוח ARM של GCC 4.6 עבור ערכי
-O
כשמשתמשים ב-Boost 1.52.0. (בעיה מספר 42891) - תוקנו הפונקציות
libc.so
ו-libc.a
כדי לתמוך בפונקציהwait4()
. (בעיה מספר 19854) - עדכנו את הקבצים x86 libc.so ו-libc.a כך שיכללו את הפונקציה
clone()
. - תוקן באג ב-
LOCAL_SHORT_COMMANDS
שגרם לכך שהקובץlinker.list
היה ריק או שלא נעשה בו שימוש. - תוקן build של GCC MIPS ב-Mac OS כדי להשתמש בהנחיות CFI, שבלעדיהן
ld.mcld --eh-frame-hdr
נכשל לעיתים קרובות. - תוקנה שגיאה פנימית של מהדר Clang 3.2 X86/MIPS ב-
llvm/lib/VMCore/Value.cpp
. (שינוי 59021) - תוקנה קריסה של GCC 4.7 64-bit Windows assembler. (שגיאה:
out of memory allocating 4294967280 bytes
). - עדכנו את סקריפט
ndk-gdb
כך שפעולות--start
או--launch
ימתינו עכשיו ל-GNU Debug Server, כדי שיוכל להגיע לנקודות עצירה שהוגדרו מוקדם יותר בנתיב הביצוע (כמו נקודות עצירה בקוד JNI) בצורה מהימנה יותר. (בעיה מספר 41278)הערה: כדי להשתמש בתכונה הזו צריך jdb, והיא מציגה אזהרה לגבי נקודות עצירה בהמתנה. מציינים את האפשרות
--nowait
כדי לשחזר את ההתנהגות הקודמת. - תוקנה קריסה של GDB כשרשימת הספריות ריקה.
- תוקנה קריסת GDB כשמשתמשים בפקודה
stepi
אחרי הוראתbx pc
אוblx pc
Thumb. (בעיה מספר 56962, בעיה מספר 36149) - תוקן MIPS
gdbserver
כדי לחפשDT_MIPS_RLD_MAP
במקוםDT_DEBUG
. (בעיה מספר 56586) - תוקנה תלות מעגלית בסקריפט ndk-build. לדוגמה: אם A->B ו-B->B, אז B הוסר מה-build. (בעיה מספר 56690)
- תוקנה בעיה פוטנציאלית בטיפול באירועים ב-
- תיקוני באגים אחרים:
-
- תוקן הסקריפט
ndk-build
כדי לאפשר לכם לציין גרסה של Clang כאפשרות בשורת הפקודה (למשל, NDK_TOOLCHAIN_VERSION=clang3.2
). בעבר, רק ציון הגרסה כמשתנה סביבה עבד. - תוקן גודל gabi++ של
_Unwind_Exception
ל-24 עבור יעדי בנייה של MIPS כשמשתמשים בקומפיילר Clang. (שינוי 54141) - תוקן סקריפט
ndk-build
כדי להבטיח שספריות שנבנו יוסרו בפועל מפרויקטים שכוללים ספריות סטטיות שנבנו מראש, כשמשתמשים בפקודהndk-build clean
. (Change 54461, Change 54480) - האפשרות
NDK_ANALYZE=1
שונתה כדי להיות פחות מפורטת. - תוקן
gnu-libstdc++/Android.mk
כך שיכלול נתיבbackward/
לגרסאות build שמשתמשות בתאימות לאחור. (בעיה מספר 53404) - תוקנה בעיה שבה הפונקציה
stlport new
החזירה לפעמים ערכים אקראיים. - הבעיה
ndk-gdb
תוקנה כך שתתאים לסדר שלCPU_ABIS
, ולא שלAPP_ABIS
. (בעיה מספר 54033) - תוקנה בעיה שבה בניית NDK ב-64 ביט ב-MacOSX בוחרת את הנתיב השגוי עבור הקומפיילר. (בעיה מספר 53769)
- תוקנו סקריפטים של build כדי לזהות Windows Vista בגרסת 64 ביט. (בעיה מספר 54485)
- תוקנה שגיאת x86
ntonl/swap32
:invalid 'asm': operand number out of range
. (בעיה מספר 54465, שינוי מספר 57242) - תוקן
ld.gold
כדי למזג מחרוזות מילוליות. - תוקן
ld.gold
כדי לטפל בהתאמה של סמלים גדולים. - עודכן
ld.gold
כדי להפעיל את האפשרות--sort-section=name
. - תוקן GCC 4.4.3/4.6/4.7 כדי להשבית את האפשרות
-export-dynamic
עבור תוכניות שמקושרות באופן סטטי. GCC לא מוסיף יותר קטע.interp
לתוכניות שמקושרות באופן סטטי. - תוקנה שגיאת קומפילציה ב-GCC 4.4.3
stlport
לגבי חוסר עקביות ב-typedef
של_Unwind_Control_Block
. (בעיה מספר 54426) - תוקנו סקריפטים של
awk
כדי לטפל בקבצים שלAndroidManifest.xml
שנוצרו ב-Windows, שעשויים להכיל תווים של\r
בסוף ולגרום לשגיאות בבנייה. (בעיה מספר 42548) - תוקנה בעיה שגרמה ל-
make-standalone-toolchain.sh
לבדוק את הספרייהprebuilts/
כדי לזהות אם המארח הוא 32 ביט או 64 ביט. - תוקנה האפשרות
-integrated-as
ב-Clang 3.2. - תוקן הטיפול בנתונים של מודל Clang 3.2 ARM EHABI compact
pr1
ו-pr2
. - נוספה האפשרות Clang
-mllvm -arm-enable-ehabi
כדי לתקן את שגיאת Clang הבאה:clang: for the -arm-enable-ehabi option: may only occur zero or one times!
- תוקנה בעיה שגרמה לתקלה ב-build כשאין רכיב
uses-sdk
במניפסט של האפליקציה. (בעיה מספר 57015)
- תוקן הסקריפט
- שינויים אחרים:
-
- תיקונים בכותרות
- בוצעו שינויים בכותרות כדי להפוך את
__set_errno
לפונקציה מוטמעת, כי השימוש ב-__set_errno
ב-errno.h
הוצא משימוש, ו-libc.so
כבר לא מייצאת אותה. - בוצע שינוי ב-
elf.h
כדי לכלול אתstdint.h
. (בעיה מספר 55443) - הבעיה שבה
sys/un.h
נכלל באופן עצמאי בלי קשר לכותרות אחרות נפתרה. (בעיה מספר 53646) - תיקנו את כל ממשקי ה-API של
MotionEvent_getHistorical
כדי להשתמש ב-const AInputEvent* motion_event
. (בעיה מספר 55873) - תיקנו את
malloc_usable_size
כדי לקבלconst void*
. (בעיה מספר 55725) - תוקן stdint.h כדי שיהיה תואם יותר ל-C99. (שינוי 46821)
- בוצע שינוי ב-
wchar.h
כדי לא להגדיר מחדש אתWCHAR_MAX
ואתWCHAR_MIN
- תוקנה ההצהרה
<inttypes.h>
לגבי פקודות מאקרו שקשורות למצביעPRI
ול-SCN
. (בעיה מספר 57218) - הכותרת
sys/cdefs.h
שונתה כך ש-__WCHAR_TYPE__
הוא 32 ביט עבור רמות API נמוכות מ-9, כלומרwchat_t
הוא 32 ביט עבור כל רמות ה-API. כדי לשחזר את ההתנהגות הקודמת, מגדירים את המשתנה הבוליאני_WCHAR_IS_8BIT
. (בעיה מספר 57267)
- בוצעו שינויים בכותרות כדי להפוך את
- הוספנו עוד עיצוב ב-NDK
docs/
וביצענו תיקונים שונים במסמכים. - הוספנו תמיכה בטכניקה של ארכיון דק כשיוצרים ספריות סטטיות. (בעיה מספר 40303)
- הסקריפט
make-standalone-toolchain.sh
עודכן כדי לתמוך בספרייהstlport
בנוסף ל-gnustl
, כשמציינים את האפשרות--stl=stlport
. מידע נוסף זמין במאמרSTANDALONE-TOOLCHAIN.html
. - עדכנו את הסקריפט
make-standalone-toolchain.sh
כך שהאפשרות--llvm-version=
יוצרת את הסקריפטים$TOOLCHAIN_PREFIX-clang
ו-$TOOLCHAIN_PREFIX-clang++
בנוסף לסקריפטיםclang
ו-clang++
, כדי למנוע שימוש בטעות בהגדרות clang ו-clang++ של המארח. - נוספו שני דגלים להפעלה מחדש של שתי אופטימיזציות ב-Clang במעלה הזרם, שהושבתו ב-NDK כדי לשפר את התאימות לקוד שעבר קומפילציה על ידי GCC:
- נוסף דגל
-fcxx-missing-return-semantics
כדי להפעיל מחדש את missing return semantics ב-Clang 3.2 ואילך. בדרך כלל, כל הנתיבים צריכים להסתיים בפקודת return עבור פונקציה שמחזירה ערך. אם זה לא המצב, clang מוסיף הוראה לא מוגדרת (או מלכודת במצב ניפוי באגים) לנתיב ללא הצהרת החזרה. אם אתם בטוחים שהקוד שלכם נכון, אתם יכולים להשתמש בדגל הזה כדי לאפשר לאופטימיזציה לנצל את ההתנהגות הלא מוגדרת. אם אתם לא בטוחים, אל תשתמשו בדגל הזה. יכול להיות שהמתקשר עדיין יקבל ערך שגוי אקראי, אבל הכלי לא ינצל את זה ולא יקשה על ניפוי הבאגים בקוד. - נוסף הדגל
-fglobal-ctor-const-promotion
כדי להפעיל מחדש את הקידום של משתנים גלובליים עם בנאי סטטי לקבועים. באמצעות הדגל הזה, השלב של אופטימיזציה של משתנים גלובליים ב-LLVM מנסה להעריך את המשתנים הגלובליים עם בנאים סטטיים ולקדם אותם לקבועים גלובליים. למרות שהאופטימיזציה הזו נכונה, היא עלולה לגרום לאי-תאימות מסוימת לקוד שעבר קומפילציה על ידי GCC. לדוגמה, קוד יכול לבצעconst_cast
כדי להמיר את הקבוע לניתן לשינוי ולשנות אותו. ב-GCC, המשתנה נמצא במצב קריאה-כתיבה והקוד מופעל בטעות. ב-Clang, משתנה ה-const נמצא בזיכרון לקריאה בלבד, ועלול לגרום לקריסת האפליקציה.
- נוסף דגל
- נוספה תמיכה ב-
-mldc1-sdc1
לקומפיילרים MIPS GCC ו-Clang. כברירת מחדל, קומפיילרים מיישרים אובייקטים של 8 בייט בצורה נכונה ומפיקים את ההוראותldc1
ו-sdc1
כדי להעביר אותם. אם האפליקציה שלכם משתמשת בהקצאת זיכרון מותאמת אישית שלא תמיד תואמת לגבול של 8 בייטים של אובייקט חדש, כמו הקצאת הזיכרון שמוגדרת כברירת מחדל, האפליקציה עלולה לקרוס בגלל פעולותldc1
ו-sdc1
בזיכרון לא מיושר. במקרה כזה, צריך להשתמש בדגל-mno-ldc1-sdc1
כדי לעקוף את הבעיה. - הורדת רמת החומרה של האירוע מאזהרה למידע אם
APP_PLATFORM_LEVEL
גדול מ-APP_MIN_PLATFORM_LEVEL
. יכול להיות שהערך שלAPP_PLATFORM_LEVEL
יהיה נמוך יותר מזה שלAPP_PLATFORM
ב-jni/Application.mk
כי ל-NDK אין כותרות לכל הרמות. במקרה כזה, הרמה בפועל מוזזת כלפי מטה. הערך שלAPP_MIN_PLATFORM_LEVEL
מצוין על ידיandroid:minSdkVersion
במניפסט של האפליקציה. (בעיה מספר 39752) - הוספנו את השיטות
android_getCpuIdArm()
ו-android_setCpuArm()
ל-cpu-features.c
. התוספת הזו מאפשרת לאחזר בקלות את פרטי ה-CPUID של ARM. (בעיה מספר 53689) - בוצע שינוי ב-
ndk-build
כך שישתמש ב-as/ld
של GCC 4.7 לצורך קומפילציה של Clang.הערה: ב-GCC 4.7, השמות של
monotonic_clock
ו-is_monotonic
שונו ל-steady_clock
ו-is_steady
, בהתאמה. - הוספנו את האזהרות החדשות הבאות לסקריפט
ndk-build
:- הוספנו אזהרות אם נעשה שימוש ב-
LOCAL_LDLIBS/LDFLAGS
במודולים של ספרייה סטטית. - נוספה אזהרה אם להגדרה אין מודול לבנייה.
- הוספנו אזהרה לגבי ספריות שאינן ספריות מערכת שנעשה בהן שימוש ב-
LOCAL_LDLIBS/LDFLAGS
של ספרייה משותפת או מודולים הפעלה.
- הוספנו אזהרות אם נעשה שימוש ב-
- עדכנו את סקריפטים של build, כך שאם
APP_MODULES
לא מוגדר ורק ספריות סטטיות מופיעות ב-Android.mk
, הסקריפט מבצע build לכולן. (בעיה מספר 53502) - העדכון של
ndk-build
כולל תמיכה בנתיבים מוחלטים ב-LOCAL_SRC_FILES
. - הוסרו קובצי ההפעלה
*-gdbtui
, שהם כפילויות של קובצי ההפעלה*-gdb
עם האפשרות-tui
מופעלת. - עדכנו את סקריפטים הבנייה כדי להזהיר אתכם כשחלק הקצה הקדמי של מהדר Edison Design Group (EDG)
_STLP_HAS_INCLUDE_NEXT
מופעל מחדש. (בעיה מספר 53646) - נוסף משתנה הסביבה
NDK_LIBS_OUT
כדי לאפשר שינוי של הנתיב שלlibraries/gdbserver
מברירת המחדל$PROJECT/libs
. מידע נוסף זמין במאמרOVERVIEW.html
. - הגדרות ברירת המחדל של סקריפט ndk-build שונו כדי לקמפל קוד עם הגנה על מחרוזת פורמט
-Wformat -Werror=format-security
. אפשר להגדיר את הערך שלLOCAL_DISABLE_FORMAT_STRING_CHECKS=true
כ-false כדי להשבית את האפשרות. מידע נוסף זמין במאמרANDROID-MK.html
- הוספנו תמיכה בהדפסה מעוצבת של STL ב-
ndk-gdb-py
. מידע נוסף זמין במאמרNDK-GDB.html
. - נוספו בדיקות שמבוססות על מסגרות googletest.
- הוספנו התראה לסקריפט הבנייה של כלי הפיתוח, שתזהיר אתכם אם המעטפת הנוכחית
אינה
bash
.
- תיקונים בכותרות
Android NDK r8e (מרץ 2013)
- שינויים חשובים:
-
- נוספה קבוצת כלים של שרתי 64 ביט (סיומת שם החבילה
*-x86_64.*
). מידע נוסף זמין במאמריםCHANGES.HTML
וNDK-BUILD.html
. - נוסף קומפיילר Clang 3.2. GCC 4.6 עדיין מוגדר כברירת מחדל. מידע על השימוש בקומפיילר Clang זמין
CHANGES.HTML
. - נוסף כלי סטטי לניתוח קוד למארחי Linux/MacOSX. מידע על השימוש בכלי הניתוח מופיע במאמר
CHANGES.HTML
. - נוסף MCLinker למארחי Linux/MacOSX כתכונה ניסיונית. הכלי
ld.gold
linker הוא ברירת המחדל במקומות שבהם הוא זמין, לכן צריך להפעיל אותו באופן מפורש. מידע נוסף זמין במאמרCHANGES.HTML
. - הכלי ndk-build עודכן כך שישתמש במיון טופולוגי לתלות בין מודולים, מה שאומר שה-build ממיין אוטומטית את סדר הספריות שצוינו ב-
LOCAL_STATIC_LIBRARIES
, ב-LOCAL_WHOLE_STATIC_LIBRARIES
וב-LOCAL_SHARED_LIBRARIES
. מידע נוסף זמין במאמרCHANGES.HTML
. (בעיה מספר 39378)
- נוספה קבוצת כלים של שרתי 64 ביט (סיומת שם החבילה
- תיקוני באגים חשובים:
-
- תוקן סקריפט הבנייה כדי לבנות את כל שרשראות הכלים ב-
-O2
. בגרסאות קודמות, שרשראות הכלים נוצרו בצורה שגויה ללא אופטימיזציה. - תוקן סקריפט build שבו Clang/llvm נבנה ללא תנאי עבור MacOSX ב-64 ביט.
- תוקנה שגיאת קומפיילר פנימית ב-GCC 4.6/4.7:
gen_thumb_movhi_clobber at config/arm/arm.md:5832
. (בעיה מספר 52732) - תוקנה בעיה ב-build שבה GCC/ARM 4.6/4.7 לא מצליח לקשר קוד באמצעות פונקציות מובנות אטומיות של 64 ביט. (בעיה מספר 41297)
- תוקנו שגיאות של אי-התאמה בשימוש ב-DIV של מקשר GCC 4.7. (בעיה ב-Sourceware)
- תוקנה שגיאה פנימית של מהדר GCC 4.7
build_data_member_initialization, at cp/semantics.c:5790
. - תוקנה שגיאה פנימית של מהדר GCC 4.7
redirect_eh_edge_1, at tree-eh.c:2214
. (בעיה מספר 52909) - תוקן באג שגרם לשגיאת חלוקת זיכרון (segfault) ב-GCC 4.7. (בעיה ב-GCC)
- תוקנה הרזולוציה של השעון
<chrono>
והופעלה התכונהsteady_clock
. (בעיה מספר 39680) - תוקן כלי שרשרת כדי להפעיל את
_GLIBCXX_HAS_GTHREADS
עבור GCC 4.7 libstdc++. (בעיה 41770, בעיה 41859) - תוקנה בעיה בקוד X86 MXX/SSE שגרמה לכך שהקישור נכשל בגלל חוסר ב-
posix_memalign
. (שינוי 51872) - תוקנה שגיאת פילוח GCC4.7/X86 ב-
i386.c
, functiondistance_non_agu_define_in_bb()
. (שינוי 50383) - תוקן GCC4.7/X86 כדי לשחזר את ההתנהגות הקודמת של
cmov
. (בעיה ב-GCC) - תוקן הטיפול בערך ההחזרה NULL של
setlocale()
ב-libstdc++/GCC4.7. (בעיה מספר 46718) - תוקנה הפניה לא מוגדרת בזמן הריצה
ld.gold
אל__exidx_start
ואל__exidx_start_end
. (שינוי 52134) - תוקנה שגיאה פנימית של מהדר Clang 3.1 כשמשתמשים בספריית Eigen. (בעיה מספר 41246)
- תוקנה שגיאה פנימית של מהדר Clang 3.1, כולל
<chrono>
במצב C++11. (בעיה מספר 39600) - תוקנה שגיאת קומפיילר פנימית ב-Clang 3.1 כשנוצר קוד אובייקט לקריאה לשיטה
rvalue
עם אתחול אחיד. (בעיה מספר 41387) - תוקן יישור מחדש של מחסנית Clang 3.1/X86. (שינוי 52154)
- תוקנה בעיה ב-GNU Debugger (GDB) SIGILL בזמן ניפוי באגים ב-Android 4.1.2. (בעיה מספר 40941)
- תוקנה בעיה שבה GDB לא יכול להגדיר
source:line
נקודות עצירה כשסמלים מכילים נתיבי קבצים ארוכים ועקיפים. (בעיה מספר 42448) - תוקן GDB
read_program_header
עבור קובצי הפעלה של MIPS PIE. (שינוי 49592) - תוקנה שגיאת פילוח (segmentation fault) ב-
uncaught_exception()
(מספרSTLport
). (שינוי 50236) - תוקנה שגיאת אוטובוס
STLport
בטיפול בחריגים עקב גישה לא מיושרת אלDW_EH_PE_udata2
,DW_EH_PE_udata4
ו-DW_EH_PE_udata8
. - תוקנה בעיה של רקורסיה אינסופית ב-Gabi++ עם האופרטור
nothrow new[]
. (בעיה מספר 52833) - תוקנה בעיה ב-Gabi++ שגרמה להיסט שגוי למצביע של handler החריגים. (שינוי 53446)
- הוסר אובייקט מיותר של Gabi++ free on exception (שינוי 53447)
- תוקן סקריפט הבנייה כדי לבנות את כל שרשראות הכלים ב-
- תיקוני באגים אחרים:
-
- כותרות קבועות של NDK:
- הוסרו הגדרות מיותרות של
size_t
,ssize_t
ו-ptrdiff_t
. - תוקנה כותרת
fenv.h
של MIPS ו-ARM. - תוקן
stddef.h
כך שלא יוגדר מחדשoffsetof
כי הוא כבר קיים בשרשרת הכלים. - הוספנו את
Elf32_auxv_t
ואתElf64_auxv_t
ל-elf.h
. (בעיה מספר 38441) - תוקנו ההגדרות של
#ifdef
C++ בקובץ הכותרתOpenSLES_AndroidConfiguration.h
. (בעיה מספר 53163)
- הוסרו הגדרות מיותרות של
- תוקנה הבעיה
STLport
שגרמה להפסקת הפעולה אחרי שגיאת חוסר זיכרון במקום יציאה שקטה. - תוקנו הכותרות של המערכת ושל Gabi++ כדי לאפשר קומפילציה עם רמת API 8 ומטה.
- תוקן
cpufeatures
כך שלא ינותח/proc/self/auxv
. (בעיה מספר 43055) - תוקן
ld.gold
כך שלא יסתמך על libstdc++ של המארח, ובפלטפורמות Windows, כך שלא יסתמך על הספרייהlibgcc_sjlj_1.dll
. - תוקנה בעיה ב-Clang 3.1 שגורמת לפליטה של רשימת רישום לא עקבית ב-
.vsave
ולכשל בהרכבה. (שינוי 49930) - תוקן Clang 3.1 כדי לאפשר הידור של libgabi++ ולהעביר את
test-stlport
הבדיקות ליעדי בנייה של MIPS. (שינוי 51961) - תוקן Clang 3.1 כך שברירת המחדל היא הפעלת חריגים רק עבור C++, ולא עבור C.
- תוקנו כמה בעיות ב-Clang 3.1 כדי לעבור את רוב הבדיקות של חריגות GNU.
- תוקנו סקריפטים
clang
ו-clang++
בקומפיילר NDK עצמאי כדי לזהות את-cc1
ולא לציין את-target
כשנמצא. - תוקנה הבעיה
ndk-build
כדי לראות את הערךNDK_APP_OUT
שהוגדר ב-Application.mk
. - תוקנו X86
libc.so
ו-lib.a
שחסרו בהם הפונקציותsigsetjmp
ו-siglongjmp
שכבר הוגדרו ב-setjmp.h
. (בעיה מספר 19851) - בוצע תיקון ב-GCC 4.4.3/4.6/4.7 libstdc++ כדי לאפשר עבודה עם Clang ב-C++ 11. (בעיה ב-Clang)
- תוקן נתיב cygwin בארגומנט שהועבר אל
HOST_AWK
. - תוקנה אזהרת סקריפט
ndk-build
ב-Windows כשמריצים מתוך ספריית JNI של הפרויקט. (בעיה מספר 40192) - תוקנה בעיה שבה הסקריפט
ndk-build
לא נוצר אם בקובץ makefile יש רווחים לבנים בסוף ההגדרה שלLOCAL_PATH
. (בעיה מספר 42841)
- כותרות קבועות של NDK:
- שינויים אחרים:
-
- הפעלנו תמיכה בשרשור בערכת הכלים GCC/MIPS.
- הפונקציות העזר לטיפול בחריגים ב-GCC
__cxa_begin_cleanup
ו-__cxa_type_match
עודכנו כך שרמת החשיפה שלהן תהיה default, במקום hidden כמו ב-GNU libstdc++. מידע נוסף זמין במאמרCHANGES.HTML
. - עדכנו את סקריפטים הבנייה כך שספריות סטטיות של Gabi++ ו-STLport ייבנו עכשיו עם חשיפה מוסתרת, למעט כלי עזר לטיפול בחריגים.
- גרסת ה-build עודכנה כך ש-
STLport
מיועדת ל-ARM במצב Thumb. - נוספה תמיכה ב-
std::set_new_handler
ב-Gabi++. (בעיה 52805) - הופעלה קריאת המערכת
FUTEX
ב-GNU libstdc++. - בוצע עדכון של
ndk-build
כך שהוא לא מעתיק יותר ספרייה סטטית מוכנה מראש לספרייתobj/local/<abi>/
של פרויקט. (בעיה מספר 40302) - הוסר
__ARM_ARCH_5*__
מסקריפט ARMtoolchains/*/setup.mk
. (בעיה מספר 21132) - נוספו ספריות GNU libstdc++ ב-thumb ל-ARM.
- הופעלו הוראות MIPS floating-point
madd/msub/nmadd/nmsub/recip/rsqrt
עם 32-bit FPU. - הפעלנו את הכלי לאופטימיזציה של לולאות גרפיט ב-GCC 4.6 וב-4.7 כדי לאפשר יותר אופטימיזציות:
-fgraphite
, -fgraphite-identity
, -floop-block
, -floop-flatten
, -floop-interchange
, -floop-strip-mine
, -floop-parallelize-all
, ו--ftree-loop-linear
. (מידע) - האפשרות
polly
מופעלת ב-Clang 3.1 במארחי Linux ו-Max OS X 32-bit שמנתחים ומבצעים אופטימיזציה של הגישה לזיכרון. (מידע) - הופעל
-flto
ב-GCC 4.7, 4.6, Clang 3.2 ו-Clang 3.1 ב-Linux (Clang LTO באמצעות LLVMgold.so). אין תמיכה ביעדי קומפילציה של MIPS כיld.gold
לא זמין. - הופעלו
--plugin
ו---plugin-opt
עבורld.gold
ב-GCC 4.6/4.7. - הופעל
--text-reorder
עבורld.gold
ב-GCC 4.7. - הוגדר GNU libstdc++ עם
_GLIBCXX_USE_C99_MATH
שמבטל את ההגדרה של הסקריפטisinf
בכותרת bionic. מידע נוסף זמין במאמרCHANGES.html
. - הוספנו את
APP_LDFLAGS
לסקריפטים של ה-build. מידע נוסף זמין במאמרANDROID-MK.html
. - עדכנו את סקריפטים של ה-build כדי לאפשר ל-
NDK_LOG=0
להשבית אתNDK_LOG
. - עדכנו את סקריפטים של build כדי לאפשר ל-
NDK_HOST_32BIT=0
להשבית את ערכת הכלים של סביבת הפיתוח של המארח ב-32 ביט. - שינינו את ברירת המחדל של הדגלים GCC/X86
-march=
ו--mtune=
מ-pentiumpro
ו-generic
ל-i686
ו-atom
. - סקריפטים משופרים של build בשרשרת הכלים:
- תוקנה בעיית מרוץ תהליכים ב-
build-gcc.sh
עבור סוג ה-buildmingw
, שמנעה עיבוד מקביל של כמות משמעותית של build. - עדכנו את
build-gabi++.sh
ואתbuild-stlport.sh
כך שעכשיו אפשר להפעיל אותם מחבילת ה-NDK. (בעיה מספר 52835) - קבוע
run-tests.sh
באוסף כלי הניהולMSys
. - שיפרנו את ערכת הכלים של המארח ב-64 ביט ואת התמיכה ב-Canadian Cross build.
- עדכנו את סקריפט
build-mingw64-toolchain.sh
לגרסה עדכנית יותר. - נוספה אפשרות ליצור
libgnustl_static.a
ו-stlport_static.a
בלי חשיפה מוסתרת.
- תוקנה בעיית מרוץ תהליכים ב-
Android NDK r8d (דצמבר 2012)
- שינויים חשובים:
-
- הוספנו את מהדר GNU Compiler Collection (GCC) 4.7 ל-NDK. הקומפיילר GCC 4.6 עדיין מוגדר כברירת מחדל, ולכן צריך להפעיל את הגרסה החדשה באופן מפורש, כך:
- בשביל
ndk-build
, מייצאים את המשתנהNDK_TOOLCHAIN_VERSION=4.7
או מוסיפים אותו אלApplication.mk
. - בגרסאות build עצמאיות, מוסיפים את האפשרות
--toolchain=
אלmake-standalone-toolchain.sh
, לדוגמה:--toolchain=arm-linux-androideabi-4.7
הערה: התכונה הזו היא ניסיונית. מומלץ לנסות את התכונה ולדווח על בעיות.
- בשביל
- נוספה תמיכה בחריגים של
stlport
באמצעות gabi++. שימו לב שהגרסה החדשה של gabi++ תלויה ב-dlopen
ובקוד שקשור אליה, כלומר:- אי אפשר יותר ליצור קובץ הפעלה סטטי באמצעות האפשרות
-static
או לכלול אתlibstlport_static.a
באמצעותAPP_STL := stlport_static
. (עדיין אפשר להשתמש באפשרות-static
עם ערכת כלים עצמאית). הידור של קובץ הפעלה דינמי באמצעותinclude $(BUILD_EXECUTABLE)
ממשיך לפעול כי הקומפיילר מוסיף אוטומטית את האפשרות-ldl
. - אם הפרויקט שלכם מקשר באמצעות
-nostdlib
ו-{-Wl,--no-undefined}, אתם צריכים לכלול ידנית את האפשרות-ldl
.
CPLUSPLUS-SUPPORT.html
.הערה: התכונה הזו היא ניסיונית והיא פועלת טוב יותר עם קומפיילרים של GCC 4.6/4.7 מאשר עם GCC 4.4.3 או Clang 3.1. מומלץ לנסות את התכונה ולדווח על בעיות.
- אי אפשר יותר ליצור קובץ הפעלה סטטי באמצעות האפשרות
- נוספה אפשרות
-mstack-protector-guard=
ל-x86 לבחירה בין נתיב ברירת מחדל גלובלי שתואם לספריית C ישנה של Android (bionic) לבין נתיב tls חדש (%gs:20) ל--fstack-protector
,-fstack-protector-all
ו--fstack-protector-strong
באמצעות מהדרים מגרסה GCC 4.6 ומעלה.הערה: ההגדרה
-mstack-protector-guard
לא מפעילה אף אחת מהאפשרויות של-fstack-protector*
. - הוספנו את הפונקציה
android_setCpu()
ל-sources/android/cpufeatures/cpu-features.c
לשימוש במקרים שבהם אי אפשר לבצע זיהוי אוטומטי באמצעות/proc
ב-Android מגרסה 4.1 ואילך. (בעיה מספר 164154 ב-Chromium)
- הוספנו את מהדר GNU Compiler Collection (GCC) 4.7 ל-NDK. הקומפיילר GCC 4.6 עדיין מוגדר כברירת מחדל, ולכן צריך להפעיל את הגרסה החדשה באופן מפורש, כך:
- תיקוני באגים חשובים:
-
- תוקנה בעיה שגרמה לבנייה מחדש מיותרת של קובצי אובייקטים כשמשתמשים בסקריפט
ndk-build
. (בעיה מספר 39810) - תוקנה שגיאה בקישור בגרסה NDK 8c ל-Mac OS X 10.6.x שגרמה לשגיאה הבאה:
הבעיה הזו נגרמה כתוצאה מבנייה ב-Mac OS X 10.7, שיצרה קבצים בינאריים שלא היו תואמים ל-Mac OS 10.6.x ול-NDK.dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
- הוסרו האפשרויות
-x c++
מסקריפט ה-build העצמאי של Clang++. (בעיה מספר 39089) - תוקנו בעיות בשימוש באפשרות
NDK_TOOLCHAIN_VERSION=clang3.1
ב-Cygwin. (בעיה מספר 39585) - תוקן הסקריפט
make-standalone-toolchain.sh
כדי לאפשר יצירה של שרשרת כלים עצמאית באמצעות סביבות Cygwin או MinGW. אפשר להשתמש בשרשרת הכלים שנוצרת בסביבות של Cygwin, MingGW או CMD.exe. (בעיה מספר 39915, בעיה מספר 39585) - נוספה האפשרות החסרה
SL_IID_ANDROIDBUFFERQUEUESOURCE
בגרסאות build של Android-14 עבור ARM ו-X86. (בעיה מספר 40625) - תוקן זיהוי מעבדי x86 בתכונה
ANDROID_CPU_X86_FEATURE_MOVBE
. (בעיה מספר 39317) - תוקנה בעיה שמונעת מספריית התבניות הרגילה (STL) להשתמש במקורות C++ שלא כוללים את סיומת הקובץ
.cpp
. - תוקנה שגיאה פנימית של מהדר GCC 4.6 ARM ב-reload1.c:1061. (בעיה מספר 20862)
- תוקנה שגיאת קומפילציה פנימית של GCC 4.4.3 ARM ב-emit-rtl.c:1954. (בעיה מספר 22336)
- תוקנה שגיאת קומפילציה פנימית של GCC 4.4.3 ARM ב-postreload.c:396. (בעיה מספר 22345)
- תוקנה בעיה שגרמה ל-GCC 4.6/4.7 לדלג על פונקציות lambda. (בעיה מספר 35933)
- תוקנה בעיה שגרמה לבנייה מחדש מיותרת של קובצי אובייקטים כשמשתמשים בסקריפט
- תיקוני באגים אחרים:
-
- תיקונים בקובץ הכותרת של NDK:
- תוקן כך ש-
__WINT_TYPE__
ו-wint_t
יהיו מאותו סוג. - תיקנתי שגיאת הקלדה ב-
android/bitmap.h
. (בעיה מספר 15134) - תיקנתי שגיאת הקלדה ב-
errno.h
. - נוספה בדיקה לנוכחות של
__STDC_VERSION__
ב-sys/cdefs.h
. (בעיה מספר 14627) - ארגון מחדש של הכותרות ב-
byteswap.h
וב-dirent.h
. - תוקן
limits.h
כך שיכלולpage.h
שמאפשרPAGE_SIZE
הגדרות. (בעיה מספר 39983) - תוקן סוג ההחזרה של
glGetAttribLocation()
ושלglGetUniformLocation()
מ-int
ל-GLint
. - תוקן הקבוע
__BYTE_ORDER
בגרסאות build של x86. (בעיה מספר 39824)
- תוקן כך ש-
- תוקן סקריפט
ndk-build
כך שלא יחליף את-Os
ב--O2
בגרסאות של ARM. - תוקנו סקריפטים של בנייה כדי לאפשר החלפה של ההגדרות
HOST_AWK
,HOST_SED
ו-HOST_MAKE
. - תוקנה בעיה ב-
ld.gold
בגרסאותfsck_msdos
שקשורה לקישור אובייקטים שנבנו על ידי הקומפיילר Intel C/C++ (ICC). - תוקנה תמיכה ב-ARM EHABI ב-Clang בהתאם למפרטים.
- תוקנה בעיה ב-GNU Debugger (GDB) שגרמה לזמן ארוך מדי שנדרש למיפוי הקישורים של היעד במהלך אירועי
solib
. (בעיה מספר 38402) - תוקנה בעיה שגרמה לכך שקובץ
libgcc.a
לא נכלל בקישור של ספריות משותפות.
- תיקונים בקובץ הכותרת של NDK:
- שינויים אחרים:
-
- הוספנו תמיכה לאחור בפונקציות אטומיות מובנות של 64 ביט עבור ARM ל-GCC 4.6.
- נוספה תיעוד לגבי השהיה של פלט אודיו, יחד עם תיעוד אחר ותיקונים.
- תוקנו גרסאות באגים עם Clang כך שפונקציות שאינן void מעלות עכשיו אות
SIGILL
לנתיבים ללא הצהרת החזרה. - העדכון של
make-standalone-toolchain.sh
מאפשר לקבל את הסיומת-clang3.1
ששווה להוספה של--llvm-version=3.1
לשרשרת הכלים של GCC 4.6. - כתובת ה-URL של דוח האיתור באגים של GCC ו-Clang עודכנה ל: https://source.android.com/source/report-bug s.html
- הוספנו תמיכה ב-ARM ELF ל-
llvm-objdump
. - ההתראה treating c input as c++ (התייחסות לקלט c כאל c++) מוסתרת ב-Clang builds.
- העדכון של ה-build מאפשר ליצור רק את גרסת 32 הביט של
libiberty.a
ולמקם אותה ב-lib32/
.
Android NDK r8c (נובמבר 2012)
- שינויים חשובים:
-
- הוספנו את מהדר Clang 3.1 ל-NDK. GNU Compiler Collection (GCC) 4.6 היא עדיין ברירת המחדל, ולכן צריך להפעיל במפורש את אפשרות מהדר Clang באופן הבא:
- ב-
ndk-build
, מייצאים אתNDK_TOOLCHAIN_VERSION=clang3.1
או מוסיפים את הגדרת משתנה הסביבה הזו ל-Application.mk
. - בגרסאות build עצמאיות, מוסיפים
--llvm-version=3.1
ל-make-standalone-toolchain.sh
ומחליפים אתCC
ואתCXX
בקובץ ה-makefile ב-<tool-path>/bin/clang
וב-<tool-path>/bin/clang++
. פרטים נוספים מופיעים בכתובתSTANDALONE-TOOLCHAIN.html
.
הערה: התכונה הזו היא ניסיונית. מומלץ לנסות את התכונה ולדווח על בעיות.
- ב-
- הוספנו Gold linker
ld.gold
לשרשרת הכלים של Windows. Gold linker הוא גם ברירת המחדל ל-ARM ול-X86 בכל המארחים. אפשר לשנות את ברירת המחדל כדי להשתמש ב-linker על ידי הוספתLOCAL_LDFLAGS += -fuse-ld=bfd
ל-Android.mk
, או על ידי העברת-fuse-ld=bfd
לשורת הפקודה g++/clang++ שמבצעת את הקישור.ld.bfd
- נוספו בדיקות לרווחים בנתיב NDK לסקריפטים
ndk-build[.cmd]
ו-ndk-gdb
, כדי למנוע שגיאות בנייה שקשה לאבחן. - בוצעו השינויים הבאים בטיפול ברמת ה-API:
- שונה הלוגיקה של הבנייה כך שפרויקטים שמציינים
android-10
דרךandroid-13
ב-APP_PLATFORM
, ב-project.properties
או ב-default.properties
מקשרים ל-android-9
במקום ל-android-14
. - הגרסה עודכנה כך שקבצים הפעלה שמשתמשים ב-android-16 (Jelly Bean) ומעלה עוברים קומפילציה עם האפשרות
-fPIE
לקבצים הפעלה בלתי תלויים במיקום (PIE). אפשר לשלוט בהתנהגות הזו באמצעות אפשרות חדשהAPP_PIE
. פרטים נוספים מופיעים בכתובתAPPLICATION-MK.html
.הערה: כל רמות ה-API מעל 14 עדיין מקושרות ל-
platforms/android-14
ולא נוספו אובייקטים חדשים שלplatforms/android-N
. - בוצע שינוי ב-
ndk-build
כדי להציג אזהרות אם רמת ה-API המותאמת גבוהה יותר מ-android:minSdkVersion
ב-AndroidManifest.xml
של הפרויקט.
- שונה הלוגיקה של הבנייה כך שפרויקטים שמציינים
- עדכנו את ספריית העזר
cpu-features
כך שתכלול תכונות נוספות שספציפיות ל-ARM. פרטים נוספים מופיעים בכתובתsources/android/cpufeatures/cpu-features.h
. - השתנה הערך של long double בפלטפורמת X86 ל-8 בייט. סוג הנתונים הזה הוא עכשיו באותו גודל כמו double, אבל הוא עדיין נחשב לסוג נפרד.
- עדכון גרסה ל-
APP_ABI=armeabi-v7a
:- שיניתי את סוג ה-build הזה כדי להעביר את הפרמטר
-march=armv7-a
ל-linker. השינוי הזה מבטיח שספריות ספציפיות לגרסה 7 ו-crt*.o
יקושרו בצורה נכונה. - הוספנו את
-mfpu=vfpv3-d16
ל-ndk-build
במקום האפשרות-mfpu=vfp
שבה השתמשנו בגרסאות קודמות.
- שיניתי את סוג ה-build הזה כדי להעביר את הפרמטר
- הוספנו את מהדר Clang 3.1 ל-NDK. GNU Compiler Collection (GCC) 4.6 היא עדיין ברירת המחדל, ולכן צריך להפעיל במפורש את אפשרות מהדר Clang באופן הבא:
- תיקוני באגים חשובים:
-
- תוקנה הבעיה שבה הפעלת
make-standalone-toolchain.sh
עם הרשאות root גרמה לכך שחלק מהמשתמשים לא יכלו לגשת לשרשרת הכלים העצמאית. (Issue 35279)- לכל הקבצים והקבצים הניתנים להפעלה בחבילת ההפצה של NDK מוגדרות הרשאות קריאה והרשאות הפעלה לכולם.
- הבעלות או הקבוצה של
libstdc++.a
נשמרות עכשיו כשמעתיקים אותו.
- הוסר
\r
מיותר מ-Windows prebuiltecho.exe
. התו\r
המיותר גרם לכך שהפקודהgdb.setup
נכשלה ב-GNU Debugger (GDB) כי הוא הפך בטעות לחלק מהנתיב. (בעיה מספר 36054) - תוקנו בעיות ב-Windows parallel builds שלפעמים נכשלו בגלל בעיות בתזמון בהטמעה של
host-mkdir
. (בעיה מספר 25875) - תוקן GCC 4.4.3 GNU
libstdc++
כך שלא ימוזגו שמותtypeinfo
כברירת מחדל. פרטים נוספים זמינים במאמרtoolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo
. (בעיה מספר 22165) - תוקנה בעיה בהקשר
null
ב-GCC 4.6cp/mangle.c::write_unscoped_name
, שבה יכול להיות ש-GCC יקרוס כשההקשר הואnull
ומתבצעת דה-רפרנס ב-TREE_CODE
. - תוקנו קריסות של GCC 4.4.3 בהגדרות סוג ספציפיות ל-ARM NEON עבור ערכי float. (בעיה מספר 34613)
- תוקן יישום
STLport
פנימי_IteWrapper::operator*()
שבו הוחזר מיקום ישן במחסנית שמכיל את הערך שבוטל ההפניה שלו, וגרם לקריסות בזמן הריצה. (בעיה מספר 38630) - תיקונים ספציפיים ל-ARM:
- תוקנה בעיה ב-ARM GCC 4.4.3/4.6
g++
שגרמה להצגת אזהרה על כך שהשינוי של <va_list> ב-GCC 4.4. אין יותר צורך בפתרון העקיף שבו משתמשים במתג-Wno-psabi
כדי להימנע מהאזהרה הזו. - תוקנה בעיה שבה פרויקט עם סיומות
.arm
או.neon
ב-LOCAL_SRC_FILES
השתמש גם ב-APP_STL
. עםAPP_STL
, הסקריפטndk-build
מחפש קובצי C++ ב-LOCAL_SRC_FILES
לפני הוספת נתיבי STLheader/lib
לקומפילציה. בוצע שינוי ב-ndk-build
כדי לסנן את הסיומות.arm
ו-.neon
לפני החיפוש, אחרת פריטים ב-LOCAL_SRC_FILES
כמוmyfile.cpp.arm.neon
לא יקומפלו כקוד C++. - תוקן
binutils-2.21/ld.bfd
כך שהוא יכול לקשר אובייקט מ-binutils ישן יותר ללאtag_FP_arch
, מה שיצר הודעות שגיאה של assertion fail ב-GNU Binutils. (בעיה מספר 35209) - הוסרה האזהרה Unknown EABI object attribute 44 כש-
binutils-2.19/ld
מקשר אובייקט שנבנה מראש על ידיbinutils-2.21
חדש יותר - תוקנה בעיה בהידור של GNU
stdc++
עם-mthumb
וגם עם-march=armv7-a
, על ידי שינויmake-standalone-toolchain.sh
כדי לאכלס אתheaders/libs
בספריית המשנהarmv7-a/thumb
. (בעיה מספר 35616) - תוקנה השגיאה unresolvable R_ARM_THM_CALL relocation. (בעיה מספר 35342)
- תוקנה שגיאת קומפיילר פנימית ב-
reload1.c:3633
, שנגרמה בגלל הקצה העורפי של ARM שמצפה לסוג אופרנד שגוי כשמבצעים הרחבת סימן מ-char
. (בעיה מספר 50099 ב-GCC) - תוקנה שגיאה פנימית של קומפיילר עם סכום הזזה שלילי. (בעיה ב-GCC)
- תוקנה בעיה ב-ARM GCC 4.4.3/4.6
- תוקן
-fstack-protector
עבור X86, שהוא גם ברירת המחדל עבור יעד ה-ABI שלndk-build
x86. - תיקונים ספציפיים ל-MIPS:
- תוקנה בעיה שקשורה ל
STLport
endian-ness על ידי הגדרת_STLP_LITTLE_ENDIAN
ל-1 כשמבצעים קומפילציה של MIPSlibstlport_*
. - תוקנה בעיה ב-GCC
__builtin_unreachable
בזמן קומפילציה של LLVM. (בעיה מספר 54369 ב-GCC) - תיקון שבוצע בגרסה קודמת של
cc1
תהליך ההידור שצורכת 100% מהמעבד. (בעיה מספר 50380 ב-GCC)
- תוקנה בעיה שקשורה ל
- תיקונים ספציפיים ל-GNU Debugger:
- השבתנו את התמיכה ב-Python ב-gdb-7.x ב-build, אחרת פונקציית ההגדרה של gdb-7.x עשויה לבחור כל גרסה של Python שזמינה במארח ולבצע build של
gdb
עם תלות קשיחה בגרסה ספציפית של Python. (בעיה מספר 36120) - תוקנה הבעיה
ndk-gdb
כש-APP_ABI
מכיל אתall
ולא תואם לאף אחת מהארכיטקטורות הידועות. (בעיה מספר 35392) - תוקנה התמיכה בשם נתיב ב-Windows, על ידי שמירת התו
:
אם נראה שהוא יכול להיות חלק מנתיב ב-Windows שמתחיל באות כונן. (בעיה מספר 12843 ב-GDB) - תוקנה הוספה של תמיכה בנקודת עצירה בחומרה עבור ARM ב-
gdbserver
. (GDB Issue) - נוספה תיקון לקריאת
solibs
הנוכחי בלבד כשהמקשר עקבי. השינוי הזה יזרז את הטיפול באירועים שלsolib
. (בעיה מספר 37677) - נוסף תיקון כדי לאפשר ניסיונות חוזרים למציאת נקודות עצירה של
solib
. GDB מנסה עכשיו שובenable_break()
במהלך כל שיחה אלsvr4_current_sos()
עד שהיא מצליחה. (שינוי 43563) - תוקנה בעיה שגרמה לכך ש-
gdb
לא הפסיק בנקודות עצירה שהוצבו בספריותdlopen-ed
. (בעיה מספר 34856) - תוקן
SIGILL
במקשר הדינמי כשקוראים ל-dlopen()
, במערכת שבה/system/bin/linker
מופשט מסמלים ו-rtld_db_dlactivity()
מיושם כ-Thumb
, כי לא נשמרLSB
שלsym_addr
. (בעיה מספר 37147)
- השבתנו את התמיכה ב-Python ב-gdb-7.x ב-build, אחרת פונקציית ההגדרה של gdb-7.x עשויה לבחור כל גרסה של Python שזמינה במארח ולבצע build של
- תוקנה הבעיה שבה הפעלת
- תיקוני באגים אחרים:
-
- כותרות קבועות של NDK:
- תוקן קוד
arch-mips/include/asm/*
שהוסר בטעות מהליבה המקורית. (שינוי 43335) - הוחלף נתון של חבר במבנה
__unused
ב-__linux_unused
ב-linux/sysctl.h
וב-linux/icmp.h
כדי למנוע התנגשות עם#define __unused
ב-sys/cdefs.h
. - תוקן
fenv.h
עבור פונקציות C סגורות עם__BEGIN_DECLS
ו-__END_DECLS
. - הוסרו פונקציות שלא יושמו ב-
malloc.h
. - ההגדרה של
stdint.h
עבור קומפיילרים של ANSI תוקנה.uint64_t
(בעיה מספר 1952) - תוקנו פקודות מאקרו של מעבד מקדים ב-
<arch>/include/machine/*
. - הוחלף
link.h
עבור MIPS בגרסה חדשה שתומכת בכל הפלטפורמות. - הסרת את
linux-unistd.h
- העברה של פקודות מאקרו ספציפיות ל-GLibc
LONG_LONG_MIN
,LONG_LONG_MAX
ו-ULONG_LONG_MAX
מ-<pthread.h>
ל-<limits.h>
.
- תוקן קוד
- תוקנה גלישה על מאגר (buffer overflow) ב-
ndk-stack-parser
. - תוקן
_STLP_USE_EXCEPTIONS
, כך שאם הוא לא מוגדר, כל ההצהרות והשימושים ב-__Named_exception
מושמטים. ההידור והשימוש בהגדרות__Named_exception
מתרחשים רק כשמותר ל-STLport
להשתמש בחריגים. - תוקנה בנייה של חבילות NDK ל-Linux בלבד, בלי לבנות גם קוד ל-Windows. כדי לבצע build מהסוג הזה, משתמשים בהגדרות הבאות:
./build/tools/make-release.sh --force --systems=linux-x86
- תוקן
libc.so
כך שהוא לא מייצא אתatexit()
ואת__do_handler
. הסמלים האלה מיוצאים ל-builds של ARM על ידי גרסת המערכת של ספריית C כדי לתמוך בספריות מקוריות מדור קודם. קוד שנוצר על ידי NDK לא אמור להפנות אליהם ישירות. במקום זאת, כל ספרייה משותפת או קובץ הפעלה צריכים להטמיע גרסה משלהם של הסמלים האלה, שמסופקת על ידיcrtbegin_*.o
.אם הפרויקט שלכם מקושר לאפשרויות
-nostdlib -Wl,--no-undefined
, אתם צריכים לספק__dso_handle
משלכם כיcrtbegin_so.o
לא מקושר במקרה הזה. התוכן של__dso_handle
לא משנה, כמו שרואים בדוגמת הקוד הבאה:extern "C" { extern void *__dso_handle __attribute__((__visibility__ ("hidden"))); void *__dso_handle; }
- תוקן מפענח הסמלים עבור ARM שנעשה בו שימוש ב-
objdump
עבור רשומותplt
כדי ליצור טופס קריא יותרfunction@plt
. - הסרנו את הסמלים הבאים, שהוצגו ב-GCC 4.6
libgcc.a
, מהספרייה של פלטפורמת X86libc.so
: __aeabi_idiv0
,__aeabi_ldiv0
,__aeabi_unwind_cpp_pr1
ו-__aeabi_unwind_cpp_pr2
. - הוסרו רכיבים שלא בשימוש
.ctors
,.dtors
ו-.eh_frame
ב-MIPScrt*_so.S
. - עודכנה ההגדרה
ndk-gdb
כך שהיא מקבלת רק את השורה האחרונה של הפלט עבורndk-build
DUMP_XXXX
. השינוי הזה מבטיח שאםApplication.mk
אוAndroid.mk
מדפיסים משהו עם תחביר$(info ...)
, הוא לא יוחדר לתוצאה שלDUMP_XXXX
. (מידע נוסף)
- כותרות קבועות של NDK:
- שינויים אחרים:
-
- הוסרו הכותרות
arch-x86
ו-arch-mips
מההודעהplatforms/android-[3,4,5,8]
. הכותרות האלה היו חלקיות, כי ממשקי X86 ו-MIPS ABIs נתמכים רק ב-API מגרסה 9 ומעלה. - נתיב הכללה פשוט יותר של c++ בחבילות עצמאיות, כמו שמוצג בהמשך.
(בעיה מספר 35279)
<path>/arm-linux-androideabi/include/c++/4.6.x-google to: <path>/include/c++/4.6/
- תוקן
ndk-build
כדי לזהות יותר סיומות של קובצי C++ כברירת מחדל:.cc .cp .cxx .cpp .CPP .c++ .C
. עדיין אפשר להשתמש ב-LOCAL_CPP_EXTENSION
כדי להחליף את הגדרות התוסף האלה. - תוקנה בעיה ב-
samples/san-angeles
שגרמה למסך שחור או למסך קפוא בהפעלה מחדש. - החלפנו ממשקי API שהוצאו משימוש בדוגמאות של NDK.
(בעיה מספר 20017)
-
hello-gl2
מ-Android-5 ל-Android-7 native-activity
מ-Android-9 ל-Android-10native-audio
מ-Android-9 ל-Android-10native-plasma
מ-Android-9 ל-Android-10
-
- נוסף מיתוג חדש לקובצי הפעלה של Android עם סכימה פשוטה יותר בקטע
.note.android.ident
(מוגדר ב-crtbegin_static/dynamic.o
) כדי שכלי ניפוי הבאגים יוכלו לפעול בהתאם. הערכים והמאפיינים של המבנה מוגדרים כך:static const struct { int32_t namesz; /* = 8, sizeof ("Android") */ int32_t descsz; /* = 1 * sizeof(int32_t) */ int32_t type; /* = 1, ABI_NOTETYPE */ char name[sizeof "Android"]; /* = "Android" */ int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */ }
האפשרויות הקודמות למיתוג שמופיעות בקטע
.note.ABI-tag
הוצאו משימוש. - הוספנו סקריפט חדש
run-tests-all.sh
שקורא ל-run-tests.sh
ול-standalone/run.sh
עם תנאים שונים. הסקריפטrun-tests.sh
פועל ללא האפשרות--abi
, והוא משופר כך שהוא יכול לקמפל את רוב הבדיקות לכל ממשקי ה-ABI הנתמכים ולפעול בכל המכשירים המחוברים
- הוסרו הכותרות
Android NDK r8b (יולי 2012)
התכונות העיקריות בגרסה הזו הן ערכת כלים חדשה של GNU Compiler Collection (GCC) 4.6 ו-GNU Debugger (GDB) 7.3.x, שמוסיפה תמיכה בניפוי באגים בתמונת המערכת של Android 4.1 (רמת API 16).
- תיקוני באגים חשובים:
-
- תוקנו בעיות ב-
LOCAL_SHORT_COMMANDS
בסביבות Mac OS ו-Windows Cygwin בספריות סטטיות. תהליך יצירת קובץ הרשימה מהיר יותר, והוא לא נוצר מחדש כדי למנוע בנייה חוזרת של הפרויקט. - תוקנו כמה בעיות ב-
ndk-gdb
:- הכלי עודכן כדי להעביר את הדגלים
-e
,-d
ו--s
אל adb באופן עקבי יותר. - כלי מעודכן לקבלת שמות סדרתיים של מכשירים שמכילים רווחים.
- כלי מעודכן לאחזור מידע על
/system/bin/link
, כך ש-gdb
במארח יכול להגדיר נקודת עצירה ב-__dl_rtld_db_dlactivity
ולדעת על פעילות המקשר (למשל, סריקה מחדש של סמליsolib
כשמתבצעת קריאה ל-dlopen()
).
- הכלי עודכן כדי להעביר את הדגלים
- תוקן באג ב-
ndk-build clean
ב-Windows, שגרם לכך שהסרת./libs/*/lib*.so
נכשלה. - תוקנה הבעיה שגרמה לכך שהפונקציה
ndk-build.cmd
החזירהERRORLEVEL
אפס כש-make
נכשלת. - תוקנה הבעיה
libc.so
שגרמה לייצוא שגוי של הסמלים__exidx_start
ו-__exidx_end
. - תוקנה הבעיה
SEGV
כשמבטלים את הפעולה של המחסנית אחרי__libc_init
ב-ARM וב-MIPS.
- תוקנו בעיות ב-
- שינויים חשובים:
-
- נוסף GCC 4.6 toolchain (
binutils
2.21 עםgold
ו-GDB 7.3.x) כדי שיתקיים לצד GCC 4.4.3 toolchain המקורי (binutils
2.19 ו-GDB 6.6).- GCC 4.6 הוא עכשיו שרשרת הכלים שמוגדרת כברירת מחדל. אפשר להגדיר את
NDK_TOOLCHAIN_VERSION=4.4.3
ב-Application.mk
כדי לבחור את המקורית. - התמיכה ב-linker
gold
זמינה רק לארכיטקטורות ARM ו-x86 במארחי Linux ו-Mac OS. התמיכה הזו מושבתת כברירת מחדל. כדי להפעיל אתLOCAL_LDLIBS += -fuse-ld=gold
, מוסיפים אותו ב-Android.mk
. - תוכניות שקומפלו באמצעות
-fPIE
דורשות אתGDB
החדש לצורך ניפוי באגים, כולל קבצים בינאריים בתמונות מערכת של Android 4.1 (API ברמה 16). - הכלי
binutils
2.21ld
כולל תיקונים שהועברו מגרסה 2.22: - השבתנו את האופטימיזציה של
sincos()
כדי לשפר את התאימות עם פלטפורמות ישנות יותר.
- GCC 4.6 הוא עכשיו שרשרת הכלים שמוגדרת כברירת מחדל. אפשר להגדיר את
- אפשרויות הבנייה עודכנו כדי להפעיל את הביט Never eXecute (NX) ואת ההגנות
relro
/bind_now
כברירת מחדל:- נוספו
--noexecstack
לאסמבלר ו--z noexecstack
ללינקר, שמספקים הגנה מפני התקפות של הצפת חוצץ על ידי הפעלת ביט NX במחסנית וב-heap. - נוספו
-z relro
ו--z now
ל-linker כדי להקשיח את קטעי הנתונים הפנימיים אחרי הקישור, כדי להגן מפני פגיעויות אבטחה שנגרמות כתוצאה משחיתות בזיכרון. (מידע נוסף: 1, 2) - אפשר להשבית את התכונות האלה באמצעות האפשרויות הבאות:
- משביתים את ההגנה של NX על ידי הגדרת האפשרות
--execstack
עבור האסמבלר ו--z execstack
עבור ה-linker. - משביתים את ההקשחה של נתונים פנימיים על ידי הגדרת האפשרויות
-z norelro
ו--z lazy
עבור הכלי לקישור. - כדי להשבית את אמצעי ההגנה האלה ב-NDK
jni/Android.mk
, צריך להגדיר את האפשרויות הבאות:LOCAL_DISABLE_NO_EXECUTE=true # disable "--noexecstack" and "-z noexecstack" DISABLE_RELRO=true # disable "-z relro" and "-z now"
פרטים נוספים מופיעים במאמר
docs/ANDROID-MK.html
. - משביתים את ההגנה של NX על ידי הגדרת האפשרות
- נוספו
- נוספו מיתוג לקובצי הפעלה של Android עם הקטע
.note.ABI-tag
(ב-crtbegin_static/dynamic.o
) כדי שכלי ניפוי הבאגים יוכלו לפעול בהתאם. המבנה member והערכים מוגדרים כך:static const struct { int32_t namesz; /* = 4, sizeof ("GNU") */ int32_t descsz; /* = 6 * sizeof(int32_t) */ int32_t type; /* = 1 */ char name[sizeof "GNU"]; /* = "GNU" */ int32_t os; /* = 0 */ int32_t major; /* = 2 */ int32_t minor; /* = 6 */ int32_t teeny; /* = 15 */ int32_t os_variant; /* = 1 */ int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */ }
- נוסף GCC 4.6 toolchain (
- תיקוני באגים אחרים:
-
- תוקנה הבעיה שבה מיקום
mips-linux-gnu
נחתך כדי להתאים ל-R_MIPS_TLS_LDM
. (מידע נוסף) - תוקנו שגיאות פילוח (segfaults) בכלי
ld
כשמשתמשים ב---gc-sections
. (מידע נוסף) - תוקנה בעיה בספירת MIPS
GOT_PAGE
. (מידע נוסף) - תוקן הקישור לסמל האזהרה על מעקב ב-
mips_elf_count_got_symbols
. - תוקן הקישור לסמל האזהרה על מעקב ב-
mips_elf_allocate_lazy_stub
. - העברנו את MIPS
.dynamic
לפלח הנתונים, כך שניתן לכתוב בו. - הוחלפו ערכים שקודדו באופן קשיח לסמלים בגדלים הנכונים של פלחים עבור MIPS.
- הסרנו את האפשרות
-mno-shared
מברירות המחדל בערכת הכלים של MIPS. ברירת המחדל בשרשרת הכלים של Android היא-fPIC
(או-fpic
אם נתמך). אם לא מציינים במפורש את-mshared
,-fpic
,-fPIC
,-fpie
או-fPIE
, קומפיילר MIPS מוסיף את-mno-shared
שמשבית את PIC. תוקנה בעיה שבה הקומפיילר הוסיף את-mno-shared
במקרה הזה. - תוקנו שמות חבילות שגויים בדוגמאות
hello-jni
ו-two-libs
כדי שניתן יהיה לקמפל את הפרויקטtests
שמתחתיהן.
- תוקנה הבעיה שבה מיקום
- שינויים אחרים:
-
- המיקומים של קובצי ההפעלה השתנו:
- הועבר
gdbserver
מ-toolchain/<arch-os-ver>/prebuilt/gdbserver
אלprebuilt/android-<arch>/gdbserver/gdbserver
. - הקידומת של ערכת הכלים x86 שונתה מ-
i686-android-linux-
ל-i686-linux-android-
. - הועברו
sources/cxx-stl/gnu-libstdc++/include
ו-lib
אלsources/cxx-stl/gnu-libstdc++/4.6
כשקומפלו עם GCC 4.6, או אלsources/cxx-stl/gnu-libstdc++/4.4.3
כשקומפלו עם GCC 4.4.3. - הועברו
libbfd.a
ו-libintl.a
מ-lib/
אלlib32/
.
- הועבר
- הוספנו ושיפרנו סקריפטים שונים בשרשרת הכלים של NDK לבנייה מחדש ולבדיקה:
- נוסף
build-mingw64-toolchain.sh
כדי ליצור שרשרת כלים חדשה שמתארחת ב-Linux ומייצרת קובצי הפעלה של Win32 ו-Win64. - שיפור המהירות של
download-toolchain-sources.sh
באמצעות הפקודהclone
ושימוש רק ב-checkout
עבור הספריות שנדרשות לבניית קובצי ה-NDK toolchain. - נוספו סקריפטים של
build-host-gcc.sh
ושלbuild-host-gdb.sh
. - נוסף
tests/check-release.sh
כדי לבדוק את התוכן של ספריית התקנה נתונה של NDK או של חבילת NDK קיימת. - כתבנו מחדש את
tests/standalone/run.sh
הבדיקות העצמאיות .
- נוסף
- הוסרה הכותרת
if_dl.h
מכל הפלטפורמות והארכיטקטורות. רכיביAF_LINK
ו-sockaddr_dl
שהיא מתארת הם ספציפיים ל-BSD (כלומר, הם לא קיימים ב-Linux).
- המיקומים של קובצי ההפעלה השתנו:
Android NDK r8 (מאי 2012)
הגרסה הזו של NDK כוללת תמיכה ב-MIPS ABI וכמה תיקונים נוספים.
- תכונות חדשות:
-
- הוספנו תמיכה ב-MIPS ABI, שמאפשרת ליצור קוד מכונה שפועל במכשירי Android תואמים מבוססי MIPS. התכונות העיקריות של MIPS כוללות שרשראות כלים ספציפיות ל-MIPS, כותרות מערכת, ספריות ותמיכה בניפוי באגים. פרטים נוספים על תמיכה ב-MIPS זמינים ב-
docs/CPU-MIPS.html
בחבילת NDK.כברירת מחדל, הקוד נוצר למכשירים עם מעבדי ARM. אתם יכולים להוסיף
mips
להגדרה שלAPP_ABI
בקובץApplication.mk
כדי ליצור גרסה לפלטפורמות MIPS. לדוגמה, השורה הבאה מורה ל-ndk-build
ליצור את הקוד שלכם עבור שלושה ממשקי ABI שונים:APP_ABI := armeabi armeabi-v7a mips
אלא אם אתם מסתמכים על מקורות הרכבה ספציפיים לארכיטקטורה, כמו קוד הרכבה של ARM, לא אמור להיות צורך לשנות את קובצי
Android.mk
כדי ליצור קוד מכונה של MIPS. - אפשר ליצור שרשרת כלים עצמאית של MIPS באמצעות האפשרות
--arch=mips
כשמפעילים אתmake-standalone-toolchain.sh
. פרטים נוספים מופיעים במאמרdocs/STANDALONE-TOOLCHAIN.html
.
הערה: כדי לוודא שהאפליקציות שלכם זמינות למשתמשים רק אם המכשירים שלהם יכולים להריץ אותן, מערכת Google Play מסננת את האפליקציות על סמך המידע על ערכת ההוראות שכלול באפליקציה שלכם. לא נדרשת פעולה מצידכם כדי להפעיל את הסינון. בנוסף, מערכת Android עצמה בודקת את האפליקציה בזמן ההתקנה ומאפשרת להמשיך בהתקנה רק אם האפליקציה מספקת ספרייה שעברה קומפילציה לארכיטקטורת ה-CPU של המכשיר.
- הוספנו תמיכה ב-MIPS ABI, שמאפשרת ליצור קוד מכונה שפועל במכשירי Android תואמים מבוססי MIPS. התכונות העיקריות של MIPS כוללות שרשראות כלים ספציפיות ל-MIPS, כותרות מערכת, ספריות ותמיכה בניפוי באגים. פרטים נוספים על תמיכה ב-MIPS זמינים ב-
- תיקוני באגים חשובים:
-
- תוקנה שגיאת הקלדה בהטמעה של GAbi++, שבה התוצאה של
dynamic_cast<D>(b)
של אובייקט מחלקת בסיסb
לחלקת נגזרתD
מותאמת בצורה שגויה בכיוון ההפוך מהכיוון של מחלקת הבסיס. (בעיה מספר 28721) - תוקנה בעיה שבה
make-standalone-toolchain.sh
לא מצליח להעתיק אתlibsupc++.*
.
- תוקנה שגיאת הקלדה בהטמעה של GAbi++, שבה התוצאה של
- תיקוני באגים אחרים:
-
- תוקן
ndk-build.cmd
כדי להבטיח ש-ndk-build.cmd
פועל בצורה תקינה גם אם המשתמש הגדיר מחדש את משתנה הסביבהSHELL
, שעשוי להשתנות כשמתקינים מגוון כלי פיתוח בסביבות Windows.
- תוקן
Android NDK r7c (אפריל 2012)
הגרסה הזו של NDK כוללת תיקון חשוב למכשירים מבוססי Tegra2, וכמה תיקונים ושיפורים נוספים:
- תיקוני באגים חשובים:
-
- תוקנו קבצים בינאריים של GNU STL armeabi-v7a כדי שלא יגרמו לקריסה במכשירים שאינם NEON. הקבצים שסופקו עם NDK r7b לא הוגדרו בצורה נכונה, ולכן התרחשו קריסות במכשירים מבוססי Tegra2 ובמכשירים אחרים כשניסו להשתמש בפונקציות מסוימות של נקודה צפה (למשל,
cosf
,sinf
,expf
).
- תוקנו קבצים בינאריים של GNU STL armeabi-v7a כדי שלא יגרמו לקריסה במכשירים שאינם NEON. הקבצים שסופקו עם NDK r7b לא הוגדרו בצורה נכונה, ולכן התרחשו קריסות במכשירים מבוססי Tegra2 ובמכשירים אחרים כשניסו להשתמש בפונקציות מסוימות של נקודה צפה (למשל,
- שינויים חשובים:
-
- הוספנו תמיכה בספריות פלט מותאמות אישית באמצעות משתנה הסביבה
NDK_OUT
. אם המשתנה הזה מוגדר, הוא משמש לאחסון כל הקבצים שנוצרו באופן זמני, במקום$PROJECT_PATH/obj
. המשתנה מזוהה גם על ידיndk-gdb
. - הוספנו תמיכה ביצירת מודולים עם מאות או אפילו אלפי קבצים של מקורות על ידי הגדרת
LOCAL_SHORT_COMMANDS
ל-true
בקובץAndroid.mk
.השינוי הזה מאלץ את מערכת ה-build של NDK להוסיף את רוב האפשרויות של ה-linker או של ה-archiver לקבצי רשימה, כפתרון עקיף למגבלות על אורך שורת הפקודה. פרטים נוספים מופיעים בכתובת
docs/ANDROID-MK.html
.
- הוספנו תמיכה בספריות פלט מותאמות אישית באמצעות משתנה הסביבה
- תיקוני באגים אחרים:
-
- הטמעה קבועה
android_getCpuCount()
בספריית העזרcpufeatures
במכשירים מסוימים, שבהם הליבות מופעלות באופן דינמי על ידי המערכת, ההטמעה הקודמת דיווחה על המספר הכולל של ליבות פעילות בפעם הראשונה שהפונקציה נקראה, ולא על המספר הכולל של ליבות זמינות פיזית.
- הטמעה קבועה
Android NDK r7b (פברואר 2012)
הגרסה הזו של NDK כוללת תיקונים לגרסאות Windows מקומיות, ל-Cygwin ולשיפורים רבים אחרים:
- תיקוני באגים חשובים:
-
- בוצע עדכון ב-
sys/atomics.h
כדי למנוע בעיות של נכונות במכשירי ARM מסוימים מרובי ליבות. צריך לבנות מחדש את המקורות שלא שיניתם באמצעות הגרסה הזו של NDK, והבעיה הזו תיפתר לחלוטין. פרטים נוספים זמינים במאמרdocs/ANDROID-ATOMICS.html
. - חזרנו לגרסה
binutils
2.19 כדי לתקן בעיות בניפוי באגים שהופיעו ב-NDK r7 (שעבר לגרסהbinutils
2.20.1). - תוקן
ndk-build
ב-Linux 32 ביט. שגיאת אריזה גרמה לכך שגרסת 64 ביט של קובץ ההפעלהawk
נכללה ב-NDK r7 בתיקייהprebuilt/linux-x86/bin
. - תוקן build מקורי של Windows (
ndk-build.cmd
). מצבי build אחרים לא הושפעו. התיקונים כוללים:- תוקנה שגיאה של לולאה אינסופית או גלישת מחסנית שקרתה בניסיון לקרוא ל-
ndk-build.cmd
מספרייה שלא הייתה בראש נתיב הפרויקט (למשל, בכל ספריית משנה שלו). - תוקנה בעיה שבה המערכת התעלמה מקובצי התלות שנוצרו אוטומטית. המשמעות הייתה שעדכון של header לא הפעיל קומפילציה מחדש של מקורות שכללו אותו.
- תוקנה בעיה שבה לא הייתה אפשרות לטפל כראוי בתווים מיוחדים בקבצים או בנתיבים, מלבד רווחים ומרכאות.
- תוקנה שגיאה של לולאה אינסופית או גלישת מחסנית שקרתה בניסיון לקרוא ל-
- תוקן כלי שרשרת עצמאי ליצירת קבצים בינאריים תקינים כשמשתמשים ב-
-lstdc++
(כלומר, קישור לזמן הריצה של GNUlibstdc++
C++). כדאי להשתמש ב--lgnustl_shared
אם רוצים לקשר לגרסה של הספרייה המשותפת, או ב--lstdc++
לגרסה הסטטית.פרטים נוספים על התיקון הזה זמינים במאמר
docs/STANDALONE-TOOLCHAIN.html
. - תוקן
gnustl_shared
ב-Cygwin. הקובץlibsupc++.a
נמצא במיקום הנכון, אבל הלינקר התלונן שהוא לא מוצא אותו. - תוקן קישור Cygwin C++ כשלא משתמשים בזמן ריצה ספציפי של C++ דרך
APP_STL
.
- בוצע עדכון ב-
- שינויים אחרים:
-
- כשהאפליקציה משתמשת בזמן הריצה של GNU
libstdc++
, הקומפיילר לא יפעיל יותר בכוח חריגים ו-RTTI. השינוי הזה מוביל לקוד קטן יותר.אם אתם צריכים את התכונות האלה, אתם צריכים לבצע אחת מהפעולות הבאות:
- צריך להפעיל חריגים או RTTI באופן מפורש במודולים או
Application.mk
. (מומלץ) - מגדירים את
APP_GNUSTL_FORCE_CPP_FEATURES
לערך'exceptions'
,'rtti'
או לשניהם ב-Application.mk
. פרטים נוספים מופיעים במאמרdocs/APPLICATION-MK.html
.
- צריך להפעיל חריגים או RTTI באופן מפורש במודולים או
-
ndk-gdb
פועל עכשיו בצורה תקינה כשהאפליקציה כוללת שירותים פרטיים שפועלים בתהליכים עצמאיים. הוא מנפה באגים בתהליך הראשי של האפליקציה, במקום בתהליך הראשון שמופיע ברשימה שלps
, שהוא בדרך כלל תהליך שירות. - תוקן באג נדיר שבו NDK r7 לא כיבד את הערך
LOCAL_ARM_MODE
ותמיד קומפל קבצים מסוימים (אבל לא את כולם) להוראות של 32 ביט. -
STLport
: רענון המקורות כך שיתאימו לגרסת פלטפורמת Android. העדכון הזה כולל תיקוני באגים קלים:- תיקון של יצירת מופע מסוג לא שלם
- תוקנה שגיאת הקלדה קלה של '==' לעומת '='
- השימוש ב-
memmove
במקום ב-memcpy
ב-string::assign
- הוספנו טיפול טוב יותר ב-
IsNANorINF
,IsINF
,IsNegNAN
וכו'.
פרטים מלאים מופיעים ביומן של פעולות ה-commit.
-
STLport
: הוסרו 5 מאתחלי סטטיקה מיותרים מהספרייה. - הספריות של GNU libstdc++ ל-armeabi-v7a קומפלו בטעות ל-armeabi במקום זאת. לשינוי הזה לא הייתה השפעה על הנכונות, אבל שימוש ב-ABI הנכון אמור לספק ביצועים טובים יותר.
- ספריית העזר
cpu-features
עודכנה כדי לדווח על שלושה מאפיינים אופציונליים של מעבד x86 (SSSE3
, MOVBE
ו-POPCNT
). פרטים נוספים זמינים במאמרdocs/CPU-FEATURES.html
. - העדכון של
docs/NDK-BUILD.html
כולל עכשיו את האפשרותNDK_APPLICATION_MK
במקוםNDK_APP_APPLICATION_MK
כדי לבחור קובץApplication.mk
בהתאמה אישית. - Cygwin:
ndk-build
כבר לא יוצר קובץ ריק בשם NUL בספרייה הנוכחית כשמפעילים אותו. - Cygwin: נוסף זיהוי אוטומטי טוב יותר של תלות. בגרסה הקודמת, הוא לא פעל בצורה תקינה במקרים הבאים:
- כשהקידומת של כונן Cygwin לא הייתה
/cygdrive
. - כשמשתמשים בהתקנים ללא כונן, למשל כש-Cygwin מתרגם את
/home
ל-\\server\subdir
במקום ל-C:\Some\Dir
.
- כשהקידומת של כונן Cygwin לא הייתה
- Cygwin:
ndk-build
לא מנסה להשתמש בכלים המקוריים של Windows ב-$NDK/prebuilt/windows/bin
עם גרסאות מסוימות של Cygwin או GNU Make.
- כשהאפליקציה משתמשת בזמן הריצה של GNU
Android NDK r7 (נובמבר 2011)
הגרסה הזו של NDK כוללת תכונות חדשות לתמיכה בפלטפורמת Android 4.0, וגם תוספות ושיפורים רבים אחרים:
- תכונות חדשות
-
- נוספו ממשקי NDK API רשמיים ל-Android 4.0 (רמת API 14), שמוסיפים לפלטפורמה את התכונות המקוריות הבאות:
- נוסף API מובנה למולטימדיה שמבוסס על התקן Khronos Group OpenMAX AL 1.0.1. הכותרות החדשות
<OMXAL/OpenMAXAL.h>
ו-<OMXAL/OpenMAXAL_Android.h>
מאפשרות לאפליקציות שמטרגטות את רמת API 14 לבצע פלט מולטימדיה ישירות מקוד מקורי באמצעות ממשק חדש של תור מאגרים ספציפי ל-Android. לפרטים נוספים, אפשר לעיין במאמרים בנושאdocs/openmaxal/index.html
ובכתובת http://www.khronos.org/openmax/. - עדכנו את API האודיו המקורי על סמך התקן Khronos Group OpenSL ES 1.0.1. בעזרת רמת API 14, אפשר עכשיו לפענח אודיו דחוס (למשל MP3, AAC, Vorbis) ל-PCM. פרטים נוספים זמינים במאמר
docs/opensles/index.html
ובכתובת http://www.khronos.org/opensles/.
- נוסף API מובנה למולטימדיה שמבוסס על התקן Khronos Group OpenMAX AL 1.0.1. הכותרות החדשות
- נוספה תמיכה ב-CCache. כדי להאיץ בנייה מחדש של פרויקטים גדולים, מגדירים את משתנה הסביבה
NDK_CCACHE
לערךccache
(או לנתיב של קובץ הבינאריccache
). כשמצהירים על CCache, מערכת ה-build של NDK משתמשת בו באופן אוטומטי כשמבצעים קומפילציה של קובץ מקור כלשהו. לדוגמה:export NDK_CCACHE=ccache
הערה: CCache לא נכלל במהדורת NDK, ולכן צריך להתקין אותו לפני השימוש. מידע נוסף על CCache זמין בכתובת http://ccache.samba.org.
- הוספנו תמיכה בהגדרת
APP_ABI
ל-all
כדי לציין שרוצים ליצור את מודולי ה-NDK לכל ה-ABI שנתמכים בגרסת ה-NDK שצוינה. המשמעות היא שאחת משתי השורות הבאות בקובץApplication.mk
שוות במהדורה הזו:APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
האפשרות הזו פועלת גם אם מגדירים את
APP_ABI
כשמפעילים את הפקודהndk-build
משורת הפקודה. זו דרך מהירה לבדוק שהפרויקט בנוי לכל ממשקי ה-ABI הנתמכים בלי לשנות אתApplication.mk file
של הפרויקט. לדוגמה:ndk-build APP_ABI=all
- נוסף משתנה
LOCAL_CPP_FEATURES
ב-Android.mk
שמאפשר להצהיר על תכונות C++ (RTTI או Exceptions) שבהן נעשה שימוש במודול. כך תוכלו לוודא שהקישור הסופי פועל כמו שצריך אם יש לכם מודולים מוכנים מראש שתלויים בתכונות האלה. פרטים נוספים מופיעים במאמריםdocs/ANDROID-MK.html
ו-docs/CPLUSPLUS-SUPPORT.html
. - קיצור הנתיבים לקובצי המקור והאובייקט שמשמשים בפקודות build. כשמפעילים את
$NDK/ndk-build
מנתיב הפרויקט, הנתיבים לקובצי המקור, האובייקט והקובץ הבינארי שמועברים לפקודות הבנייה קצרים משמעותית עכשיו, כי הם מועברים ביחס לספרייה הנוכחית. האפשרות הזו שימושית כשיוצרים פרויקטים עם הרבה קבצים של קוד מקור, כדי להימנע ממגבלות על האורך המקסימלי של שורת הפקודה שנתמכת על ידי מערכת ההפעלה של המארח. ההתנהגות לא משתנה אם מפעילים אתndk-build
מספריית משנה בעץ הפרויקט, או אם מגדירים אתNDK_PROJECT_PATH
כך שיצביע על ספרייה ספציפית.
- נוספו ממשקי NDK API רשמיים ל-Android 4.0 (רמת API 14), שמוסיפים לפלטפורמה את התכונות המקוריות הבאות:
- תכונות ניסיוניות
-
עכשיו אפשר ליצור קובצי מקור של NDK ב-Windows בלי Cygwin, על ידי קריאה לסקריפט
ndk-build.cmd
משורת הפקודה מנתיב הפרויקט. הסקריפט מקבל בדיוק את אותם ארגומנטים כמו סקריפטndk-build
המקורי. חבילת Windows NDK מגיעה עם קבצים בינאריים משלה שנוצרו מראש עבור GNU Make, Awk וכלים אחרים שנדרשים לבנייה. לא אמורה להיות דרישה להתקנת רכיבים נוספים כדי לקבל מערכת בנייה תקינה.חשוב:
ndk-gdb
לא פועל ב-Windows, ולכן עדיין צריך את Cygwin כדי לבצע ניפוי באגים.התכונה הזו עדיין ניסיונית, לכן אתם מוזמנים לנסות אותה ולדווח על בעיות במסד הנתונים הציבורי של באגים או בפורום הציבורי. כל הדגימות ובדיקות היחידה שנשלחו עם NDK עוברות קומפילציה בהצלחה עם התכונה הזו.
- תיקוני באגים חשובים
-
- ספריות משותפות מיובאות מותקנות עכשיו כברירת מחדל במיקום ההתקנה של היעד (
libs/<abi>
) אםAPP_MODULES
לא מוגדר ב-Application.mk
. לדוגמה, אם מודול ברמה העליונהfoo
מייבא מודולbar
, אז גםlibfoo.so
וגםlibbar.so
מועתקים למיקום ההתקנה. קודם לכן, רקlibfoo.so
הועתק, אלא אם ציינתם אתbar
גם ב-APP_MODULES
. אם מגדירים אתAPP_MODULES
באופן מפורש, ההתנהגות לא משתנה. ndk-gdb
עכשיו פועל בצורה תקינה בפעילויות עם כמה קטגוריות במסנני הכוונות הראשיים שלהן.- ייבוא של ספריות סטטיות הוא עכשיו טרנזיטיבי כמו שצריך. לדוגמה, אם מודול ברמה העליונה
foo
מייבא ספרייה סטטיתbar
שמייבאת ספרייה סטטיתzoo
, המודולlibfoo.so
יקושר עכשיו גם לספרייהlibbar.a
וגם לספרייהlibzoo.a
.
- ספריות משותפות מיובאות מותקנות עכשיו כברירת מחדל במיקום ההתקנה של היעד (
- שינויים אחרים
-
-
docs/NATIVE-ACTIVITY.HTML
: תיקון שגיאת הקלדה. רמת ה-API המינימלית צריכה להיות 9, ולא 8 לפעילויות מקומיות. -
docs/STABLE-APIS.html
: נוסף תיעוד חסר שבו מפורט ש-EGL הוא API יציב נתמך, החל מרמת API 9. -
download-toolchain-sources.sh
: בוצע עדכון להורדת מקורות ערכת הכלים מ-android.googlesource.com, שהוא המיקום החדש של שרתי AOSP. - נוסף זמן ריצה חדש לתמיכה ב-C++ בשם
gabi++
. פרטים נוספים על השינוי הזה זמינים בdocs/CPLUSPLUS-SUPPORT.html
. - נוסף זמן ריצה חדש לתמיכה ב-C++ בשם
gnustl_shared
, שתואם לגרסת הספרייה המשותפת של GNU libstdc++ v3 (רישיון GPLv3). מידע נוסף זמין באתרdocs/CPLUSPLUS-SUPPORT.html
- הוספנו תמיכה ב-RTTI בזמני הריצה של STLport C++ (אין תמיכה בחריגים).
- הוספנו תמיכה בכמה סיומות קבצים ב-
LOCAL_CPP_EXTENSION
. לדוגמה, כדי לקמפל אתfoo.cpp
ואתbar.cxx
כמקורות C++, צריך להצהיר על הדברים הבאים:LOCAL_CPP_EXTENSION := .cpp .cxx
- הוסרו הרבה סמלים לא רצויים שיוצאו מספריות מערכת משותפות בזמן הקישור שסופקו על ידי NDK. כך אפשר לוודא שהקוד שנוצר באמצעות ערכת הכלים העצמאית לא תלוי בטעות בסמל ABI לא יציב (למשל, כל סמל libgcc.a שמשתנה בכל פעם שערכת הכלים שמשמשת לבניית הפלטפורמה משתנה).
- רעננו את הכותרות של EGL ו-OpenGLES Khronos כדי לתמוך ביותר תוספים. הערה:
הפעולה הזו לא משנה את ה-ABI של NDK בספריות המתאימות,
כי אפליקציית הלקוח צריכה לבדוק כל תוסף בזמן הריצה.
התוספים שזמינים תלויים במכשיר ובמנהלי ההתקנים של ה-GPU, ולא בגרסת הפלטפורמה שפועלת במכשיר. השינויים בכותרת פשוט מוסיפים קבועים וסוגים חדשים כדי להקל על השימוש בתוספים אחרי שהם נבדקו באמצעות
eglGetProcAddress()
אוglGetProcAddress()
. התוספים החדשים שנתמכים מפורטים ברשימה הבאה:- GLES 1.x
-
GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_APPLE_texture_2D_limited_npot
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_lod_bias
GL_IMG_read_format
GL_IMG_texture_compression_pvrtc
GL_IMG_texture_env_enhanced_fixed_function
GL_IMG_user_clip_plane
GL_IMG_multisampled_render_to_texture
GL_NV_fence
GL_QCOM_driver_control
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_perfmon_global_mode
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
- GLES 2.0
-
GL_OES_element_index_uint
GL_OES_get_program_binary
GL_OES_mapbuffer
GL_OES_packed_depth_stencil
GL_OES_texture_3D
GL_OES_texture_float
GL_OES_texture_float_linear
GL_OES_texture_half_float_linear
GL_OES_texture_npot
GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_AMD_program_binary_Z400
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_compression_dxt1
GL_IMG_program_binary
GL_IMG_read_format
GL_IMG_shader_binary
GL_IMG_texture_compression_pvrtc
GL_IMG_multisampled_render_to_texture
GL_NV_coverage_sample
GL_NV_depth_nonlinear
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
- EGL
-
EGL_ANDROID_recordable
EGL_NV_system_time
-
Android NDK r6b (אוגוסט 2011)
הגרסה הזו של NDK לא כוללת תכונות חדשות בהשוואה לגרסה r6. בגרסה r6b תוקנו הבעיות הבאות שזוהו בגרסה r6:
- תיקוני באגים חשובים
-
- תוקן ה-build כשמשתמשים ב-
APP_ABI="armeabi x86"
ל-builds של כמה ארכיטקטורות. - תוקן המיקום של קבצים בינאריים מוכנים מראש של STLport בחבילת ההפצה של NDK. באג בסקריפט האריזה מיקם אותם במיקום שגוי.
- שימוש קבוע ב-
atexit()
בספריות משותפות עם ערכת הכלים x86standalone. - הבעיה
make-standalone-toolchain.sh --arch=x86
נפתרה. בעבר, התהליך נכשל כי לא הועתקו קובצי ה-GNU libstdc++ הבינאריים למיקום הנכון. - תוקנו האזהרות של מקשר שרשרת הכלים העצמאית לגבי הגדרה וגודל חסרים של הסמל
__dso_handle
(ARM בלבד). - תוקן סדר ההכללה של
$(SYSROOT)/usr/include
בגרסאות x86. מידע נוסף זמין בבאג. - תוקנו ההגדרות של
ptrdiff_t
ו-size_t
במערכות ספציפיות ל-x86 כשמשתמשים בהן עם ערכת כלים עצמאית ל-x86.
- תוקן ה-build כשמשתמשים ב-
Android NDK r6 (יולי 2011)
הגרסה הזו של NDK כוללת תמיכה ב-x86 ABI ושינויים קלים אחרים.
מידע מפורט על השינויים בגרסה הזו מופיע במסמך CHANGES.HTML
שכלול בחבילת NDK.
- הערות כלליות:
-
- הוספנו תמיכה ב-x86 ABI, שמאפשרת ליצור קוד מכונה
שפועל במכשירי Android תואמים שמבוססים על x86. התכונות העיקריות של x86
כוללות שרשראות כלים ספציפיות ל-x86, כותרות מערכת, ספריות ותמיכה בניפוי באגים. כל הפרטים לגבי תמיכה ב-x86 מופיעים ב-
docs/CPU-X86.html
בחבילת NDK.כברירת מחדל, הקוד נוצר למכשירים מבוססי ARM, אבל אפשר להוסיף x86 להגדרה של
APP_ABI
בקובץApplication.mk
כדי ליצור קוד לפלטפורמות x86. לדוגמה, השורה הבאה מורה ל-ndk-build
ליצור את הקוד שלכם עבור שלושה ממשקי ABI שונים:APP_ABI := armeabi armeabi-v7a x86
אלא אם אתם מסתמכים על מקורות הרכבה מבוססי ARM, לא תצטרכו לשנות את קובצי
Android.mk
כדי ליצור קוד מכונה x86. - אפשר ליצור שרשרת כלים עצמאית של x86 באמצעות האפשרות
--toolchain=x86-4.4.3
כשקוראים ל-make-standalone-toolchain.sh
. פרטים נוספים מופיעים במאמרdocs/STANDALONE-TOOLCHAIN.html
. - הכלי החדש
ndk-stack
מאפשר לכם לתרגם עקבות מחסנית ב-logcat
שנוצרו על ידי קוד מקורי. הכלי מתרגם כתובות של הוראות לפורמט קריא שמכיל פרטים כמו הפונקציה, קובץ המקור ומספר השורה שמתאימים לכל מסגרת מחסנית. מידע נוסף ודוגמה לשימוש זמינים במאמרdocs/NDK-STACK.html
.
- הוספנו תמיכה ב-x86 ABI, שמאפשרת ליצור קוד מכונה
שפועל במכשירי Android תואמים שמבוססים על x86. התכונות העיקריות של x86
כוללות שרשראות כלים ספציפיות ל-x86, כותרות מערכת, ספריות ותמיכה בניפוי באגים. כל הפרטים לגבי תמיכה ב-x86 מופיעים ב-
- שינויים אחרים:
arm-eabi-4.4.0
, שהוצאה משימוש מאז NDK r5, הוסרה מההפצה של NDK.
Android NDK r5c (June 2011)
הגרסה הזו של NDK לא כוללת תכונות חדשות בהשוואה לגרסה r5b. בגרסת r5c תוקנו הבעיות הבאות שזוהו בגרסת r5b:
- תיקוני באגים חשובים:
-
-
ndk-build
: תוקן באג נדיר שהופיע כשניסו לבצע בנייה מקבילה של פרויקטים שאפשר לבצע בהם ניפוי באגים. - תוקנה שגיאת הקלדה שמנעה את הפעולה התקינה של
LOCAL_WHOLE_STATIC_LIBRARIES
עם ערכת הכלים החדשה, והוספנו תיעוד בנושא ב-docs/ANDROID-MK.html
. - תוקן באג שגרם לקריסה של קוד שמקושר ל-
gnustl_static
כשהוא מופעל בגרסאות פלטפורמה ישנות יותר מרמת API 8 (Android 2.2). -
ndk-gdb
: תוקן באג שגרם לשגיאת פילוח (segmentation fault) כשמבצעים ניפוי באגים במכשירי Android 3.0 או גרסאות חדשות יותר. -
<android/input.h>
: שתי פונקציות שהוצגו ברמת API 9 (Android 2.3) היו שגויות ותוקנו. הפעולה הזו גורמת לשבירה של ממשק ה-API המקורי, אבל הממשק הבינארי למערכת לא משתנה. בפונקציות השגויות חסר פרמטרhistory_index
, וההגדרות הנכונות מוצגות בהמשך:float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event, size_t pointer_index, size_t history_index); float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event, size_t pointer_index, size_t history_index);
- עדכנו את קובץ ה-ARM הבינארי של ספריית C לרמת API 9 (Android 2.3) כדי לחשוף בצורה נכונה בזמן הקישור פונקציות חדשות שנוספו לרמת ה-API הזו (לדוגמה,
pthread_rwlock_init
).
-
- שיפורים ותיקונים קלים:
-
- קבצי אובייקט תמיד מקושרים עכשיו לפי הסדר שבו הם מופיעים ב-
LOCAL_SRC_FILES
. בעבר זה לא היה המצב כי הקבצים קובצו לפי סיומות המקור. - אם הפקודה
import-module
נכשלת, היא מדפיסה עכשיו את רשימת הספריות שנבדקו. הבדיקה הזו שימושית כדי לוודא שההגדרה שלNDK_MODULE_PATH
שבה נעשה שימוש במערכת הבנייה היא נכונה. - אם הפקודה
import-module
מצליחה, היא מדפיסה עכשיו את הספרייה שבה נמצא המודול ביומן (אפשר לראות את היומן באמצעותNDK_LOG=1
). - הגדלנו את מהירות הבנייה של אפליקציות שאפשר לנפות בהן באגים, כשיש מספר גדול מאוד של ספריות כלולות בפרויקט.
-
ndk-gdb
: זיהוי טוב יותר של כשלים ב-adb shell
ושיפור הודעות השגיאה. -
<pthread.h>
: תוקן ההגדרה של PTHREAD_RWLOCK_INITIALIZER
לרמת API 9 (Android 2.3) ומעלה. - תוקנה בעיה שבה מודול יכול לייבא את עצמו, מה שגורם ללולאה אינסופית ב-GNU Make.
- תוקן באג שגרם לכך שה-build נכשל אם הערך של
LOCAL_ARM_NEON
הוגדר כ-true (שגיאת הקלדה ב-build/core/build-binary.mk
). - תוקן באג שמנע את ההידור של קובצי הרכבה
.s
(קבצים.S
היו תקינים).
- קבצי אובייקט תמיד מקושרים עכשיו לפי הסדר שבו הם מופיעים ב-
Android NDK r5b (ינואר 2011)
הגרסה הזו של NDK לא כוללת תכונות חדשות בהשוואה לגרסה r5. בגרסה r5b תוקנו הבעיות הבאות שזוהו בגרסה r5:
- קובצי ה-r5 הבינאריים דרשו glibc 2.11, אבל קובצי ה-r5b הבינאריים נוצרים באמצעות שרשרת כלים מיוחדת שמיועדת ל-glibc 2.7 ומעלה. התוכנות הבינאריות של Linux toolchain פועלות עכשיו ב-Ubuntu 8.04 ומעלה.
- תוקן באג בקומפיילר בשרשרת הכלים arm-linux-androideabi-4.4.3. הקובץ הבינארי הקודם יצר רצפים לא תקינים של הוראות לתמונות ממוזערות כשעבד עם תווים חתומים.
- נוסף תיעוד חסר לערך gnustl_static של APP_STL, שמאפשר לקשר לגרסה של ספרייה סטטית של GNU libstdc++. the
- פתרנו את הבעיות הבאות שקשורות ל-
ndk-build
:- באג שיצר קובצי תלות לא עקביים כשקרתה שגיאת קומפילציה ב-Windows. הבעיה הזו מנעה בנייה תקינה אחרי שהשגיאה תוקנה בקוד המקור.
- באג שספציפי ל-Cygwin, שבו שימוש בנתיבים קצרים מאוד להתקנת Android NDK או לנתיב הפרויקט הוביל ליצירה של קובצי תלות לא תקינים. כך אי אפשר לבצע בנייה מצטברת.
- שגיאת הקלדה שמנעה מהספרייה cpufeatures לפעול בצורה תקינה עם ערכת הכלים החדשה של NDK.
- גרסאות ה-build ב-Cygwin מהירות יותר כי הן לא כוללות קריאות ל-
cygpath -m
מ-GNU Make לכל קובץ מקור או קובץ אובייקט, מה שגרם לבעיות במבני מקור גדולים מאוד. אם זה לא עובד כמו שצריך, צריך להגדיר אתNDK_USE_CYGPATH=1
בסביבה כדי להשתמש שוב ב-cygpath -m
. - ההתקנה של Cygwin מודיעה עכשיו למשתמש על נתיבי התקנה לא תקינים שמכילים רווחים. בעבר, אם הנתיב היה לא תקין, המערכת הייתה מציגה שגיאה לגבי גרסה שגויה של GNU Make, גם אם הגרסה הנכונה הייתה מותקנת.
- תוקנה שגיאת הקלדה שגרמה לכך שמשתנה הסביבה
NDK_MODULE_PATH
לא פעל בצורה תקינה כשהוא הכיל כמה ספריות שהופרדו באמצעות נקודתיים. - הסקריפט
prebuilt-common.sh
מכיל תיקונים לבדיקת הקומפיילר לקוד מכונה שנוצר ב-64 ביט, במקום להסתמך על תג המארח, מה שמאפשר לשרשרת הכלים של 32 ביט לבנות מחדש בצורה תקינה ב-Snow Leopard. סקריפטים לבנייה מחדש של כלי שרשרת תומכים עכשיו גם בשימוש בכלי שרשרת של מארח 32 ביט. - הצהרה חסרה לגבי
INET_ADDRSTRLEN
נוספה ל-<netinet/in.h>
. - הצהרות שהיו חסרות לגבי
IN6_IS_ADDR_MC_NODELOCAL
ו-IN6_IS_ADDR_MC_GLOBAL
נוספו ל-<netinet/in6.h>
. - המחרוזת 'asm' הוחלפה ב-'__asm__' ב-
<asm/byteorder.h>
כדי לאפשר קומפילציה באמצעות-std=c99
.
Android NDK r5 (דצמבר 2010)
הגרסה הזו של NDK כוללת הרבה ממשקי API חדשים, שרובם מיועדים לתמיכה בפיתוח משחקים ואפליקציות דומות שנעשה בהם שימוש נרחב בקוד מקורי. באמצעות ממשקי ה-API, למפתחים יש גישה ישירה לנתונים של אירועים, אודיו, גרפיקה וניהול חלונות, נכסים ואחסון. מפתחים יכולים גם להטמיע את מחזור החיים של אפליקציית Android בקוד מקורי בעזרת המחלקה החדשה NativeActivity
. מידע מפורט על השינויים בגרסה הזו מופיע במסמך CHANGES.HTML
שכלול בחבילת ה-NDK שהורדתם.
- הערות כלליות:
-
- הוספנו תמיכה בפעילויות מקוריות, שמאפשרת לכם להטמיע את מחזור החיים של אפליקציית Android בקוד מקורי.
- נוספה תמיכה מקורית בפריטים הבאים:
- מערכת משנה לקלט (כמו מקלדת ומסך מגע)
- גישה לנתוני חיישנים (מד תאוצה, מצפן, ג'ירוסקופ וכו').
- ממשקי API של לולאת אירועים להמתנה לדברים כמו אירועי קלט ואירועים של חיישנים.
- מערכת משנה של חלונות ומשטחים
- ממשקי API של אודיו שמבוססים על תקן OpenSL ES ותומכים בהפעלה ובהקלטה, וגם בשליטה באפקטים של אודיו בפלטפורמה
- גישה לנכסים שנארזו בקובץ
.apk
.
- כולל שרשרת כלים חדשה (מבוססת על GCC 4.4.3), שמפיקה קוד טוב יותר, ועכשיו אפשר להשתמש בה גם כקומפיילר חוצה עצמאי, למי שרוצה ליצור את התוכן שלו באמצעות
./configure && make
. פרטים נוספים זמינים בקובץ docs/STANDALONE-TOOLCHAIN.html. הקובצים הבינאריים של GCC 4.4.0 עדיין מסופקים, אבל הקובצים הבינאריים של 4.2.1 הוסרו. - נוספה תמיכה בספריות סטטיות ומשותפות מוכנות מראש (docs/PREBUILTS.html) ובייצוא ובייבוא של מודולים (docs/IMPORT-MODULE.html מסביר למה), כדי להקל על שיתוף ושימוש חוזר במודולים של צד שלישי.
- מספק מודול עזר כברירת מחדל להטמעה של C++ STL (מבוסס על STLport). אפשר להשתמש בו כספרייה סטטית או כספרייה משותפת (פרטים ודוגמאות לשימוש מופיעים בקובץ sources/android/stlport/README). בנוסף, אם בוחרים לבצע קומפילציה מול הספריות האלה במקום מול הטמעה של C++ STL שמוגדרת כברירת מחדל, מסופקים קבצים בינאריים מוכנים מראש של STLport (סטטי או משותף) ושל GNU libstdc++ (סטטי בלבד). אין תמיכה בחריגים של C++ וב-RTTI בהטמעה של STL שמוגדרת כברירת מחדל. מידע נוסף זמין במאמר docs/CPLUSPLUS-SUPPORT.HTML.
- שיפורים בספריית העזר
cpufeatures
שמשפרים את הדיווח על סוג המעבד (בעבר, חלק מהמכשירים דיווחו על מעבד ARMv7 כשהמכשיר היה למעשה ARMv6). אנחנו ממליצים למפתחים שמשתמשים בספרייה הזו לבנות מחדש את האפליקציות שלהם ואז להעלות אותן ל-Google Play כדי ליהנות מהשיפורים. - מוסיף ספריית EGL שמאפשרת ליצור ולנהל מרקמים ושירותים של OpenGL ES.
- נוספו אפליקציות לדוגמה חדשות,
native-plasma
ו-native-activity
, כדי להדגים איך לכתוב פעילות מקורית. - הגרסה כוללת תיקונים של באגים רבים ושיפורים קטנים אחרים. רשימה מפורטת יותר של השינויים זמינה בקובץ docs/CHANGES.html.
Android NDK r4b (יוני 2010)
- הערות לגבי NDK r4b:
-
כולל תיקונים לכמה בעיות בסקריפטים של NDK build וניפוי באגים – אם אתם משתמשים ב-NDK r4, מומלץ להוריד את NDK r4b build. למידע מפורט על השינויים בגרסה הזו, אפשר לקרוא את המסמך CHANGES.TXT שכלול בחבילת ה-NDK שהורדתם.
- הערות כלליות:
-
- מערכת build פשוטה יותר באמצעות הפקודה החדשה
ndk-build
build. - הוספנו תמיכה בניפוי באגים מקורי ופשוט של קוד מכונה שנוצר במכשירי ייצור באמצעות הפקודה החדשה
ndk-gdb
. - נוסף ABI חדש ספציפי ל-Android לארכיטקטורות CPU מבוססות ARM,
armeabi-v7a
. ה-ABI החדש מרחיב את ה-ABI הקייםarmeabi
וכולל את ההרחבות הבאות של ערכת ההוראות של המעבד:- הוראות Thumb-2
- הוראות FPU לחומרה של VFP (VFPv3-D16)
- תמיכה אופציונלית ב-ARM Advanced SIMD (NEON) GCC intrinsics וב-VFPv3-D32. האפשרות נתמכת במכשירים כמו Verizon Droid של Motorola, Google Nexus One ועוד.
- נוספה ספרייה סטטית חדשה
cpufeatures
(עם מקורות) שמאפשרת לאפליקציה לזהות את תכונות המעבד של המכשיר המארח בזמן הריצה. באופן ספציפי, אפליקציות יכולות לבדוק אם יש תמיכה ב-ARMv7-A, וגם תמיכה ב-VFPv3-D32 וב-NEON, ואז לספק נתיבי קוד נפרדים לפי הצורך. - נוספה אפליקציה לדוגמה,
hello-neon
, שממחישה איך להשתמש בספרייהcpufeatures
כדי לבדוק את התכונות של המעבד, ואז לספק נתיב קוד שעבר אופטימיזציה באמצעות NEON instrinsics, אם המעבד תומך בכך. - מאפשר ליצור קוד מכונה עבור אחת או שתי קבוצות ההוראות שנתמכות על ידי NDK. לדוגמה, אפשר ליצור גרסאות גם לארכיטקטורות ARMv5 וגם לארכיטקטורות ARMv7-A בו-זמנית, ולשמור את הכול ב-
.apk
הסופי של האפליקציה. - כדי לוודא שהאפליקציות שלכם זמינות למשתמשים רק אם המכשירים שלהם יכולים להריץ אותן, Google Play מסנן עכשיו אפליקציות על סמך מידע על קבוצת ההוראות שכלול באפליקציה – לא נדרשת פעולה מצדכם כדי להפעיל את הסינון. בנוסף, מערכת Android עצמה בודקת את האפליקציה בזמן ההתקנה ומאפשרת להמשיך בהתקנה רק אם האפליקציה מספקת ספרייה שעברה קומפילציה לארכיטקטורת ה-CPU של המכשיר.
- נוספה תמיכה ב-Android 2.2, כולל API יציב חדש לגישה למאגרי הפיקסלים של אובייקטים מסוג
Bitmap
מקוד מקורי.
- מערכת build פשוטה יותר באמצעות הפקודה החדשה
Android NDK r3 (March 2010)
- הערות כלליות:
-
- הוספת תמיכה בספריית מקורית של OpenGL ES 2.0.
- מוסיף אפליקציה לדוגמה,
hello-gl2
, שממחישה את השימוש ב-OpenGL ES 2.0 vertex וב-fragment shaders. - הקובצים הבינאריים של ערכת הכלים עודכנו בגרסה הזו עם GCC 4.4.0, שאמור ליצור קוד מכונה קומפקטי ויעיל יותר מהקוד הקודם (4.2.1). בנוסף, ה-NDK עדיין מספק את הקבצים הבינאריים של גרסה 4.2.1, שאפשר להשתמש בהם כדי ליצור את קוד המכונה.
Android NDK r2 (ספטמבר 2009)
הגרסה המקורית הייתה Android 1.6 NDK, Release 1.
- הערות כלליות:
-
- הוספת תמיכה בספריית מקורית של OpenGL ES 1.1.
- נוספה אפליקציית דוגמה,
san-angeles
, שמציגה גרפיקה תלת-ממדית באמצעות ממשקי OpenGL ES API מקוריים, תוך ניהול מחזור החיים של הפעילות באמצעות אובייקטGLSurfaceView
.
Android NDK r1 (June 2009)
הגרסה המקורית הייתה Android 1.5 NDK, Release 1.
- הערות כלליות:
-
- כולל תמיכה בקומפיילר (GCC) להוראות ARMv5TE, כולל הוראות Thumb-1.
- כולל כותרות מערכת לממשקי API יציבים של אפליקציות מקוריות, תיעוד ואפליקציות לדוגמה.