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