בדף הזה מפורט מידע על השינויים בכל הגרסאות היציבות של ה-NDK. כדי להוריד את הגרסה היציבה האחרונה של ה-NDK או כל גרסת בטא שזמינה כרגע: ראו את דף ההורדות של NDK.
android-ndk-announce (קבוצת Google) לקבלת מידע מלא יותר, וגם כדאי להירשם לקבלת הודעות על גרסאות.
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 לקבלת עצות לגבי תאימות להרכבה עם LLVM. - GDB הוסר. במקומה אפשר להשתמש ב-LLDB. שימו לב ש-ndk-gdb משתמש ב-LLDB עד כברירת מחדל, ו-Android Studio תומך רק ב-LLDB.
- אין יותר תמיכה ב-Jenlly Bean (ממשקי API 16, 17 ו-18). המינימום מערכת ההפעלה שנתמכת ב-NDK היא KitKat (רמת API 19).
- אין יותר תמיכה במכשירים שאינם ניאון. מספר קטן מאוד מכשירים ישנים לא תומכים ב-Neon, אז רוב האפליקציות לא יבחינו מהשיפור בביצועים.
- הופסקה התמיכה ב-build של RenderScript. RenderScript היה הוצאה משימוש ב-Android 12. אם לא סיימתם את ההעברה ניתן להשתמש באפליקציות חוץ מ-RenderScript, ניתן להשתמש ב-NDK r23 LTS.
-
GNU Assembler (GAS) הוסר. אם אתם בניתם
Android NDK r23 LTS (אוגוסט 2021)
יומן שינויים- הורדות
-
- יש הורדות לגרסה הזו כאן.
- הודעות
-
-
בינומי GNU הוסרו, למעט GNU Assembler (GAS). גז טבעי דחוס (GAS)
תוסר בגרסה הבאה. אם אתם בניתם
-fno-integrated-as
, אפשר לדווח על באגים אם יש משהו שמונע את הטיפול להסרת הדגל הזה. -
התמיכה ב-GDB הסתיימה. GDB יוסר מהגרסה הבאה.
במקומה אפשר להשתמש ב-LLDB. הערה:
ndk-gdb
משתמש ב-LLDB כברירת מחדל. - NDK r23 הוא הגרסה האחרונה שתתמוך בתוכן שאינו ניאון. מתחיל ב- NDK r24, ספריות Armeabi-v7a ב-sysroot ייבנו עם ניאון. מספר קטן מאוד של מכשירים ישנים מאוד לא תומכים ב-Neon, רוב האפליקציות לא יבחינו מלבד השיפור בביצועים.
- ב-NDK הבא לא תהיה תמיכה ב-Jenlly Bean (ממשקי API 16, 17 ו-18) גרסה חדשה. מערכת ההפעלה המינימלית שנתמכת ב-NDK ל-r24 תהיה KitKat (רמת API 19).
-
בינומי GNU הוסרו, למעט GNU Assembler (GAS). גז טבעי דחוס (GAS)
תוסר בגרסה הבאה. אם אתם בניתם
Android NDK r22b (מרץ 2021)
יומן שינויים- הורדות
-
- יש הורדות לגרסה הזו כאן.
- הודעות
-
-
בינציות של GNU הוצאו משימוש ויוסרו ב-NDK הקרוב
גרסה חדשה. שימו לב שאוסף GNU (
as
) הוא חלק מהשינוי. אם אתם בניתם-fno-integrated-as
, אפשר לדווח על באגים אם יש משהו שמונע את הטיפול להסרת הדגל הזה. אם אתם משתמשים ב-as
ישירות, יש להשתמש במקום זאת ב-clang
. - עכשיו LLD הוא מקשר ברירת המחדל. ndk-build וקובץ ה-toolchain של CMake עברו לשימוש עם llvm-ar ו-llvm-strip.
- ndk-gdb משתמש עכשיו ב-lldb בתור הכלי לניפוי באגים. gdb הוצא משימוש תוסר בגרסה עתידית. כדי לחזור ל-gdb, צריך להשתמש בפורמט --no-lldb כאפשרות. אבל בבקשה דיווח על באג שמסבירה למה לא הצלחת להשתמש ב-lldb.
-
עכשיו כולל תמיכה ב-
std::filesystem
. יש שתי פלטפורמות או בעיות ידועות:-
הבעיה
1258:
std::filesystem::perm_options::nofollow
מאי לא יכובד במכשירים ישנים. -
הבעיה
1260:
std::filesystem::canonical
מצליחה באופן שגוי כשעוברת נתיב שלא קיים מכשירים.
-
הבעיה
1258:
-
בינציות של GNU הוצאו משימוש ויוסרו ב-NDK הקרוב
גרסה חדשה. שימו לב שאוסף GNU (
Android NDK r21e LTS (ינואר 2021)
יומן שינויים- הורדות
-
- יש הורדות לגרסה הזו כאן.
- הודעות
-
-
הופסקה התמיכה ב-Windows בגרסת 32 ביט. אין לזה השפעה על רוב המשתמשים. אם עדיין צריך לבנות אפליקציות NDK מ- בגרסאות 32-ביט של Windows, אפשר להמשיך להשתמש ב-NDK r20.
כדי לקבל מידע נוסף על השינוי הזה בכלים למפתחים של Android, לראות את פוסט בבלוג בנושא.
-
LLD זמין עכשיו לבדיקה.
ב-AOSP נעשה שימוש ב-LLD כברירת מחדל וב-NDK
(ציר הזמן לא ידוע). כדי לבדוק את LLD באפליקציה, צריך לעבור את
-fuse-ld=lld
בזמן הקישור. שימו לב בעיה 843 ישפיע על גרסאות build באמצעות LLD עם binutils track ו-objcopy בתור בניגוד ל-llvm-strip ו-llvm-objcopy. -
נתיבי ההתקנה מדור קודם של 'צרור כלים' יוסרו במהלך
גרסאות חדשות. הנתיבים האלה כבר יצאו משימוש מאז NDK r19 ותופסים
כמות משמעותית של נפח אחסון ב-NDK. הנתיבים להסרה הם:
- פלטפורמות
- מקורות/cxx-stl
- Sysroot
- Toolchain (למעט כלי כלים/llvm)
make_standalone_toolchain.py
משתמשים (למרות שהסקריפט הזה אין צורך החל מ-r19). כדי לקבל מידע על היציאה מהפריסה הקודמת של 'צרור הכלים': לראות את מדריך למתחזקים של מערכות Build לגרסת ה-NDK שאתם משתמשים בה. - בחנות Play תידרש תמיכה ב-64 ביט בהעלאת APK החל מאוגוסט 2019. כדאי להתחיל לנייד עכשיו כדי להימנע מהפתעות כשמגיע הזמן, מידע נוסף זמין במאמר הבא: הפוסט הזה בבלוג.
- קובץ App Bundle של macOS חתום בידי נוטריון זמין עכשיו עבור להורדה מהוויקי ומהאתר שלנו. הערה: מכיוון שרק חבילות יכול להשתמש ב-RPath ובאישור נוטריון, כמו חבילת ה-NDK המסורתית לא ניתן לספק אישור נוטריוני לגבי macOS. ה-SDK ימשיך להשתמש ב- חבילה מסורתית כי ל-App Bundle נדרשים שינויי פריסה הוא לא יתאים ל-Android Studio. ה-NDK אינו מועבר להסגר כשמורידים אותו דרך מנהל ה-SDK, כך שכרגע מאושר על ידי שומר השער. מנהל ה-SDK הוא הכלי המתאים ביותר כרגע כדי לקבל את ה-NDK ל-macOS.
-
Android NDK r20b (יוני 2019)
יומן שינויים- הורדות
-
- יש הורדות לגרסה הזו כאן.
- הודעות
-
-
LLD זמין עכשיו לבדיקה.
AOSP נמצא בתהליך מעבר לשימוש ב-LLD כברירת מחדל
NDK יופיע אחרי (ציר הזמן לא ידוע). כדי לבדוק את LLD באפליקציה, צריך לעבור
-fuse-ld=lld
בזמן הקישור. - בחנות Play תידרש תמיכה ב-64 ביט בהעלאת APK החל מאוגוסט 2019. כדאי להתחיל לנייד עכשיו כדי להימנע מהפתעות כשמגיע הזמן, מידע נוסף זמין במאמר הבא: הפוסט הזה בבלוג.
- נוספו ממשקי API של Android Q.
-
LLD זמין עכשיו לבדיקה.
AOSP נמצא בתהליך מעבר לשימוש ב-LLD כברירת מחדל
NDK יופיע אחרי (ציר הזמן לא ידוע). כדי לבדוק את LLD באפליקציה, צריך לעבור
Android NDK r19c (ינואר 2019)
יומן שינויים- הורדות
-
- יש הורדות לגרסה הזו כאן.
- הודעות
-
-
המפתחים צריכים להתחיל לבדוק את האפליקציות שלהם באמצעות LLD. AOSP עבר להשתמש ב-
LLD כברירת מחדל, ו-NDK ישתמש בו כברירת מחדל
גרסה חדשה. BFD ו-Gold יוסרו לאחר ש-LLD יעבור
מחזור הפצה ללא בעיות חמורות שלא נפתרו (אומדן r21). ניסוי
LLD באפליקציה שלך על ידי העברה של
-fuse-ld=lld
בזמן הקישור. הערה: lld לא תומך כרגע בסמלים דחוסים ב-Windows. הבעיה 888. Clang גם לא יכול ליצור סמלים דחוסים ב-Windows, אבל זו יכולה להיות בעיה כשמשתמשים בפריטי מידע שנוצרו בתהליך הפיתוח של דרווין או ל-Linux. - בחנות Play תידרש תמיכה ב-64 ביט בהעלאת APK החל מאוגוסט 2019. כדאי להתחיל לנייד עכשיו כדי להימנע מהפתעות כשמגיע הזמן, מידע נוסף זמין במאמר הבא: הפוסט הזה בבלוג.
-
בעיה 780:
מיקום מודעה עצמאי
ולכן כבר אין צורך. קלאנג, בינוטילים, הסיתרוט,
וחלקים אחרים של צרור כלים מותקנים עכשיו
$NDK/toolchains/llvm/prebuilt/<host-tag>
וקלנג ימצא אותם באופן אוטומטי. במקום ליצור חשבון נפרד Toolchain ל-API 26 ARM, אלא להפעיל את המהדר ישירות ה-NDK:$ $NDK/toolchains/llvm/prebuilt/
ב-r19, ה-toolchain מותקן גם בנתיב הישן כדי לספק build הזדמנות להסתגל לפריסה החדשה. הנתיבים הישנים יהיו הוסר ב-r20. הסקריפט/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.py
לא הוסר. עכשיו אין צורך בכך ויוצג אזהרה עם אבל הסקריפט יישאר כדי לשמר את הנתונים הקיימים תהליכי עבודה. אם משתמשים ב-ndk-build, ב-CMake או ב-toolchain נפרד, לא אמורים להיות שינויים בתהליך העבודה שלכם. לשינוי הזה יש משמעות עבור מתוחכמים של מערכות build של צד שלישי, שעכשיו הם אמורים להיות מסוגלים מוחקים קוד ספציפי ל-Android. מידע נוסף זמין במאמר פיתוח מדריך לתחזוקת המערכת. - הוסר. אנחנו מאמינים שה-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 וגם לא קובץ הפעלה.
- בחנות Play תידרש תמיכה ב-64 ביט בהעלאת APK החל מאוגוסט 2019. כדאי להתחיל לנייד עכשיו כדי להימנע מהפתעות כשמגיע הזמן, מידע נוסף זמין במאמר הבא: הפוסט הזה בבלוג.
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.
- בחנות Play תידרש תמיכה ב-64 ביט בהעלאת APK החל מאוגוסט 2019. כדאי להתחיל לנייד עכשיו כדי להימנע מהפתעות כשמגיע הזמן, מידע נוסף זמין במאמר הבא: הפוסט הזה בבלוג.
Android NDK r16b (דצמבר 2017)
יומן שינויים- הורדות
- יש הורדות לגרסה הזו כאן.
- הודעות
-
- הכותרות שהוצאו משימוש הוסרו. כותרות מאוחדות נקראות עכשיו "The Headers" (הכותרות). טיפים להעברה זמינים במאמר הערות העברה מאוחדות של כותרות.
- התמיכה ב-GCC הופסקה. הוא לא יוסר מ-NDK עדיין, אבל הוא כבר לא לקבל העברות אחוריות. לא ניתן להסיר אותו עד ש-libc++ יהפוך ליציב מספיק כדי כברירת מחדל, כי חלקים מסוימים בגנבל עדיין לא תואמים ל-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 עדיין לא, אבל לא יתקבלו יותר בקשות גיבוי. מכיוון שחלקים מסוימים בגבעות עדיין לא תואם ל-Clang, GCC לא יוסר לגמרי עד ש-libc++ יתייצב מספיק כדי להיות ברירת המחדל.
- כותרות איחוד: הגרסה הזו כוללת כותרות פלטפורמה שמסונכרנות
והם תמיד מעודכנים ומדויקים בפלטפורמת Android. תיקוני באגים בכותרת בלבד
ישפיעו על כל רמות ה-API. ההשקה של כותרות מאוחדות מתקנת חוסר עקביות ב-NDK הקודם
גרסאות, כמו:
מידע נוסף על התכונות החדשות והשינויים בגרסה הזו זמין כאן יומן שינויים.
Android NDK r13b (אוקטובר 2016)
- הורדות
- ההורדות של הגרסה הזו הועברו לארכיון כאן.
- הודעות
-
- התמיכה ב-GCC הופסקה. הוא לא יוסר מ-NDK רק עדיין, אבל הוא לא מקבל יותר יציאות. לא ניתן להסיר את המודעה עד אחרי ש-libc++ הפך ליציב מספיק כדי לשמש כברירת המחדל, מאחר שבחלקים מסוימים מ-gnustl עדיין לא תואמים ל-Clang. סביר להניח שהוא יוסר מנקודה זו.
- תאריך ההוספה simpleperf, כלי לניתוח ביצועי מעבד (CPU) ב-Android.
- r13b
-
-
תיקונים נוספים ב
__cxa_bad_cast
חסרים.
-
תיקונים נוספים ב
- NDK
-
- ברירת המחדל של
NDK_TOOLCHAIN_VERSION
היא Clang. - libc++ עודכן ל-r263688.
- איפסנו אותו ל-upstream (כמעט) נקי. הפעולה הזו תסיר כמה אבל עדיין צריך לנקות את libandroid_support לפני מומלץ להשתמש בו כברירת המחדל.
-
make-standalone-toolchain.sh
הוא עכשיו פשוט wrapper את גרסת Python של הכלי. יש כמה הבדלי התנהגות. למידע נוסף למידע נוסף, אפשר לשמור את ההודעה. - חלק מהספריות של ממשקי ABI שלא נתמכים הוסרו (mips64r2, mips32r6, mips32r2 ו-x32). יכול להיות שעדיין יש כמה מהנדסי תוכנה.
- בעיות עם crtbegin_static.o שגרמו לחוסר אקזיט בקישור כאשר בניית קובץ הפעלה סטטי עבור ARM android-21+ הסתיים: בעיה 132
- נוסף קובץ Toolchain של CMake ב-build/cmake/android.toolchain.cmake.
- ברירת המחדל של
- בעיות מוכרות
-
- זו לא רשימה מקיפה של כל הבאגים שטרם טופלו.
- 'צרור כלים עצמאי' באמצעות libc++ ו-GCC לא פועלים. נראה כי באג ב-GCC. צפייה המחויבות message לפרטים נוספים.
- כותרות וספריות ביוניות של Marshmallow ו-N עדיין לא נחשפו למרות הנוכחות של Android-24. הפלטפורמות האלה עדיין כותרות וספריות של Lollipop (לא רגרסיה מ-r11).
- כלי RenderScript לא קיימים (לא רגרסיה מ-r11): גיליון 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. לקבלת מידע נוסף, ראה את הסבר.
- הוסרו כל פלחי ה-sysroot לרמות הפלטפורמה שקדמו ל-GB. הפסקנו את התמיכה בהם ברמה 11, אבל לא צריך להסיר אותם בפועל.
- עכשיו, הטיפול בחריגים כשמשתמשים ב-c++_shared ב-ARM32 עובד בעיקר. תהליך השליפה להיות מקושר לכל אובייקט מקושר ולא ל-libc++ עצמו. מידע נוסף על בטיפול במקרה של חריגות כאלה, בעיות מוכרות
- הוסרו דגלי המהדר שמוגדרים כברירת מחדל.
(גיליון 27).
- המידע המלא על השינויים האלה זמין בכתובת רשימת השינויים הזו.
- הוספנו הטמעת Python של כלי כלים עצמאיים:
build/tools/make_standalone_toolchain.py
- משתמשי Windows כבר לא צריכים את Cygwin כדי להשתמש בתכונה הזו.
- נסיר את טעם הבאש בגרסה r13, אז כדאי לבדוק את הגרסה החדשה עכשיו.
-fno-limit-debug-info
מופעל כברירת מחדל לגרסאות build של ניפוי באגים ב-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 שלא ניתן לגשת אליהן (שאינם תמונות ממוזערות).
- נוספה תמיכה של Vulkan ל-android-24.
- ממשק ה-API של Choreographer נוסף ל-android-24.
- נוספו ממשקי API של
libcamera2
למכשירים עםINFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
ומעלה. מידע נוסף זמין במאמר הבא: מאפייני המצלמה. - קלאנג
- Clang עודכן ל-3.8svn (r256229, build 2812033).
- קובצי ההפעלה
clang.exe
ו-clang++.exe
בגרסת 32 סיביות חבילות Windows הן למעשה 64 ביט. השם של קובץ ההפעלה ב-32 סיביות הואclang_32.exe
- קובצי ההפעלה
- GCC
- מסונכרן עם ChromeOS GCC @ google/gcc-4_9 r227810.
- תיקון לחיטוי כיסוי אחורי מ-ToT (r231296).
- תוקנה הליבאטית שבה לא ניתן להשתמש ב-
ifuncs
. (גיליון 31) - שניטילים
- הודעות מידע בנושא "Erratum 843419 נמצא ותקן" הושתקו.
- נבחרה האפשרות
--long-plt
כדי לתקן שגיאת מקשר פנימית שמתרחשת כאשר שמקשרים קבצים בינאריים ענקיים של Arm32. - תוקנו רצפי זמן שגויים ב-AArch64. הפעולה הזו יצרה את החישוב של כתובות דילוג באופן שגוי למערכות DSO גדולות מאוד.
- נוספה אפשרות ברירת המחדל
--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). - כותרות וספריות ביולוגיות ל-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, כדי בעיקר פועל (מידע נוסף זמין במאמר בעיות מוכרות). המשחררים מקושר עכשיו לכל אובייקט מקושר במקום ל-libc++ עצמו.
- הוצאנו משימוש את דגלי ברירת המחדל של המהדר (NDK בעיה 27). אפשר לראות פרטים על העדכון הזה בשינוי 207721.
- נוספה הטמעת Python של כלי כלים עצמאיים ב-
build/tools/make_standalone_toolchain.py
. ב-Windows, כבר לא צריך את Cygwin כדי להשתמש בתכונה הזו. חשוב לשים לב שטעם הבאש יוסר במהדורה עתידית, אז כדאי לבדוק עכשיו את הגרסה החדשה. - גרסאות build לניפוי באגים של 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 גיליון 14, בעיה 16 של NDK).
- הוסרו ספריות STL של ARM שלא ניתן לגשת אליהן (שאינם תמונות ממוזערות).
- נוספה תמיכה של Vulkan ל-android-24.
- ממשק ה-API של Choreographer נוסף ל-android-24.
- נוספו ממשקי API של libcamera2 למכשירים שתומכים
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
ברמת התכונה ומעלה. מידע נוסף זמין במאמרCameraCharacteristics
. - קלאנג
- 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 (בעיה 31 של NDK). - שניטילים
- הושתקה 'Erratum 843419' נמצא ותוקן' הודעות מידע.
- נבחרה האפשרות
--long-plt
כדי לתקן שגיאת מקשר פנימית כשמקשרים קבצים בינאריים ענקיים של Arm32. - תוקנו סטיות שגויות של זמני ריצה עבור
AArch64
. הבעיה הזו שגורמת לחישוב שגוי של כתובות מעבר אובייקטים משותפים דינמיים (DSO). - נוספה אפשרות ברירת המחדל
--no-apply-dynamic
כדי לעקוף את הבעיה באג מקשר דינמי בגרסאות קודמות של Android. - תוקנה בעיה ידועה עם NDK r11 שבה
dynamic_cast
לא לעבוד עם Clang, x86, stlport_static ואופטימיזציה. - GDB
- עודכנה לגרסה 7.11 של GDB. מידע נוסף על הגרסה הזו זמין כאן GDB News.
- תוקנו מספר באגים בסקריפט
ndk-gdb.py
. - בעיות מוכרות
- כתובת x86 הכלי 'לחיטוי (ASAN) לא פועל כרגע. מידע נוסף זמין במאמר הבא: גיליון 186276.
- חריג של ביטול השגה באמצעות
c++_shared
לא פועל עבור ARM ב- Android 2.3 (רמת API 9) או Android 4.0 (רמת API 14). - כותרות וספריות ביוניות ל-Android 6.0 (רמת API 23) ואילך עדיין לא נחשפו, למרות הנוכחות של android-24. הפלטפורמות האלה עדיין כוללות את הכותרות והספריות של Android 5.0 (API ברמה 21), באופן עקבי עם NDK r11.
- הכלים של RenderScript לא קיימים, וזה תואם ל- NDK r11. (גיליון NDK גיליון 7)
- בקובץ הכותרת
NdkCameraMetadataTags.h
, המטא-נתונים של המצלמה ערך enumACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
נרשם בטעות שיוסר בגרסה הבאה. כדאי להשתמש במקום זאת, את הערךACAMERA_STATISTICS_LENS_SHADING_MAP
.
Android NDK r11c (מרץ 2016)
- שינויים
- הוחלו תיקונים נוספים בסקריפט
ndk-gdb.py
. - נוסף ארגומנט אופציונלי של שם חבילה ל
ndk-gdb
הפקודה--attach
. (גיליון 13) - תוקנו נתיבים לא חוקיים של 'צרור כלים' עבור פלטפורמת Windows בגרסת 32 ביט. (גיליון 45)
- תיקנו את הנתיב היחסי של הפקודה
ndk-which
. (גיליון 29) - תוקן שימוש ב-cygpath עבור מהדר libgcc. (בעיה 195486 ב-Android)
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
.
- השגיאה
- הודעות חשובות
- קלאנג
-
- אראטה
- בניגוד למה שדיווחנו עליו בנתוני הגרסה של r11,
__thread
לא עובדת. הסיבה לכך היא שבגרסת Clang שלנו חסר תיקון באג תמיכה באמולציה של TLS (אבטחת שכבת התעבורה).
Android NDK r11 (מרץ 2016)
- קלאנג
-
- הודעות חשובות
- מומלץ מאוד לעבור ל-Clang.
- Clang עודכן ל-3.8svn (r243773, build 2481030).
- הגרסה הזו היא קלנג כמעט טהור במעלה הזרם.
- חבילת NDK להורדה של Windows 64 סיביות מכילה 32 סיביות של Clang.
- תוספות
- עכשיו יש ב-Clang תמיכה באמולציה של TLS (אבטחת שכבת התעבורה).
- המהדר תומך עכשיו ב-
__thread
באמצעות אמולציה TLS (אבטחת שכבת התעבורה) ELF עם נתונים ספציפיים לשרשור pthread. - C++11
thread_local
עובד במקרים מסוימים, אבל לא בשביל נתונים עם גורמים מזיקים לא טריים, כי המקרים האלה דורשים תמיכה של libc. ההגבלה הזאת לא חלות כשמריצים Android 6.0 (רמת API 23) ואילך. - אמולציה של TLS עדיין לא פועלת עם Aarch64 כאשר הגישה למשתני TLS מתבצעת מספרייה משותפת.
- המהדר תומך עכשיו ב-
- עכשיו יש ב-Clang תמיכה באמולציה של TLS (אבטחת שכבת התעבורה).
- הודעות חשובות
- GCC
-
- הודעות חשובות
- עכשיו ה-GCC ב-NDK הוצא משימוש לטובת Clang.
- ה-NDK לא ישודרג ל-5.x ולא יקבל אישור העברות אחוריות לא קריטיות.
- תחזוקה של בעיות הידור (compiler) ושגיאות מהדר (compiler) פנימיות ב-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.
- הלחצן הוסר.
- בוצעה הסרה של Perl.
- הוסר מכל הגרסאות של NDK libc, m ו-dl. גרסאות הפלטפורמה של הקישורים האלה לא תומכות.
- התמיכה ב-mips64r2 הוסרה חלקית. כל השאר יוסרו הוא בעתיד.
- התמיכה ב-
- שינויים נוספים
- התבצעו שינויים ב'צרור הכלים העצמאי' של ARM כברירת מחדל של Arm7.
- כדי לשחזר את ההתנהגות הקודמת, צריך לציין את
אפשרות
-target
בתורarmv5te-linux-androideabi
.
- כדי לשחזר את ההתנהגות הקודמת, צריך לציין את
אפשרות
- שינית את מערכת ה-build כדי להשתמש ב-
-isystem
לפלטפורמה כוללת.- אזהרות שגורמים לביוניות (Bionic) כבר לא יגרמו לשיבושים בגרסאות ה-build של האפליקציות.
- תוקנה תקלה שאירעה בעת ניסיון חריג מסוג 'זריקה בינארית' באמצעות gabi++. (גיליון 179410)
- מרחב השמות המוטבע של libc++ השתנה ל-
std::__ndk1
כדי למנוע בעיות ODR בפלטפורמה libc++. - כל הספריות של libc++ נוצרות באמצעות libc+abi.
- קוד ברירת המחדל
APP_PLATFORM
הועבר ל-Gingerbread.- צפויה ירידה בתמיכה ב-Froyo ובגרסאות קודמות במהדורה עתידית.
- התבצעו שינויים ב'צרור הכלים העצמאי' של ARM כברירת מחדל של Arm7.
- המבנה gabi++
_Unwind_Exception
עודכן ל-64 ביט. - נוספו ל-cpufeatures את היכולות הבאות:
- זיהוי של SSE4.1 ו-SSE4.2.
- זיהוי תכונות המעבד (CPU) ב-x86_64.
- libc+abi עודכן ל-upstream r231075.
- עודכן
byteswap.h
,endian.h
,sys/procfs.h
,sys/ucontext.h
,sys/user.h
ו-uchar.h
מ- ToT Binic. - בוצע סנכרון של
sys/cdefs.h
בכל רמות ה-API. - בוצע תיקון של
fegetenv and fesetenv
בזרוע. - תיקון הגודל או היישור של מצביע הקצה ב-
crtend_*
ב-mips64 ו-x86_64.
- הודעות חשובות
- שניטילים
-
- תוספות
- נוספה אפשרות חדשה:
--pic-veneer
.
- נוספה אפשרות חדשה:
- הסרות
- חבילת ה-Windows בגרסת 32 ביט כבר לא מכילה ld.gold. במקום זאת, אפשר לקבל את ld.gold מחבילת 64 סיביות של Windows.
- סיכום השינויים
- מקור של קובץ ביניים מאוחד בין Android ל-ChromiumOS. למידע נוסף על השינוי הזה, עיינו בתגובות כאן.
- האמינות המשופרת של זהב ל-aarch64. כדאי להשתמש
-fuse-ld=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. הרמה הבסיסית (root) הסיבה לכך היא חוסר תאימות בין ה-LLVM Unwinder ש-libc++abi משתמש עבור ARM32 ו-libgcc. ההתנהגות הזו היא לא רגרסיה מ-r10e.
Android NDK r10e (מאי 2015)
- הורדות
- ההורדות של הגרסה הזו מועברות לארכיון כאן.
- שינויים חשובים:
-
- לשלב את המעקף של Cortex-A53 Erratum 843419
מקשר אחד (
aarch64-linux-android-4.9
). לקבלת מידע נוסף על פתרון זה, ראה פתרון עקיף ל-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 של Drwin בגרסת 32 סיביות.
- לשלב את המעקף של Cortex-A53 Erratum 843419
מקשר אחד (
- תיקוני באגים חשובים:
-
- תוקנה קריסה שאירעה כאשר היו לולאות OpenMP מחוץ ל-thread הראשי.
- תוקנה שגיאת מהדר פנימית (ICE) ב-GCC 4.9 שאירעה כשהמשתמש הצהיר
#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
- בוצע העברה (backoff) של תיקון לבעיות של
compiler-rt
שגרמו לקריסות כש-Clang נוצר עבורmips64
. למידע נוסף, ראו בעיה ב-LLVM 20098. - תוקנו קריסות 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. למידע נוסף, ראו בעיה ב-LLVM 22355. - תוקנה תמיכה ב-
.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
. ה-linker שמוגדר כברירת מחדל נשאר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
כדי לאפשר את ה-build כדי לשנות את שם החבילה. (בעיה 56189) - הוצא משימוש
-mno-ldc1-stc1
ל-MIPS. ייתכן שאפשרות זו לא תפעל עם האפשרויות-fpxx
ו--mno-odd-spreg
, או באמצעות ה-ABI של FPXX. - נוסף זיהוי של 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
בכל ה-toolchain של x86[_64]. NDK Toolchain מבוסס על יישור סטאק של 16 בייטים. הכלים והאפשרויות שבהם נעשה שימוש כברירת מחדל לאכוף את הכלל הזה. אם משתמש כותב קוד הרכבה, עליו לוודא ששומרים את המקבץ ולוודא שגם מהדרים אחרים מצייתים לכלל הזה. (באג ב-GCC 38496) - נוספה פונקציונליות לחיטוי כתובות בתמיכה ב-Clang 3.5 לממשקי ARM ו-x86 ABI. מידע נוסף על השינוי הזה זמין במאמר כתובת פרויקט לחיטוי.
- הוספנו את הדרישה, החל מרמת API 21, לשימוש ב-
-fPIE -pie
בזמן הפיתוח. ברמות API 16 ומעלה, ndk-build משתמש ב-PIE
במהלך הבנייה. לשינוי זה יש מספר השלכות, המתוארות גרסה 888 של תצוגה מקדימה למפתחים. ההשלכות האלה לא חלות על ספריות משותפות.
- GCC 4.8 הוגדר כברירת המחדל לכל ממשקי ה-ABI של 32 ביט. GCC 4.6 שהוצא משימוש, וגם
היא תוסר בגרסה הבאה. כדי לשחזר את ההתנהגות הקודמת, צריך להוסיף
- תיקוני באגים חשובים:
-
- בוצעו תיקונים נוספים שקשורים לנושא
A53 Errata #835769 ב-aarch64-linux-android-4.9 linker. כחלק מהשינוי הזה, GCC
מעבירה אפשרות חדשה,
--fix-cortex-a53-835769
, כאשר השדה-mfix-cortex-a53-835769
(מופעל כברירת מחדל) מצוין. מידע נוסף זמין במאמר הבא: הודעת binutils וגם הודעת ביניים. - תועד תיקון לתקלת libc++
sscanf/vsscanf
שאירעה ברמת ה-API 21. התיקון עצמו הוטמע ב-r10c. (גיליון 77988) - תוקנה קריסה של AutoFDO (
-fauto-profile
) שאירעה ב-GCC 4.9 כאשר ציינת את-Os
. (גיליון 77571)
- בוצעו תיקונים נוספים שקשורים לנושא
A53 Errata #835769 ב-aarch64-linux-android-4.9 linker. כחלק מהשינוי הזה, 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
. - תוקן הטיפול של
thumb
ב-ndk-build עבורLOCAL_ARM_MODE
: בטווח r10d, ndk-build מוסיףLOCAL_LDFLAGS+=-mthumb
כברירת מחדל, אלא אם התנאים הבאים חלים: - הגדרת את הערך
LOCAL_ARM_MODE
שווה ל-arm
. - ביצעת גרסת build לניפוי באגים (עם הגדרות כמו
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()
של יחסי התלות. (גיליון 41790) - תוקנה בעיה שמנעה חילוץ של חבילות של 64 ביט ב-Ubuntu 14.04. OS X 10.10 (יוסמיטי). (גיליון 78148)
- תוקנה בעיה עם
LOCAL_PCH
כדי לשפר את התמיכה ב-Clang. (בעיה 77575) - הבהרה "נדרשת מקבץ הפעלה" אזהרה מ-ld.gold. (בעיה 79115)
unsigned long
כדי לבנות user_regs_struct*.
Android NDK r10c (אוקטובר 2014)
- שינויים חשובים:
-
- בוצעו השינויים הבאים במבנה ההורדה:
- כל חבילה מכילה עכשיו גם כותרות, ספריות וכלים של 32-64 ביט וגם כלים של בפלטפורמה המתאימה.
- אין יותר צורך להוריד בנפרד ספריות STL עם מידע על תוצאות ניפוי באגים.
- כל מה שנקרא קודם "
Android-L
" השתנה לגרסה הרשמית סיווג:android-21
. - עדכון GCC 4.9 באמצעות ביצוע העברה מחדש להסתעפות
google
של מאגר GCC. ההבדלים העיקריים לעומת גרסת ה-upstream של GCC 4.9 כוללים: - האפשרות
-O2
מפעילה עכשיו הווקטורים, בלי קילוף לולאה, אבל עם תכונות נוספות גלילה בצורה אגרסיבית. - שיפורים ב-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 עם תמיכה ב-Identical Code Folding (ICF). ציון ICF באמצעות
אפשרות
--icf
. - התמיכה הרחבה של
arm_neon.h
ב-x86 וב-x86_64 מספקת כיסוי של כ-93% פונקציות NEON. למידע נוסף על התמיכה של NEON:- אפשר לעבור למדריך למתכנת של NDK (
docs/Programmers_Guide/html/
) ולראות ארכיטקטורות ומעבדים > ניאון. - כדאי לבדוק את הדוגמה המעודכנת
hello-neon
ב-samples/
. - כדאי לעיין במדריך של Intel ל ניוד מ-ARM NEON ל-Intel SSE.
- אפשר לעבור למדריך למתכנת של NDK (
- תמיכה מתועדת עבור
_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):
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- תוקנה יצירת קוד שגויה מ-GCC4.9/arm. (בעיה 77567)
- תוקנה שגיאת מהדר (compiler) פנימית ב-GCC4.9 למיילים שמעורבים בה הרכבה מוטבעת. (בעיה 77568)
- תוקן קוד שגוי שנוצר על ידי GCC4.9/arm עבור
x = (cond) ? y : x
. (גיליון 77569)- תוקנו GCC4.9/aarch64 ו-Clang3.5/aarch64 כדי לעקוף את כברירת מחדל, Cortex-A53 erratum (835769) השבתת הפתרון הזמני על ידי ציון
-mno-fix-cortex-a53-835769
- תיקוני באגים אחרים:
-
- בוצעו התיקונים הבאים בכותרת ובספרייה ב-
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
לרמות 17, 18 ו-19 של API. - הוספנו את הפונקציות הבאות לכל הארכיטקטורות:
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 למיילים. התמיכה הזו לא התקבלה מ- 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, ו-PMULL/PMULL2 בגרסת 64 ביט. (בעיה 106360) - ndk-build שונה כדי להשתמש ב-
*-gcc-ar
, שזמין ב-GCC 4.8 , GCC 4.9 ו- נשמע. Clang מציין אותו במקום*-ar
. ההגדרה הזו מספקת LTO משופר תמיכה. - הסרת את
include-fixed/linux/a.out.h
וגםinclude-fixed/linux/compiler.h
כותרות מהמהדר של GCC. (גיליון 73728) - תוקנה בעיה שקשורה ל-
-flto
ב-GCC 4.8 ב-Mac OS X. הודעת השגיאה קריאה:
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- תוקנה שגיאת הקלדה ב-
build-binary.mk.
(בעיה 76992) - התכונה
- בעיות ידועות וחשובות:
-
- ציון -Os (
-fauto-profile
) ב-GCC4.9 עלול לגרום לקריסה. (גיליון 77571)
- ציון -Os (
Android NDK r10b (ספטמבר 2014)
- הערות חשובות:
-
- עקב מגבלת הגודל של 512MB בחבילות שניתן להוריד, הפריטים הבאים בגודל 32 סיביות לא נכללים בחבילות ההורדה של 32 סיביות מסוג NDK. במקום זאת, הם נמצאים בגרסאות של 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.
- תוקן היציאה. (גיליון 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 {19.}*_l()
- השם של
cmsg_nxthdr
השתנה. השם החדש הוא__cmsg_nxthdr
. - בוצעה הסרה של
__libc_malloc_dispatch
. - שינית את אב הטיפוס
ptrace()
ל-long ptrace(int, ...);
. - בוצעה הסרה של
sha1.h
. - הורחבה
android_dlextinfo
ב-android/dlext.h
. - עם הערות
__NDK_FPABI__
לפונקציות שמקבלות או מחזירה ערכים מסוג צף או כפול ב-stdlib.h
, ב-time.h
, ב-wchar.h
וב-complex.h
.
- בוצעה הסרה של
- שינויים נוספים:
-
- עודכנו
mipsel-linux-android-4.9
ו-mips64el-linux-android-4.9
, הטמעת פריסה חדשה של ספריות מרובות נתונים ותמיכה ב-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. מספר ממשי ברמת ה-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) עודכנה עבור הליבה של ARMv8. הנכס הקיים יכול להיות שספריית cpu-features לא תצליח לזהות את הנוכחות של NEON בפלטפורמת ARMv8. הרכב מחדש את עם הגרסה החדשה.
- נוספה ספריית API חדשה מסוג
platforms/android-L/
. היא כוללת: - כותרות ביולוגיות מעודכנות, שלא השתנו מרמות API של Android 3 (Cupcup) עד 19 (KitKat). הגרסה החדשה הזו, ברמה L, תסונכרן עם AOSP.
- ממשקי API חדשים למדיה ודוגמת קודק נייטיב.
- כותרת
Android.h
מעודכנת ל-SLES/OpenSLES, מאפשרת תמיכה עבור פורמט אודיו עם נקודה צפה (floating-point) ברמת דיוק יחידה ב-AudioPlayer. - תוספי GLES 3.1 ו-AEP אל
libGLESv3.so.
- כותרות GLES2 ו-GLES3 עודכנו לגרסאות הרשמיות האחרונות שלה.
- נוספו מהדרים מסוג 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++.
- GCC 4.7 ואילך יכול עכשיו להשתמש ב-<atomic>.
- צריך להוסיף
-fno-strict-aliasing
אם משתמשים ב-<list>
, כי__list_imp::_end
_ מעברי כללי TBAA. (גיליון 61571.) - החל מגרסה 4.6 של GCC, LIBCXX_FORCE_REBUILD:=true כבר לא בונה מחדש את libc++. לבנות אותו מחדש דורש שימוש במהדר (compiler) אחר. לתשומת ליבכם: Clang 3.3 לא נבדק.
- mclinker הוא עכשיו גרסה 2.7 והוא תומך ב-aarch64 Linux.
- נוספה תמיכה בכותרות שעברה הידור מראש לכותרות שצוינו על ידי
LOCAL_PCH
. (גיליון 25412).
- תיקוני באגים חשובים:
-
- תוקן libc++ כך שעכשיו הוא הידור
std::feof
וכו' (בעיה 66668). - תוקנה קריאה לספרייה אטומית של Clang 3.3/3.4 שגרמה לקריסות בחלק מ- libc++ בדיקות ABI Armeabi.
- תוקנו קריסות Clang 3.4 שהתרחשו בקריאת כותרות שעברו הידור מראש. (גיליון 66657).
- תוקן הטענה לגבי
-O3
של Clang 3.3/3.4 לגבי: - תוקנה הקריסה הבאה של 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
למשך Android API ברמה 12 ואילך. (גיליון 69319). לקבלת מידע נוסף מידע נוסף, אפשר לעיין ברשימת השינויים שקשורים ל-AOSP 94137. - תוקנה אזהרה GCC לגבי הגדרה מחדש של
putchar
. בהודעת האזהרה כתוב: - תוקן
make-standalone-toolchain.sh --stl=libc++
כך ש: - תוקן GCC/Windows כדי לצטט ארגומנטים רק במקרה הצורך לתהליכי הרצה ב- מתוכנות חיצוניות. השינוי הזה מפחית את הסבירות לחריגה ממגבלת האורך של 32,000.
- תוקנה בעיה שלא אפשרה לבצע התאמה של
APP_PLATFORM
במשתנה הסביבה. - תוקנה ההטמעה של
IsSystemLibrary()
ב-crazy_linker משתמש ב-strrchr()
במקוםstrchr()
כדי למצוא את שם הבסיס האמיתי של נתיב הספרייה. - תוקנה חוסר היכולת של אודיו נייטיב לבנות במצב ניפוי באגים.
- תוקנה חוסר היכולת של gdb להדפיס מספרי נתונים קיצוניים נקודה צפה (floating-point). (גיליון 69203).
- תוקנה חוסר יכולת של Clang 3.4 להדר עם
-Wl,-shared
(בניגוד ל--shared
, שלא היו בעיות בהידור). הבעיה הייתה ש-Clang הוסיף את-pie
ל-Android יעדים אם לא קיימים-shared
וגם-static
. בהתנהגות הזאת, שגוי, גרם ל-linker להתלונן על כך ש--shared
ו--pie
לא יכולים מתקיימים יחד.
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);
(שינוי הרשימה 91185). - שינויים נוספים:
-
- הוספנו את
arm_neon.h
לצרור הכלים של x86 כך שעכשיו הוא אמולציה של כ-47% ניאון. אין כרגע תמיכה בסוגים של 64 ביט. מידע נוסף זמין בקטע ARM. תמיכה במאפייני ניאון במסמכי התיעוד של x86. - אופטימיזציה של ARM/GOT_PREL (כפוף ל-GCC 4.6 שנוצר מהסתעפות של Google) אל
ARM GCC 4.8/4.9. לפעמים האופטימיזציה הזו מפחיתה את מספר ההוראות בגישה
משתנים. לדוגמה, ראו את הסקריפט build.sh ב-
$NDK/tests/build/b14811006-GOT_PREL-optimization/
- נוספה גרסת ARM עבור STL gabi++ , stlport ו-libc++. עכשיו יש להם גם את זה וגם 'לייק' במצב תצוגה.
- עכשיו ניתן לקרוא לסקריפט make-standalone-toolchain.sh באמצעות
--toolchain=x86_64-linux-android-4.9
, המקביל ל---toolchain=x86_64-4.9
.
- הוספנו את
Android NDK r9d (מרץ 2014)
- שינויים חשובים:
-
- נוספה תמיכה במהדר (compiler) Clang 3.4.
האפשרות
NDK_TOOLCHAIN_VERSION=clang
בוחרת עכשיו ב-Clang 3.4. GCC 4.6 הוא עדיין המהדר שמוגדר כברירת מחדל. - ההוספה בוצעה בתאריך
APP_ABI=armeabi-v7a-hard
, עם האפשרות הנוספת-mfloat-abi=hard
. האפשרויות האלה הן עבור לשימוש עם ARM GCC 4.6/4.8 ו-Clang 3.3/3.4 (משתמשים בהרכב, מקשר 4.8, ו-libs). כשמשתמשים באפשרויות האלה, חשוב לשים לב לשינויים הבאים: - כשמריצים את הסקריפט
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
. כדי להפוך תתנהג כצפוי, לא ניתן לציין גםarmeabi-v7a
וגםarmeabi-v7a-hard
כיעדים של היצירה (כלומר, בשורה APP_ABI=). אם תעשו זאת, המערכת תתעלם מאחת מהן. הערה:APP_ABI=all
עדיין שווה ל-armeabi armeabi-v7a x86 mips
. - הסקריפט
make-standalone-toolchain.sh
מועתק ספריות נוספות בספריות/hard
. הוספת הCFLAGS
והLFLAGS
שלמעלה אל getfile כדי להפעיל 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++
כדי ליצור כלי עצמאי עם כותרות/lib/ libc++.
CPLUSPLUS-SUPPORT.html
. (גיליון 36496) - הוספה של
- נוספה תמיכה במהדר (compiler) Clang 3.4.
האפשרות
- תיקוני באגים חשובים:
-
- תוקנה השלכה לא צפויה מאירוע לא צפוי handler חריג של GCC 4.6/4.8 ARM EABI. (בעיה GCC 59392)
- תוקן גרסה 4.8 של GCC, כך שעכשיו ניתן לתקן חלקי של תבנית עם התמחות מדויקת ארגומנט תלוי של תבנית שאינו סוג. (גיליון 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
- תוקנו מספר בעיות בצרור הכלים של 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):
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
- תוקן
- הוספת
sys/cachectl.h
לכל הארכיטקטורות. MIPS מפתחים יכולים עכשיו לכלול את הכותרת הזו במקום לכתוב#ifdef __mips__
. - בוצע תיקון של
platforms/android-18/include/android/input.h
על ידי הוספת__NDK_FPABI__
לפונקציות שבהן לוקחים או חוזרים צפים או ערכים כפולים. - תוקן 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)
- בוצע תיקון של gabi++
std::unexpected()
להתקשרותstd::terminate()
כך handler שלstd::terminate()
שהוגדר על ידי המשתמש יקבל הזדמנות לפעול.- בוצע תיקון של gabi++ כדי לתפוס את
std::nullptr
.- קנקן תה ו-moreTeabots לדוגמיות קבועות:
- פתרון בעיה עם צ'יפים של 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
הוסר מכל גרסאות ה-build של STL.- בוצע תיקון של
ndk-gdb-py.cmd
על ידי הגדרה שלSHELL
בתור משתנה סביבה במקום להעביר אותוpython.exe
, שמתעלמת מההגדרה. (בעיה 63054)- הסקריפט
make-standalone-toolchain.sh
תוקן כך האפשרות--stl=stlport
מעתיקה את הכותרות gabi++ במקום יצירת קישור בין חשבונות. מעטפותcmd.exe
ו-MinGW לא מבינים קישורים סימבוליים שנוצרו על ידי סיגווין. - תיקונים לכותרות:
- שינויים נוספים:
-
- הרשאות הביצוע הוחלו על כל
*cmd
הסקריפטים היה מיועד לשימוש רק במעטפתcmd.exe
, למקרה מפתחים מעדיפים להשתמש ב-ndk-build.cmd
ב-cygwin במקום סקריפטndk-build
מומלץ. - שיפרתי את המהירות של
make-standalone-toolchain.sh
את הסקריפט על ידי העברה במקום העתקה, אם ספריית היעד שצוינה לא קיימים.
- הרשאות הביצוע הוחלו על כל
Android NDK r9c (דצמבר 2013)
זוהי גרסה לתיקון באגים בלבד.
- תיקוני באגים חשובים:
-
- תוקנה בעיה ב-GCC 4.8 ARM, שבה מצביע הערימה שוחזר מוקדם מדי. הבעיה הזו מנעה את מצביע הפריים באופן מהימן ניגשים למשתנה במסגרת המקבץ. (גיליון GCC 58854)
- תוקנה בעיה ב-GCC 4.8 libstdc++, שבה באג ב- std::nth_element גרם ליצירה של קוד שייצר קוד אקראי . (גיליון 62910)
- תיקון GCC 4.8 ICE ב-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
ל-Android רמות API 12 ו-19. הספריות האלה נכללות עכשיו בכל Android API רמות 12 עד 19. - הוספת את
futimens
לאפליקציהlibc.so
, ל-Android API רמה 19. - נוספו
clock_settime()
חסרים ו-clock_nanosleep()
עדtime.h
ל-Android API ברמה 8 גבוהה יותר. - בוצעה הוספה של
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.
- אב הטיפוס של
- בדוגמאות של Teabots, MoreTeabots
source/android/ndk_helper
:- שיניתי אותם כך שעכשיו הם משתמשים ב-Abi-floating-float עבור Armeabi-v7a.
- עדכנתם אותם לשימוש במצב של צפייה היקפית ב-Android API ברמה 19 גבוהה יותר.
- תוקנה בעיה עם
Check_ReleaseStringUTFChars
ב-/system/lib/libdvm.so
שגרמה לקריסות במכשירי x86.
- תוקנו של שגיאות
ndk-build
שמתרחשות ב-cygwin כש-NDK החבילה היא שיש הפניה אליו באמצעות קישור סימבולי. - תוקנו שגיאות של
ndk-build.cmd
שמתרחשות בחלונותcmd.exe
כאשרLOCAL_SRC_FILES
מכיל נתיבים מוחלטים. (גיליון 69992) - תוקן הסקריפט
ndk-stack
כדי להמשיך גם כשהוא לא יכול לנתח מסגרת בגלל חוסר היכולת למצוא תרחיש, שם קובץ או מספר שורה. בכל אחד מהתנאים הבאים: במקרים כאלה הוא מדפיסה??
. - תוקנה המקבץ
ndk-stack
עבור יעדי Windows-x64_64 כך הוא כבר לא מתאים בטעות בין קו במסגרת עם קו קטעstack:
שלא מכיל אתpc
,eip
אוip
. מוצרים לדוגמה:I/DEBUG ( 1151): #00 5f09db68 401f01c4 /system/lib/libc.so
- בוצע תיקון של gabi++ כך:
- לא משתמש ב-gclidoc() כדי להקצות C++thread-local אובייקטים.
- מניעה של מבוי סתום ב-gabi++ במקרים שבהם הערך libc.debug.malloc הוא שהוא לא אפס בגרסאות build של פלטפורמת Android ל-userdebug/eng.
- תיקונים לכותרות:
- שינויים נוספים:
-
- ההוספה של
LOCAL_EXPORT_LDFLAGS
התבצעה. - השקנו את ההגדרה
NDK_PROJECT_PATH=null
לשימוש ב מערכת build משולבת שבה האפשרויות מועברות במפורש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
לספק תמונת מצב טובה יותר של הזיכרון ב-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.
- נוספה תמיכה ב-
-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_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
מידע נוסף זמין במאמר הבא: GCC אפשרויות של שפה עצמאית. - נוספו שתי דוגמאות חדשות כדי להדגים את התכונות של OpenGL ES 3.0: 'תה' ו-MoreTeabots. הדוגמאות האלו פועלות במכשירים עם Android בגרסה 4.1 (רמת API 16) ואילך.
- תמיכה ב-GCC 4.7 וב-Clang 3.2 שהוצאו משימוש, תוסר במהלך גרסה חדשה.
- עודכנו
- תיקוני באגים חשובים:
-
- תוקנה בעיה ב-ARM GCC 4.6
thumb2
שנכשלה ביצירת דילוג יחסי של 16 ביט בטבלאות. (בעיה ב-GCC) - תוקנה שגיאת מהדר (compiler) פנימית ב-GCC 4.8 (ICE) ב-
g++.dg/cpp0x/lambda/lambda-defarg3.C
(שינוי 62770, בעיה ב-GCC) - תוקנה בעיית הפעלה של קובצי הפעלה ב-Windows 32-סיביות
*-gdb.exe
. (גיליון 58975) - בוצע תיקון ב-GCC 4.8 ICE במהלך פיתוח ספריית תבליטים. הודעת השגיאה:
internal compiler error: verify_flow_info failed
(גיליון 58916, בעיה ב-GCC) - בוצע שינוי ב-GDB/ARM של ה-build כדי לדלג על נתוני
ARM.exidx
כדי להירגע בקוד פרולוג הוסיפה פקודה (set arm exidx-unwinding
) כדי לשלוט בפיגור סטאק של exidx. (גיליון 55826) - תוקנה בעיית מהדר (compiler) Clang 3.3 MIPS, שבה רישומי HI ו-LO שגויים שנעשה בו שימוש חוזר.
- תוקנה בעיה ב-MIPS 4.7 ICE ב-
dbx_reg_number
. הודעת השגיאה היא ככה:external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
(תיקון GCC)
- תוקנה בעיה ב-ARM GCC 4.6
- תיקוני באגים אחרים:
-
- תיקונים בכותרות
- תוקנו
WCHAR_MIN
ו-WCHAR_MAX
ב-ARM שאינם חתומים בהתאם מפרט (גרסאות 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()
, שכבר קיימת בתיקייהbionic
כותרתstdlib.h
.
- תוקנו
- תוקנה בעיה בפיתוח
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++
שהסתיימו ב- השיתוף לא צפוי בטוח לשרשורים. - תוקנו כמה בעיות באפשרות Clang
-integrated-as
כדי שהיא תוכל לעבור בדיקות עבורssax-instructions
ו-fenv
. - תוקן מהדר (compiler) 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
. - תוקן Clang 3.3 ICE עם
vfprintf
בהתאמה אישית. (בעיית קלנג)
- תיקונים בכותרות
- שינויים נוספים:
-
- OpenMP מופעל לכל גרסאות ה-build של GCC. כדי להשתמש בתכונה הזו, צריך להוסיף את הדגלים הבאים
הגדרות build:
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
עלולות להיכשל g++ יוצר עם אזהרה ו-clang++ יוצר עם שגיאה. - נוספו
gabi++
פונקציות עזר מסוג מערך. - גרסאות ה-GCC ששונו יוצרות כך שכל הקבצים של
libgcc.a
נבנו עם-funwind-tables
כדי לאפשר את שחרור הערימה מעבר לחסימה הקודמת למשל__aeabi_idiv0
. - נוספה תמיכה ב-MXU Ingenic ב-MIPS GCC4.6/4.7/4.8 עם מכשיר
-mmxu
חדש כאפשרות. - בוצעה הרחבה של MIPS GCC4.6/4.7/4.8
-mldc1-sdc1
כדי לשלוט גם ב-ldxc1/sdxc1 - נוסף קישור משוגע. מידע נוסף זמין במאמר הבא:
sources/android/crazy_linker/README.TXT
- בוצע תיקון של
bitmap-plasma
כדי להציג במסך מלא במקום בגודל 200x200 פיקסלים אזור. - הוקטנו ב-25% את הגדלים של linux ו-darwin Toolchain על ידי יצירת קישורים סימבוליים לקבצים זהים.
- OpenMP מופעל לכל גרסאות ה-build של GCC. כדי להשתמש בתכונה הזו, צריך להוסיף את הדגלים הבאים
הגדרות build:
Android NDK r9 (יולי 2013)
- שינויים חשובים:
-
- נוספה תמיכה ב-Android 4.3 (רמת API 18). מידע נוסף זמין במאמר הבא:
STABLE-APIS.html
ודוגמאות קוד חדשות ב-samples/gles3jni/README
. - נוספו כותרות וספריות ל-OpenGL ES 3.0, שנתמך ב-Android 4.3 (רמת API 18) ומעלה.
- נוסף מהדר 4.8 של GNU Compiler Collection (GCC) ל-NDK. מכיוון ש-GCC 4.6 עדיין לא
ברירת המחדל, עליכם להפעיל את האפשרות הזו באופן מפורש:
- לגרסאות build של
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))
אם משתמשים בטענות נכוֹנוּת (assertions) בזמן הידור, כמוsources/cxx-stl/stlport/stlport/stl/config/features.h
, שורה מס' 311. לקבלת מידע נוסף מידע נוסף, ראה שינוי 55460הערה: בגרסה 4.7 של GCC 4.7 ואילך, מהדרים של ARM יוצרים קוד גישה לא תואם על ידי ברירת מחדל ל-ARMv6 וליעדי build גבוהים יותר. יכול להיות שתצטרכו להוסיף אפשרות build של
-mno-unaligned-access
כשבונים ליבה (kernel) שלא תומכת בתכונה הזו. - לגרסאות build של
- נוספה תמיכה ב-Clang 3.3. אפשרות ה-build של
NDK_TOOLCHAIN_VERSION=clang
בוחר ב-Clang 3.3 כברירת מחדל.הערה: גם GCC 4.4.3 וגם Clang 3.1 הוצאו משימוש ויוסרו מה-NDK הבא גרסה חדשה.
- הכלי לניפוי באגים בפרויקט GNU עודכן (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 גיליון 57271)
- תוקנה שגיאת מהדר (compiler) פנימית (ICE) ב-GCC 4.4.3/4.6/4.7 עבור אינדקס שלילי קבוע בליטרל של מחרוזת. (גיליון 54623)
- תוקנה שגיאת פילוח ב-GCC 4.7 שגרמה לאתחול קבוע עם כתובת אובייקט. (גיליון 56508)
- תוקנה השגיאה בפילוח של GCC 4.6 ARM בערכי
-O
כשמשתמשים ב-Boost 1.52.0. (גיליון 42891) - תוקנו
libc.so
ו-libc.a
כדי לתמוך בפונקציהwait4()
. (גיליון 19854) - קובצי libc.so ו-libc.a מסוג x86 עודכנו כך שיכללו את
clone()
מותאמת אישית. - תוקן באג אחד (
LOCAL_SHORT_COMMANDS
) שבו הקובץlinker.list
ריק או לא בשימוש. - תוקן גרסת build של GCC MIPS ב-Mac OS לשימוש בהוראות CFI, שבלי
ld.mcld --eh-frame-hdr
נכשל לעיתים קרובות. - תוקנה שגיאת מהדר (compiler) פנימית ב-Clang 3.2 X86/MIPS ב-
llvm/lib/VMCore/Value.cpp
. (שינוי 59021) - תוקנה קריסה של GCC 4.7 בגרסת 64 ביט של Windows. (שגיאה:
out of memory allocating 4294967280 bytes
). - הסקריפט
ndk-gdb
עודכן כך שהפעולות--start
או--launch
לחכות לשרת ניפוי הבאגים של GNU כדי שהוא יוכל להגיע לנקודות עצירה (breakpoint) בצורה אמינה יותר בתחילת נתיב הביצוע (למשל נקודות עצירה בקוד JNI). (גיליון 41278)הערה: התכונה הזו דורשת jdb ומפיקה אזהרה לגבי נקודות עצירה (breakpoint) בהמתנה. צריך לציין את האפשרות
--nowait
לשחזור ההתנהגות הקודמת. - תוקנה קריסת GDB כשרשימת הספריות ריקה.
- תוקנה קריסת GDB במהלך שימוש בפקודת
stepi
מעבר ל-bx pc
אוblx pc
הוראה לאגודל. (גיליון 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 ליעדי build של MIPS כאשר באמצעות מהדר (compiler) Clang. (שינוי 54141) - תוקנו הסקריפט
ndk-build
כדי לוודא שספריות שנוצרו הוסרו מפרויקטים שכוללים ספריות סטטיות שנוצרו מראש כאשר משתמשים הפקודהndk-build clean
. (שינוי 54461, שינוי 54480) - האפשרות
NDK_ANALYZE=1
שונתה כך שהיא תהיה פחות מפורטת. - בוצע תיקון של
gnu-libstdc++/Android.mk
כדי לכלול נתיבbackward/
לגרסאות build שמשתמשים בתאימות לאחור. (גיליון 53404) - תוקנה בעיה שבה
stlport new
החזיר ערכים אקראיים לפעמים. - תוקן
ndk-gdb
כדי להתאים לסדר שלCPU_ABIS
, ולא לפיAPP_ABIS
. (גיליון 54033) - תוקנה בעיה שבה גרסת ה-build של NDK בגרסת 64 ביט ב-MacOSX בחרה נתיב שגוי מהדר (compiler) . (גיליון 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
תווים בסופה ולגרום לשגיאות build. (גיליון 42548) - תוקן
make-standalone-toolchain.sh
כדי לבדוק אתprebuilts/
ספרייה על מנת לזהות אם המארח הוא 32 ביט או 64 ביט. - תוקנה האפשרות Clang 3.2
-integrated-as
. - תוקנו נתוני ה-handler של Clang 3.2 ARM EHABI מהמודל הקומפקטי
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++ של המארח. - נוספו שני סימונים להפעלה מחדש של שתי אופטימיזציות ב-upstream Clang, אבל הושבתו ב-
NDK לתאימות טובה יותר עם קוד שנוצר על ידי GCC:
- נוסף סימון
-fcxx-missing-return-semantics
כדי להפעיל מחדש חסרות להחזיר סמנטיקה ב-Clang 3.2 ואילך. בדרך כלל, כל הנתיבים אמורים להסתיים בהחזרה לפונקציה שמחזירה ערך. אם זה לא המצב, תוספות שירים הוראה לא מוגדרת (או מלכודת במצב ניפוי באגים) בנתיב ללא חזרה הצהרה. אם אתה בטוח שהקוד נכון, השתמש בדגל הזה כדי לאפשר אופטימיזציה כדי לנצל את ההתנהגות הלא מוגדרת. אם אתם לא בטוחים, להשתמש בדגל הזה. יכול להיות שהמתקשר עדיין יקבל ערך אקראי שגוי, כלי האופטימיזציה לא ינצל אותו ויקשה על ניפוי באגים בקוד. - נוסף סימון
-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
. התוספת הזו מאפשרת אחזור קל יותר של ה-ARRM CPUID מידע. (גיליון 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
, הסקריפט בונה את כולן בכוח. (גיליון 53502) - המדיניות
ndk-build
עודכנה כדי לתמוך בנתיבים מוחלטים ב-LOCAL_SRC_FILES
. - הוסרו
*-gdbtui
קובצי ההפעלה, שהם עותקים כפולים של*-gdb
קובצי הפעלה שהאפשרות-tui
מופעלת בהם. - עדכנו את הסקריפטים של ה-build כדי להזהיר אתכם כשהמהדר של 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
כדי להשבית אותה. מידע נוסף זמין בכתובתANDROID-MK.html
- נוספה תמיכה להדפסה יפה של STL ב-
ndk-gdb-py
. מידע נוסף זמין במאמר הבא:NDK-GDB.html
- נוספו בדיקות על סמך frameworks של googletest.
- נוספה התראה לסקריפט ה-build של Toolchain שמזהיר אתכם אם המעטפת הנוכחית
אינו
bash
.
- תיקוני כותרת עליונה
Android NDK r8e (מרץ 2013)
- שינויים חשובים:
-
- נוספה קבוצת כלי מארח של 64 ביט (סיומת שם חבילה
*-x86_64.*
). לקבלת מידע נוסף מידע נוסף, ראוCHANGES.HTML
וNDK-BUILD.html
. - נוסף מהדר (compiler) Clang 3.2. GCC 4.6 הוא עדיין ברירת המחדל. לקבלת מידע על השימוש
מהדר ה-Clang, ראו
CHANGES.HTML
. - נוסף כלי לניתוח קוד סטטי למארחים של Linux/MacOSX. לקבלת מידע על השימוש
לניתוח נתונים,
CHANGES.HTML
. - MCLinker נוספה למארחים של Linux/MacOSX כתכונה ניסיונית.
ld.gold
מקשר הוא ברירת המחדל במקומות שבהם הוא זמין, לכן עליכם להפעיל אותו באופן מפורש. לקבלת מידע נוסף מידע נוסף:CHANGES.HTML
. - ndk-build עודכן לשימוש במיון טופולוגי ליחסי תלות של מודול, כלומר
גרסת build ממיינת אוטומטית את הסדר של הספריות שצוינו
LOCAL_STATIC_LIBRARIES
,LOCAL_WHOLE_STATIC_LIBRARIES
וגםLOCAL_SHARED_LIBRARIES
. מידע נוסף זמין כאן:CHANGES.HTML
. (גיליון 39378)
- נוספה קבוצת כלי מארח של 64 ביט (סיומת שם חבילה
- תיקוני באגים חשובים:
-
- סקריפט build תוקן לבניית כל כלי הכלים ב-
-O2
. 'צרור כלים' בגרסה הקודמת הגרסאות נוצרו בצורה שגויה ללא אופטימיזציה. - סקריפט build קבוע שפותח את Clang/llvm ללא תנאי עבור MacOSX ב-64 סיביות.
- תוקנה שגיאת מהדר (compiler) פנימית ב-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)
- תוקנו שגיאות של חוסר התאמה בשימוש ב-GCC 4.7 Linker. (בעיה בתוכנת מקור)
- תוקנה שגיאת מהדר (compiler) פנימית ב-GCC 4.7
build_data_member_initialization, at cp/semantics.c:5790
. - תוקנה שגיאת מהדר (compiler) פנימית ב-GCC 4.7
redirect_eh_edge_1, at tree-eh.c:2214
. (גיליון 52909) - תוקנה פרצת אבטחה מסוג GCC 4.7. (בעיה ב-GCC)
- תוקנה רזולוציית השעון של
<chrono>
והפעלת אתsteady_clock
. (גיליון 39680) - בוצע תיקון ל-toolchain להפעלת
_GLIBCXX_HAS_GTHREADS
ב-GCC 4.7 libstdc++. (גיליון 41770, גיליון 41859) - תוקנה בעיה בקוד X86 MXX/SSE שנכשל בגלל שגיאה
posix_memalign
(שינוי 51872) - תוקנה שגיאת פילוח GCC4.7/X86 ב-
i386.c
, פונקציהdistance_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) - תוקנה שגיאת מהדר (compiler) פנימית ב-Clang 3.1 במהלך שימוש בספריית Eigen. (גיליון 41246)
- תוקנה שגיאת מהדר (compiler) פנימית ב-Clang 3.1, כולל
<chrono>
ב-C++11 במצב תצוגה. (גיליון 39600) - תוקנה שגיאת מהדר (compiler) פנימית ב-Clang 3.1 בעת יצירת קוד אובייקט ל-method
קריאה ל-
rvalue
עם אתחול אחיד. (גיליון 41387) - תיקנו את המיקום של סטאק Clang 3.1/X86. (שינוי 52154)
- תוקנה הבעיה ב-GNU Debugger (GDB) SIGILL במהלך ניפוי באגים ב-Android 4.1.2. (גיליון 40941)
- תוקנה בעיה ב-GDB שבה אי אפשר להגדיר נקודות עצירה (breakpoint) של
source:line
כאשר סמלים מכילים נתיבי קבצים ארוכים ועקיפים. (גיליון 42448) - תוקן GDB
read_program_header
בקובצי הפעלה של MIPS PIE. (שינוי 49592) - תוקנה השגיאה בפילוח של
STLport
ב-uncaught_exception()
. (שינוי 50236) - תוקנה שגיאה באוטובוס
STLport
בטיפול חריג עקב גישה לא ישרה שלDW_EH_PE_udata2
,DW_EH_PE_udata4
וגםDW_EH_PE_udata8
. - תוקנה בעיית רקורסיה אינסופית של Gabi++ באופרטור
nothrow new[]
. (גיליון 52833) - תוקנה היסט שגוי של Gabi++ למצביע ה-handler של החריג. (שינוי 53446)
- הוסר Gabi++ ללא תשלום נוסף מאובייקט חריג (שינוי 53447)
- סקריפט build תוקן לבניית כל כלי הכלים ב-
- תיקוני באגים אחרים:
-
- כותרות NDK קבועות:
- הוסרו הגדרות מיותרות של
size_t
,ssize_t
ו-ptrdiff_t
. - כותרת
fenv.h
קבועה של MIPS ו-ARM. - בוצע תיקון של
stddef.h
כדי לא להגדיר מחדש אתoffsetof
מפני שהוא כבר קיים בשרשרת הכלים. - תוקנו
elf.h
שהכמות שלהם היאElf32_auxv_t
ו-Elf64_auxv_t
. (גיליון 38441) - תיקנת את
#ifdef
ההגדרות של C++ קובץ הכותרתOpenSLES_AndroidConfiguration.h
. (גיליון 53163)
- הוסרו הגדרות מיותרות של
- בוצע תיקון של
STLport
כדי לבטל לאחר שגיאה מסוג אין-זיכרון במקום לצאת בשקט. - תוקנו כותרות של המערכת ו-Gabi++ כדי לאפשר הידור (compile) בעזרת 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
בדיקות ליעדי build של 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. (בעיית קלנג)
- נתיב cygwin קבוע בארגומנט הועבר אל
HOST_AWK
. - תוקנה אזהרה לגבי סקריפט
ndk-build
בחלונות במהלך הפעלה מ-JNI של הפרויקט (גיליון 40192) - תוקנה בעיה שבה הסקריפט
ndk-build
לא נוצר אם makefile כולל רווח לבן בסוף ההגדרהLOCAL_PATH
. (גיליון 42841)
- כותרות NDK קבועות:
- שינויים נוספים:
-
- הופעלה תמיכה בשרשור ב-GCC/MIPS Toolchain.
- עודכנו העוזרים לטיפול בחריגות ב-GCC
__cxa_begin_cleanup
וכן__cxa_type_match
לקבל ברירת מחדל הרשאות גישה לעומת הקודם חשיפה מוסתרת ב-GNU libstdc++. מידע נוסף זמין במאמר הבא:CHANGES.HTML
- סקריפטים של build עודכנו כך שספריות סטטיות של Gabi++ ו-STLport יהיו כעת עם הרשאות גישה נסתרות חוץ ממסייעים בטיפול בחריגות.
- גרסת ה-build עודכנה כך ש-
STLport
מיועד ל-ARM במצב 'אהבתי'. - נוספה תמיכה בנושא
std::set_new_handler
ב-Gabi++. (גיליון 52805) - קריאת מערכת
FUTEX
הופעלה ב-GNU libstdc++. - בוצע עדכון של
ndk-build
כך שלא מתבצעת יותר העתקה של הספרייה הסטטית שהוגדרה מראש אל של הפרויקט בספרייהobj/local/<abi>/
. (גיליון 40302) - המשתמש
__ARM_ARCH_5*__
הוסר מהסקריפטtoolchains/*/setup.mk
של ARM. (גיליון 21132) - יצרנו ספריות נוספות של GNU libstdc++ באגודל עבור ARM.
- הופעל נקודה צפה (floating-point) של MIPS
madd/msub/nmadd/nmsub/recip/rsqrt
עם FPU של 32 סיביות. - הופעל כלי האופטימיזציה של לולאת גרפיט ב-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 במארחי 32 ביט של Linux ו-Max OS X שמנתחים ואופטימיזציה של הגישה לזיכרון. (מידע) - הופעל
-flto
ב-GCC 4.7, 4.6, Clang 3.2 ו-Clang 3.1 ב-linux (Clang LTO) דרך LLVMgold.so). אין תמיכה ביעדי מהדר (compiler) 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
בכותרת הביונית. מידע נוסף זמין במאמר הבא: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 ל-toolchain:
- תוקן מרוץ תהליכים ב-
build-gcc.sh
עבור סוג ה-buildmingw
שמנעה כמות משמעותית של עיבוד build מקביל. build-gabi++.sh
ו-build-stlport.sh
עודכנו כדי שעכשיו הם יוכלו לפעול מחבילת NDK. (גיליון 52835)- תוקן
run-tests.sh
באוסף כלי השירותים שלMSys
. - תמיכה משופרת ב-Steamchain של מארחים ב-64 ביט ותמיכה עבור פיתוח צלב קנדי.
- הסקריפט
build-mingw64-toolchain.sh
עודכן לגרסה עדכנית יותר. - נוספה אפשרות לבנות
libgnustl_static.a
ו-stlport_static.a
ללא הרשאות גישה נסתרות.
- תוקן מרוץ תהליכים ב-
Android NDK r8d (דצמבר 2012)
- שינויים חשובים:
-
- נוסף מהדר 4.7 של GNU Compiler Collection (GCC) ל-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 ואילך. (בעיית Chromium 164154)
- נוסף מהדר 4.7 של GNU Compiler Collection (GCC) ל-NDK. מהדר GCC 4.6
היא עדיין ברירת המחדל, לכן עליך להפעיל באופן מפורש את הגרסה החדשה באופן הבא:
- תיקוני באגים חשובים:
-
- תוקנו בעיות בבנייה מחדש של קובצי אובייקטים במהלך שימוש בסקריפט
ndk-build
. (גיליון 39810) - תוקן כשל מקשר בגרסת NDK 8c ל-Mac OS X 10.6.x שיצרה את
השגיאה הבאה:
dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
הבעיה הזו נגרמה עקב פיתוח ב-Mac OS X 10.7, שיצר קבצים בינאריים לא תואם ל-Mac OS 10.6.x ול-NDK. - הוסרו האפשרויות
-x c++
מהסקריפט העצמאי של 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 (CPU) לתכונה
ANDROID_CPU_X86_FEATURE_MOVBE
. (גיליון 39317) - תוקנה בעיה שמנעה מספריית התבניות הרגילה (STL) להשתמש ב-C++
מקורות שאין להם סיומת קובץ
.cpp
. - תוקנה שגיאת מהדר הפנימי של GCC 4.6 ARM בכתובת מחדש1.c:1061. (גיליון 20862)
- תוקנה שגיאת מהדר הפנימי של ARM ב-GCC 4.4.3 at emit-rtl.c:1954. (גיליון 22336)
- תוקנה שגיאת מהדר (compiler) פנימית ב-GCC 4.4.3 ARM בכתובת postreload.c:396. (גיליון 22345)
- תוקנה בעיה בדילוג על פונקציות lambda ב-GCC 4.6/4.7. (גיליון 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 לבנות. - תוקנו סקריפטים של build כדי לאפשר החלפה של
HOST_AWK
,HOST_SED
ו- הגדרותHOST_MAKE
. - תוקנה הבעיה ב-
ld.gold
ב-fsck_msdos
build של אובייקטים מקשרים שנוצרו על ידי מהדר (ICC) של Intel C/C++ . - תמיכה קבועה ב-ARM EHABI ב-Clang בהתאם למפרטים.
- תוקן הכלי לניפוי באגים של GNU (GDB) כדי לקצר את הזמן שהוקדש להליכה במפת הקישורים של היעד
במהלך אירועי
solib
. (גיליון 38402) - תוקן קובץ
libgcc.a
שהיה חסר במהלך קישור ספריות משותפות.
- תיקונים לקובצי כותרת של NDK:
- שינויים נוספים:
-
- פונקציות אטומיות מובנות ב-64 ביט להעברה מ-ARM ל-GCC 4.6.
- הוספנו תיעוד לזמן האחזור של פלט האודיו, יחד עם תיעוד אחר ו לתיקונים.
- גרסאות build מתוקנות לניפוי באגים עם Clang
SIGILL
עבור נתיבים ללא הצהרת חזרה. - הסיומת
make-standalone-toolchain.sh
עודכנה כדי לאשר את הסיומת-clang3.1
שהיא שוות-ערך להוספה של--llvm-version=3.1
ל-GCC 4.6. - כתובת ה-URL של דוח על באג ב-GCC ו-Clang עודכנה לכתובת: https://source.android.com/source/report-bug?hl=iw s.html
- נוספה תמיכה ב-ARM ELF ל-
llvm-objdump
. - אזהרה מבוטלת לטיפול בקלט c כ-c++ לגרסאות build של Clang.
- ה-build עודכן כך שרק גרסת 32-ביט של
libiberty.a
תיבנה שהוצב ב-lib32/
.
Android NDK r8c (נובמבר 2012)
- שינויים חשובים:
-
- הוספת המהדר של Clang 3.1 ל-NDK. גרסה 4.6 של GNU Compiler Collection (GCC)
עדיין ברירת המחדל, לכן עליכם להפעיל באופן מפורש את האפשרות מהדר (compiler) 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
ל- פרטים.
הערה: התכונה הזו היא ניסיונית. כדאי לנסות ו אפשר לדווח על כל בעיה.
- עבור
- נוסף קישור ברמת זהב
ld.gold
ל'צרור הכלים של Windows'. גם זהב ברירת מחדל של ARM ו-X86 בכל המארחים. אפשר לשנות אותו כדי להשתמש בld.bfd
מקשר על ידי הוספתLOCAL_LDFLAGS += -fuse-ld=bfd
אלAndroid.mk
, או עובר-fuse-ld=bfd
לשורת הפקודה g++/clang++ שמבצעת את הקישור. - נוספו בדיקות אם יש מרחבים בנתיב ה-NDK אל
ndk-build[.cmd]
וגםndk-gdb
סקריפטים, כדי למנוע שגיאות build שקשה לאבחן אותן. - בוצעו השינויים הבאים בטיפול ברמת ה-API:
- לוגיקת ה-build שונתה, כך שפרויקטים עם הערכים
android-10
עדandroid-13
ב-APP_PLATFORM
,project.properties
או קישורdefault.properties
אלandroid-9
במקוםandroid-14
. - ה-build עודכן כך שקובצי הפעלה שמשתמשים ב-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
של הפרויקט.
- לוגיקת ה-build שונתה, כך שפרויקטים עם הערכים
- ספריית העזרה של
cpu-features
עודכנה ועכשיו יש בה עוד תכונות ספציפיות ל-ARM. אתה יכול לראות עוד פרטים בכתובתsources/android/cpufeatures/cpu-features.h
. - שינינו את הכפולה הארוכה בפלטפורמת X86 ל-8 בייטים. סוג הנתונים הזה נקרא עכשיו זהה לגודל של כפול, אבל עדיין נחשב כסוג נפרד.
- גרסת ה-build המעודכנת של
APP_ABI=armeabi-v7a
:- סוג ה-build הזה השתנה כדי להעביר את הפרמטר
-march=armv7-a
למנגנון לקישור. השינוי הזה מבטיח שספריות ספציפיות ל-v7 ו-crt*.o
קושר בצורה נכונה. - נוסף
-mfpu=vfpv3-d16
אלndk-build
במקום האפשרות-mfpu=vfp
נמצאת בשימוש בגרסאות קודמות.
- סוג ה-build הזה השתנה כדי להעביר את הפרמטר
- הוספת המהדר של Clang 3.1 ל-NDK. גרסה 4.6 של GNU Compiler Collection (GCC)
עדיין ברירת המחדל, לכן עליכם להפעיל באופן מפורש את האפשרות מהדר (compiler) Clang באופן הבא:
- תיקוני באגים חשובים:
-
- תוקנה בעיה שבה הפעלת את
make-standalone-toolchain.sh
עם הרשאות שורש התוצאה: שרשרת הכלים העצמאית לא נגישה לחלק מהמשתמשים. (גיליון 35279)- כל הקבצים וקובצי ההפעלה בחבילת ההפצה NDK מוגדרים לקריאה הפעלת ההרשאות לכולם.
- הבעלות/הקבוצה של
libstdc++.a
נשמרות עכשיו לאחר ההעתקה.
\r
מיותר הוסר מ-echo.exe
שהוכן מראש על ידי Windows. המיותר\r
גרם ל-gdb.setup
להיכשל בכלי לניפוי באגים ב-GNU (GDB) כי הפך באופן שגוי לחלק מהדרך. (גיליון 36054)- גרסאות build מתוקנות מקבילות של Windows שנכשלו לפעמים עקב בעיות תזמון
הטמעת
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 עבור צפים. (גיליון 34613)
- תוקן ההטמעה של
_IteWrapper::operator*()
הפנימית שלSTLport
שבו מיקום ערימה לא פעיל עם הערך שהוחלט להוריד מהמדפים הוחזר, וגרם קריסות בזמן הריצה. (גיליון 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
לפני והוספה של נתיביheader/lib
STL להידור. שינית אתndk-build
לתאריך סינון.arm
ו-.neon
סיומות לפני החיפוש, אחרת פריטים ב-LOCAL_SRC_FILES
כמוmyfile.cpp.arm.neon
לא יהיה הידור כ-C++ - תוקן
binutils-2.21/ld.bfd
כדי שיהיה אפשר לקשר אובייקט מגרסאות ישנות יותר קובצי binutil ללאtag_FP_arch
, שיצר טענת נכוֹנוּת (assertion) נכשלה הודעות שגיאה ב-GNU Binutils (גיליון 35209) - האזהרה מאפיין 44 של אובייקט EABI לא ידוע הוסרה
קישור
binutils-2.19/ld
של אובייקט שנוצר מראש על ידיbinutils-2.21
חדש יותר - תוקנה בעיה בהידור של GNU
stdc++
עם-mthumb
וגם-march=armv7-a
, על ידי שינויmake-standalone-toolchain.sh
כדי לאכלסheaders/libs
בספריית המשנהarmv7-a/thumb
. (גיליון 35616) - תוקנה שגיאה לא ניתנת לפתרון R_ARM_THM_CALL העברת מיקום. (גיליון 35342)
- תוקנה שגיאת מהדר פנימית ב-
reload1.c:3633
, שנגרמה על ידי ARM הקצה העורפי מצפה לסוג אופרנד שגוי כאשר סיומת החתימה מ-char
. (גיליון GCC גיליון 50099) - תוקנה שגיאת מהדר פנימית עם כמות Shift שלילית. (בעיה ב-GCC)
- תוקן ARM GCC 4.4.3/4.6
- תוקן
-fstack-protector
ל-X86, שהוא גם ברירת המחדל של יעד ABI שלndk-build
x86. - תיקונים ספציפיים ל-MIPS:
- בוצע תיקון של הסיומת
STLport
על ידי הגדרת הערך_STLP_LITTLE_ENDIAN
ל-1 כאשר ההידור של MIPSlibstlport_*
. - תוקנה הבעיה
__builtin_unreachable
ב-GCC במהלך ההידור של LLVM. (בעיה מס' 54369 של GCC) - תיקון עקב העברה לאחור של תהליך הידור (compile) ב-
cc1
שצורך 100% מהמעבד (CPU). (גיליון GCC גיליון 50380)
- בוצע תיקון של הסיומת
- תיקונים ספציפיים לכלי לניפוי באגים ב-GNU:
- התמיכה ב-Python הושבתה ב-gdb-7.x בזמן ה-build, אחרת הגדרת gdb-7.x
יכול להוריד את גרסת Python שזמינה במארח וב-build
gdb
שתלוי מאוד בגרסה ספציפית של Python. (גיליון 36120) - תוקן
ndk-gdb
כאשרAPP_ABI
מכילall
ולא תואם לאף אחד של הארכיטקטורות הידועות. (גיליון 35392) - תוקנה תמיכה בשמות נתיב ב-Windows, על ידי שמירת התו
:
אם הוא נראה זה יכול להיות חלק מנתיב של Windows שמתחיל באות אחסון. (גיליון GDB מס' 12843) - תוקנה הוספה של תמיכה בנקודות עצירה בחומרה ל-ARM ב-
gdbserver
. (בעיית GDB) - נוסף תיקון כדי לקרוא את הערך הנוכחי של
solibs
רק כאשר ה-linker הוא עקבי. השינוי הזה מזרז את הטיפול באירועים שלsolib
. (גיליון 37677) - נוסף תיקון כדי לבצע ניסיונות חוזרים למצוא
solib
נקודות עצירה. GDB עכשיו מתבצע ניסיון חוזר שלenable_break()
בכל שיחה אלsvr4_current_sos()
עד הוא מצליח. (שינוי 43563) - תוקנה בעיה שבה
gdb
לא הפסיק לפעול בנקודות עצירה (breakpoint)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/*
שהוסר בטעות מ- הליבה (kernel) המקורית. (שינוי 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
שלuint64_t
עבור מהדרים של ANSI. (גיליון 1952) - תוקנו פקודות המאקרו של מעבד מראש ב-
<arch>/include/machine/*
. link.h
עבור MIPS הוחלפה בגרסה חדשה שתומכת בכל הפלטפורמות.- הסרת את
linux-unistd.h
- העברת פקודות מאקרו
LONG_LONG_MIN
,LONG_LONG_MAX
ו-GLibc ספציפיות ל-GLibcULONG_LONG_MAX
מ-<pthread.h>
עד<limits.h>
.
- תוקן קוד
- תוקנה גלישה במאגר נתונים זמני ב-
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
. הסמלים האלה מיוצאים לגרסאות build של 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
, הוסרו מ- הספרייהlibc.so
בפלטפורמת X86:__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 ABI נתמכים רק ב-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-7native-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 (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
מופעל המארח יכול להגדיר נקודת עצירה (breakpoint) ב-__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 (binutils
2.19 ו-GDB 6.6).- GCC 4.6 הוא עכשיו 'צרור הכלים' שמוגדר כברירת מחדל. צריך להגדיר את
NDK_TOOLCHAIN_VERSION=4.4.3
בApplication.mk
כדי לבחור את הקמפיין המקורי. - תמיכה במנגנון לקישור של
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:- תוקן
ld --gc-sections
, ששומר באופן שגוי הפניות של זומבים אל של ספריות חיצוניות. (עוד מידע נוסף). - תוקנה פקודת
strip
ARM כדי לשמר את הערכיםp_align
המקורייםp_flags
בקטעGNU_RELRO
אם הם חוקיים. בלי התיקון הזה, תוכנות אי אפשר לנפות באגים שנוצרו על ידי-fPIE
. (מור E info)
- תוקן
- הושבתה האופטימיזציה של
sincos()
לצורך תאימות לגרסאות ישנות יותר פלטפורמות שונות.
- GCC 4.6 הוא עכשיו 'צרור הכלים' שמוגדר כברירת מחדל. צריך להגדיר את
- אפשרויות ה-build עודכנו כדי להפעיל את ההגנות של
relro
/bind_now
אף פעם לא ל-eXecute (NX) כברירת מחדל:- הוספת את
--noexecstack
ל-Assmbler ו--z noexecstack
ל-linker שמספק הגנת NX מפני מתקפות של גלישת מאגר נתונים זמני באמצעות הפעלת ביט NX בסטאק ערימה. - נוספו
-z relro
ו--z now
לחיזוק לצורך הקשחה של מקורות פנימיים קטעי נתונים לאחר קישור כדי להגן מפני נקודות חולשה באבטחה שנגרמו על ידי פגיעה בזיכרון. (מידע נוסף: 1, 2) - אפשר להשבית את התכונות האלו באמצעות האפשרויות הבאות:
- השבתה של ההגנה NX על ידי הגדרה של האפשרות
--execstack
ו--z execstack
לרכיב המקשר. - להשבית את הקשחה של נתונים פנימיים על ידי הגדרה של
-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
) כדי שכלים לניפוי באגים יוכלו לפעול בהתאם. המבנה ואת הערכים שלהם, מוגדרים כך: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
). (מידע נוסף) - תוקנו שגיאות בכלים של
ld
במהלך השימוש ב---gc-sections
. (מידע נוסף) - תוקנה בעיית ספירה של MIPS
GOT_PAGE
. (מידע נוסף) - תוקן הקישור לסימן האזהרה שאפשר לעקוב אחריו עבור
mips_elf_count_got_symbols
. - תוקן הקישור לסימן האזהרה שאפשר לעקוב אחריו עבור
mips_elf_allocate_lazy_stub
. - קובץ ה-MIPS
.dynamic
הועבר אל פלח הנתונים כך שניתן יהיה לכתוב אותו. - הערכים במקודדים הוחלפו עבור סמלים בגודלי פלחים נכונים עבור MIPS.
- הוסרה האפשרות
-mno-shared
מברירות המחדל ב- Toolchain של MIPS. ברירת המחדל של Android Toolchain היא-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 Toolchain השתנה מ-
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 הקבצים הבינאריים של שרשראות כלים. - נוספו סקריפטים
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 ואחרים כשמנסים להשתמש
פונקציות מסוימות של נקודה צפה (floating-point)
cosf
,sinf
,expf
).
- תוקנו קבצים בינאריים של GNU STL Armeabi-v7a כך שלא יקרוסו בשרת שאינו NEON
מכשירים. הקבצים שסופקו עם NDK r7b לא הוגדרו כראוי,
ולגרום לקריסות במכשירים מבוססי Tegra2 ואחרים כשמנסים להשתמש
פונקציות מסוימות של נקודה צפה (floating-point)
- שינויים חשובים:
-
- נוספה תמיכה בספריות פלט בהתאמה אישית דרך
NDK_OUT
במשתנה הסביבה. כשהמשתנה הזה מוגדר, הוא משמש לאחסון כל קובצי ביניים, במקום$PROJECT_PATH/obj
. המשתנה הוא מזוהה גם על ידיndk-gdb
. - נוספה תמיכה לבניית מודולים עם מאות או אפילו אלפי מקורות
קבצים על ידי הגדרה של
LOCAL_SHORT_COMMANDS
עדtrue
ב-Android.mk
.השינוי הזה מאלץ את מערכת ה-build של NDK להוסיף את רוב האפשרויות של מקשר או ארכיון לקובצי רשימה, כפתרון למגבלות של אורך שורת הפקודה. אתה יכול לראות עוד פרטים בכתובת
docs/ANDROID-MK.html
.
- נוספה תמיכה בספריות פלט בהתאמה אישית דרך
- תיקוני באגים אחרים:
-
- תוקנה ההטמעה של
android_getCpuCount()
בcpufeatures
למשאבי עזרה שלנו. במכשירים מסוימים, שבהם ליבות מופעלות באופן דינמי על ידי המערכת, בפעם הראשונה שהפונקציה תדווח על המספר הכולל של הליבות הפעילות נקרא, ולא את מספר הליבות שזמינות מבחינה פיזית.
- תוקנה ההטמעה של
Android NDK r7b (פברואר 2012)
הגרסה הזו של NDK כוללת תיקונים לגרסאות build מקוריות של Windows, Cygwin ועוד שיפורים:
- תיקוני באגים חשובים:
-
- בוצע עדכון של
sys/atomics.h
כדי למנוע בעיות שקשורות לתיקון במכשירים מסוימים מבוססי ARM עם מספר ליבות. אפשר לבנות מחדש את המקורות שלא נערכו בהם שינויים של ה-NDK וצריך למנוע לחלוטין את הבעיה הזו. מידע נוסף זמין ב-docs/ANDROID-ATOMICS.html
. - חזר לגרסה 2.19 של
binutils
כדי לפתור בעיות בניפוי באגים הופיעה ב-NDK r7 (שעבר ל-binutils
2.20.1). - תוקן
ndk-build
ב-Linux של 32 ביט. אירעה שגיאת אריזה של קובץ ההפעלהawk
ב-prebuilt/linux-x86/bin
ב-NDK r7. - גרסת build מקומית מתוקנת של Windows (
ndk-build.cmd
). מצבי build אחרים לא הושפעו. התיקונים כוללים:- הוסר באג לולאה אינסופית / גלישת מחסנית שאירעה בעת הניסיון
כדי לקרוא אל
ndk-build.cmd
מספרייה שלא הופיעה בחלק העליון של הדף את נתיב הפרויקט (למשל בכל ספריית משנה שלו). - תוקנה בעיה שבה המערכת התעלמה מקובצי תלות שנוצרו באופן אוטומטי. הזה פירוש הדבר שעדכון הכותרת לא גרם לאיסוף מחדש של מקורות שכללו את זה.
- תוקנה בעיה שבה תווים מיוחדים בקבצים או בנתיבים, שאינם רווחים ו- שלך, לא טופלו כראוי.
- הוסר באג לולאה אינסופית / גלישת מחסנית שאירעה בעת הניסיון
כדי לקרוא אל
- תיקנו את שרשרת הכלים העצמאית כדי ליצור קבצים בינאריים מתאימים במהלך השימוש
-lstdc++
(כלומר, קישור אל סביבת זמן הריצה של ++Clibstdc++
ב-GNU). שלך צריך להשתמש ב--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
, וכו'
פרטים מלאים זמינים ביומן ההתחייבות.
STLport
: הוסרו 5 מאתחלים סטטיים מיותרים מהספרייה.- ספריות GNU libstdc++ עבור Armeabi-v7a נוצרו בטעות עבור armeabi במקום זאת. לשינוי הזה לא הייתה השפעה על הנכונות, אבל השתמשנו ממשק ABI אמור לספק ביצועים קצת יותר טובים.
- ספריית העזרה של
cpu-features
עודכנה ועכשיו היא דיווח על שלושה שלבים אופציונליים x86 תכונות מעבדים (SSSE3
,MOVBE
ו-POPCNT
). צפייה אפשר לקבל פרטים נוספים ב-docs/CPU-FEATURES.html
. - האזכור של
NDK_APPLICATION_MK
ב-docs/NDK-BUILD.html
עודכן מתוך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 Maker.
- כשהאפליקציה שלכם משתמשת בזמן הריצה של GNU
Android NDK r7 (נובמבר 2011)
גרסה זו של NDK כוללת תכונות חדשות לתמיכה גם בפלטפורמת Android 4.0 לא רק תוספות ושיפורים רבים נוספים:
- תכונות חדשות
-
- נוספו ממשקי API רשמיים של NDK ל-Android 4.0 (רמת API 14), שמוסיף את הרכיבים הבאים
פיצ'רים מותאמים לפלטפורמה:
- נוסף ממשק API של מולטימדיה מקורי על סמך Phronos Group OpenMAX 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 Level 14 אפשר עכשיו לפענח אודיו דחוס (למשל MP3, AAC,
Vorbis) ל-PCM. פרטים נוספים זמינים בכתובת
docs/opensles/index.html
http://www.khronos.org/opensles/.
- נוסף ממשק API של מולטימדיה מקורי על סמך Phronos Group OpenMAX 1.0.1
רגילה. הממשק החדש של
- נוספה תמיכה ב-Ccache. כדי להאיץ בנייה מחדש גדולה,
משתנה הסביבה
NDK_CCACHE
ל-ccache
(או הנתיב אל הבינארי שלccache
). לאחר ההצהרה, מערכת ה-build של NDK באופן אוטומטי משתמש ב-Ccache במהלך הידור של קובץ מקור. מוצרים לדוגמה: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
משורת הפקודה, וזו דרך מהירה לבדוק אם build לכל ממשקי ה-ABI הנתמכים מבלי לשנות את הפונקציונליות של הפרויקטApplication.mk file
. לדוגמה:ndk-build APP_ABI=all
- נוסף משתנה
LOCAL_CPP_FEATURES
ביחידה הארגוניתAndroid.mk
מאפשרת להצהיר באילו תכונות C++ (RTTI או חריגים) נעשה שימוש במודול. הזה מבטיח שהקישור הסופי יפעל כראוי אם יש לכם מודולים מוכנים מראש שתלויים לגבי התכונות האלה. ראוdocs/ANDROID-MK.html
ו אפשר לקבל פרטים נוספים בdocs/CPLUSPLUS-SUPPORT.html
. - נתיבים מקוצרים לקובצי מקור ואובייקטים שמשמשים בפקודות build. מתי
הפעלה של
$NDK/ndk-build
מנתיב הפרויקט, מהנתיבים למקור וקבצים בינאריים שמועברים לפקודות ה-build, קצר יותר כעת, מפני שהם מועברים ביחס לספרייה הנוכחית. זה מועיל כאשר מפתחים פרויקטים עם הרבה קובצי מקור, כדי להימנע ממגבלות אורך שורת הפקודה שנתמך על ידי מערכת ההפעלה של המארח. ההתנהגות לא השתנתה אם מפעילים אתndk-build
מספריית משנה של עץ הפרויקט, או מגדירים אתNDK_PROJECT_PATH
שיצביע לספרייה ספציפית.
- נוספו ממשקי API רשמיים של NDK ל-Android 4.0 (רמת API 14), שמוסיף את הרכיבים הבאים
פיצ'רים מותאמים לפלטפורמה:
- תכונות ניסיוניות
-
עכשיו ניתן ליצור את קובצי המקור מסוג NDK ב-Windows בלי Cygwin באמצעות קריאה ל
סקריפט
ndk-build.cmd
משורת הפקודה מנתיב הפרויקט. הסקריפט מקבל בדיוק את אותם הארגומנטים כמו סקריפטndk-build
המקורי. חבילת Windows NDK מגיעה עם קבצים בינאריים מוכנים מראש ל-GNU Maker, Awk ועוד שנדרשים על ידי ה-build. לא צריך להתקין שום דבר אחר כדי לקבל במערכת build פעילה.חשוב:
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
פועל עכשיו בצורה נכונה לפעילויות עם מספר קטגוריות בתוך את מסנני ה-Intent העיקריים שלהם.- ייבוא של ספרייה סטטית מתבצע עכשיו בצורה תקינה. לדוגמה, אם רמה עליונה
המודול
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"
ומספרי ארכיטקטורות. - תוקן המיקום של הקבצים הבינאריים של STLport מוכנים מראש בחבילת הגרסה של NDK. באג בסקריפט החבילה הצבת אותן במיקום שגוי.
- תיקנו את השימוש ב-
atexit()
בספריות משותפות עם x86 העצמאי בכלי. - בוצע תיקון של
make-standalone-toolchain.sh --arch=x86
. בעבר זה נכשל כדי להעתיק את הקבצים הבינאריים המתאימים של GNU libstdc++ למיקום הנכון. - תיקנו את האזהרות של ה-toolchain Linker העצמאי לגבי חסרה ההגדרה
גודל עבור הסמל
__dso_handle
(ARM בלבד). - תוקן סדר ההכללה של
$(SYSROOT)/usr/include
לגרסאות build מסוג x86. יש לעיין בהבאג עבור מידע נוסף. - ההגדרות של
ptrdiff_t
ושלsize_t
תוקנו ב במערכות ספציפיות ל-x86, אם משתמשים בהן עם מערכת הכלים הנפרדת x86.
- ה-build תוקן כשנעשה שימוש ב-
Android NDK r6 (יולי 2011)
הגרסה הזו של NDK כוללת תמיכה ב-ABI x86 ושינויים קטנים אחרים.
למידע מפורט שמתאר את השינויים בגרסה הזו, אפשר לקרוא את
מסמך אחד (CHANGES.HTML
) כלול בחבילת ה-NDK.
- הערות כלליות:
-
- מוסיף תמיכה ב-ABI x86, שמאפשר ליצור קוד מכונה
שפועל במכשירי Android תואמים מבוססי x86. תכונות עיקריות עבור x86
כוללים צרור כלים ספציפי ל-x86, כותרות מערכת, ספריות
תמיכה בניפוי באגים. לכל הפרטים בנוגע לתמיכה ב-x86,
לראות את
docs/CPU-X86.html
בחבילת ה-NDK.כברירת מחדל, קוד נוצר עבור מכשירים מבוססי ARM, אבל ניתן להוסיף x86 ההגדרה של
APP_ABI
בקובץApplication.mk
כדי לפתח גרסת build לפלטפורמות 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
.
- מוסיף תמיכה ב-ABI x86, שמאפשר ליצור קוד מכונה
שפועל במכשירי Android תואמים מבוססי x86. תכונות עיקריות עבור x86
כוללים צרור כלים ספציפי ל-x86, כותרות מערכת, ספריות
תמיכה בניפוי באגים. לכל הפרטים בנוגע לתמיכה ב-x86,
לראות את
- שינויים נוספים:
arm-eabi-4.4.0
, שהוצאה משימוש מאז NDK r5, הוסר מהפצת NDK.
Android NDK r5c (יוני 2011)
הגרסה הזו של NDK לא כוללת תכונות חדשות בהשוואה ל-r5b. גרסת r5c מתייחסת לבעיות הבאות בגרסת r5b:
- תיקוני באגים חשובים:
-
ndk-build
: תוקן באג נדיר שהופיע כשניסית לבצע במקביל של פרויקטים שניתנים לניפוי באגים.- תוקנה שגיאת הקלדה שמנעה את ההפעלה של
LOCAL_WHOLE_STATIC_LIBRARIES
כמו שצריך עם 'צרור הכלים החדש' ותיעוד נוסף עבורdocs/ANDROID-MK.html
. - תוקן באג שגרם לקריסה של קוד בקישור אל
gnustl_static
במהלך ההפעלה גרסאות ישנות יותר מרמת API 8 (Android 2.2). ndk-gdb
: תוקן באג שגרם לתקלה בפילוח במהלך ניפוי באגים 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) כדי לחשוף בצורה נכונה ב-
פונקציות חדשות של link time שנוספו ברמת ה-API הזו (לדוגמה,
pthread_rwlock_init
).
- שיפורים ותיקונים קלים:
-
- מעכשיו קובצי האובייקטים מקושרים תמיד לפי הסדר שבו הם מופיעים
LOCAL_SRC_FILES
זה לא היה כך בעבר כי הקבצים היו בקיבוץ לפי תוספי מקור. - כאשר
import-module
נכשל, הוא מדפיסה עכשיו את רשימת הספריות אנשים חיפשו. כדאי לבדוק אם ההגדרה שלNDK_MODULE_PATH
היא שמערכת ה-build משתמשת בה נכון. - כאשר
import-module
יצליח, הוא מדפיסה כעת את הספרייה שבה ביומן נמצא שהמודול (גלוי באמצעותNDK_LOG=1
). - הגברת מהירות ה-build של אפליקציות שניתנות לניפוי באגים כשיש מספר גדול מאוד לכלול ספריות בפרויקט.
ndk-gdb
: זיהוי טוב יותר שלadb shell
כשלים ומשופר הודעות שגיאה.<pthread.h>
: תוקנה ההגדרה שלPTHREAD_RWLOCK_INITIALIZER
לרמת API 9 (Android 2.3) ואילך.- תוקנה בעיה שבה מודול יכול לייבא את עצמו, וכתוצאה מכך נוצרה לולאה אינסופית יצרן GNU.
- תוקן באג שגרם ל-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 יכולים לפעול עכשיו Ubuntu 8.04 ומעלה.
- מתקן באג מהדר ב-arm-linux-androideabi-4.4.3 Toolchain. הבינארי הבינארי הקודם יצר רצפים לא חוקיים של הוראה לא חוקית כאשר שעוסקות בתווים חתומים.
- הוספת מסמכים חסרים עבור 'gnustl_static' עבור APP_STL, שמאפשר לקשר אל גרסת ספרייה סטטית של GNU libstdc++. ה-
- תוקנו
ndk-build
הבעיות הבאות:- באג שיצר קובצי תלות לא עקביים כאשר אירעה שגיאת הידור (compilation) ב-Windows. המצב הזה מנע יצירה תקינה של השגיאה תוקנה בקוד המקור.
- באג ספציפי ל-Cygwin שבו נעשה שימוש בנתיבים קצרים מאוד התקנת Android NDK או נתיב הפרויקט שהובילו של קובצי תלות לא חוקיים. כך נוצרו גרסאות build מצטברות בלתי אפשרי.
- שגיאת הקלדה שמנעה את הפעולה התקינה של ספריית ה-cpufeatures באמצעות רשת הכלים החדשה של NDK.
- גרסאות build ב-Cygwin מהירות יותר על ידי הימנעות משיחות אל
cygpath -m
מ-GNU Maker לכל קובץ מקור או קובץ אובייקט, שגרמו לבעיות עם עצי מקור גדולים מאוד. אם זה לא עובד כמו שצריך, הגדרNDK_USE_CYGPATH=1
ב- כדי להשתמש שוב ב-cygpath -m
. - התקנת Cygwin מודיעה למשתמש על נתיבי התקנה לא חוקיים מכילים רווחים. בעבר, נתיב לא חוקי הפלט יהיה שגיאה שמתלוננת על גרסה שגויה של GNU Maker, גם אם הלחצן הימני הותקן.
- תוקנה שגיאת הקלדה שמנעה את השימוש במשתנה הסביבה
NDK_MODULE_PATH
פועלות כראוי כאשר הוא הכיל כמה ספריות שמופרדות בנקודתיים. - הסקריפט
prebuilt-common.sh
מכיל תיקונים כדי לבדוק שהמהדר (compiler) בגרסת 64 ביט שנוצר באמצעות קוד מכונה, במקום להסתמך על תג המארח, מאפשר ל-toolchain של 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
.
- כוללת מערכת Toolchain חדשה (מבוססת על GCC 4.4.3), שיוצרת קוד טוב יותר, ויכולה
גם עכשיו
יכול לשמש בתור מקודד-מפענח עצמאי, לאנשים שרוצים לבנות את הדברים שלהם
./configure && make
צפייה docs/STANDALONE-TOOLCHAIN.html לקבלת הפרטים. הקבצים הבינאריים של GCC 4.4.0 עדיין קיימים סופקו, אבל הקבצים הבינאריים 4.2.1 הוסרו. - מוסיף תמיכה בספריות סטטיות ומשותפות מוכנות מראש (docs/PREBUILTS.html) וגם מודול הייצוא והייבוא של מודולים של צד שלישי, כדי שיהיה קל יותר לשתף אותם ולהשתמש בהם שוב (docs/IMPORT-MODULE.html מסביר מדוע).
- הגדרת ברירת מחדל של הטמעת STL ב-C++ (על סמך STLport) כמודול עזר. הוא אפשר להשתמש באחת מהן כספרייה סטטית או משותפת (הפרטים ודוגמאות השימוש מופיעים מקורות/android/stlport/README). מובנה גם קבצים בינאריים עבור STLport (סטטי או משותפים) ו-GNU libstdc++ (סטטי בלבד) אם תבחרו להדר באמצעות הספריות האלה במקום הטמעת ברירת המחדל של C++ STL. חריגים של C++ ו-RTTI לא נתמכים בהטמעת ה-STL שמוגדרת כברירת מחדל. לקבלת מידע נוסף מידע נוסף, ראה docs/CPLUS-SUPPORT.HTML.
- כולל שיפורים בספריית העזרה של
cpufeatures
שמשתפרות דיווח מסוג המעבד (CPU) (מכשירים מסוימים דיווחו בעבר על מעבד ARMv7 כאשר המכשיר ARMv6). רביעי להמליץ למפתחים שמשתמשים בספרייה הזו כדי לבנות מחדש את האפליקציות שלהם, ולאחר מכן להעלות את הקובץ ל-Google Play כדי ליהנות מהשיפורים. - הוספת ספריית EGL שמאפשרת ליצור ולנהל מרקמים של OpenGL ES וגם שירותים שונים.
- הוספת אפליקציות לדוגמה חדשות,
native-plasma
ו-native-activity
, כדי להדגים איך לכתוב פעילות מקומית. - כולל תיקוני באגים רבים ושיפורים קטנים אחרים. אפשר לקרוא את docs/CHANGES.html כדי לראות הקטגוריה 'עוד' רשימה מפורטת של שינויים.
Android NDK r4b (יוני 2010)
- הערות NDK r4b:
-
כולל תיקונים למספר בעיות בסקריפטים של גרסת ה-build וניפוי הבאגים של NDK — נעשה שימוש ב-NDK r4, מומלץ להוריד את גרסת ה-build של NDK r4b. לקבלת מידע מפורט מידע שמתאר את השינויים בגרסה הזו, יש לקרוא את מסמך CHANGES.TXT כלול בחבילת ה-NDK שהורדתם.
- הערות כלליות:
-
- מערכת build פשוטה יותר באמצעות גרסת ה-build החדשה של
ndk-build
הפקודה. - הוספת תמיכה לניפוי באגים מקורי בקלות של קוד מכונה שנוצר בסביבת הייצור
מכשירים באמצעות הפקודה
ndk-gdb
החדשה. - מוסיפים ממשק ABI חדש ספציפי ל-Android לארכיטקטורות מעבדים (CPU) מבוססי ARM,
armeabi-v7a
ה-ABI החדש מרחיב את ה-ABI הקיים שלarmeabi
כך כוללים את התוספים הבאים של קבוצת ההוראות למעבד (CPU):- הוראות לשלב 2
- הוראות FPU לחומרת VFP (VFPv3-D16)
- תמיכה אופציונלית בפנימיות של ARM Advanced SIMD (NEON) GCC וב-VFPv3-D32. נתמך על ידי מכשירים כמו Verizon Droid by Motorola, Google Nexus One, ו-Google Nexus One אחרים.
- הוספת ספרייה סטטית חדשה של
cpufeatures
(עם מקורות) שמאפשרת מזהה את תכונות המעבד (CPU) של המכשיר המארח בזמן הריצה. באופן ספציפי, אפליקציות יכולות לבדוק אם יש תמיכה ב-ARMv7-A, וכן ב-VFPv3-D32 וב-NEON, ולאחר מכן לספק את נתיבי הקוד לפי הצורך. - מוסיפה אפליקציה לדוגמה,
hello-neon
, שממחישה איך להשתמשcpufeatures
כדי לבדוק את התכונות של המעבד (CPU) ולספק אופטימיזציה את נתיב הקוד באמצעות מנגנוני NEON, אם הוא נתמך על ידי המעבד (CPU). - אפשר ליצור קוד מכונה לאחת מקבוצות ההוראות הנתמכות או לשתיהן
של ה-NDK. לדוגמה, אפשר לפתח את הארכיטקטורות ARMv5 ו-ARMv7-A כבר
באותו זמן ולשמור את כל מה שנמצא בתהליך הבקשה הסופי
.apk
- כדי לוודא שהאפליקציות שלך זמינות למשתמשים רק אם המכשירים שלהם שיכול להפעיל אותן, Google Play מסננת עכשיו אפליקציות מידע על קבוצות ההוראות שכלול באפליקציה שלך — לא נדרשת שום פעולה לגבי החלק שלך כדי להפעיל את הסינון. בנוסף, גם מערכת Android עצמה בודקת של האפליקציה בזמן ההתקנה והיא מאפשרת להמשיך את ההתקנה רק אם מספק ספרייה שעברה הידור, בהתאם לארכיטקטורת המעבד (CPU) של המכשיר.
- תוספת תמיכה ב-Android 2.2, כולל API יציב חדש לגישה לפיקסל
מאגרים של
Bitmap
אובייקטים מקוד נייטיב.
- מערכת build פשוטה יותר באמצעות גרסת ה-build החדשה של
Android NDK r3 (מרץ 2010)
- הערות כלליות:
-
- הוספת תמיכה בספרייה המקורית של OpenGL ES 2.0.
- מוסיף אפליקציה לדוגמה,
hello-gl2
, שממחישה את השימוש OpenGL ES 2.0 קודקוד ורכיבי הצללה (shader) של מקטעים. - הקבצים הבינאריים של 'צרור כלים' עברו רענון לגרסה הזו עם 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
, שמציגה גרפיקה תלת-ממדית באמצעות ממשקי ה-API המקוריים של OpenGL ES, תוך ניהול מחזור החיים של הפעילות באמצעות אובייקטGLSurfaceView
.
Android NDK r1 (יוני 2009)
הגרסה המקורית הושקה כ-"Android 1.5 NDK, Release 1".
- הערות כלליות:
-
- כולל תמיכה מהדר (GCC) להוראות ARMv5TE, כולל Thumb-1 הוראות להתאמה אישית.
- כולל כותרות מערכת לממשקי API מקוריים ויציבים, תיעוד ודוגמאות תרגום מכונה.