이 페이지에는 출시된 모든 정식 NDK 버전의 변경사항에 관한 정보가 포함되어 있습니다. 최신 정식 NDK 버전 또는 현재 이용 가능한 베타 버전을 다운로드하려면 NDK 다운로드 페이지를 참고하세요.
자세한 내용은 android-ndk-announce Google 그룹을 참고하고 출시 공지사항을 받아보려면 구독하세요.
Android NDK r27 LTS(2024년 7월)
변경 로그- 다운로드
-
- 이 출시는 여기에서 다운로드할 수 있습니다.
Android NDK r26 LTS(2023년 9월)
변경 로그- 다운로드
-
- 이 출시는 여기에서 다운로드할 수 있습니다.
- 공지사항
-
- KitKat(API 19 및 20)은 더 이상 지원되지 않습니다.
Android NDK r25 LTS(2022년 7월)
변경 로그- 다운로드
-
- 이 출시는 여기에서 다운로드할 수 있습니다.
- 공지사항
-
- Android 13 API를 포함합니다.
- LLVM 14 개발에 따라 LLVM을 clang-r450784d로 업데이트했습니다.
Android NDK r24(2022년 3월)
변경 로그- 다운로드
-
- 이 출시는 여기에서 다운로드할 수 있습니다.
- 공지사항
-
-
GNU 어셈블러(GAS)가 삭제되었습니다.
-fno-integrated-as
를 사용하여 빌드한 경우 이 플래그를 삭제해야 합니다. 어셈블리를 LLVM과 호환되도록 하는 방법은 Clang 이전 참고사항을 확인하세요. - GDB가 삭제되었습니다. 대신 LLDB를 사용하세요. ndk-gdb는 기본적으로 LLDB를 사용하며 Android 스튜디오는 LLDB만 지원했습니다.
- Jelly Bean(API 16, 17, 18)은 더 이상 지원되지 않습니다. NDK에서 지원하는 최소 OS는 KitKat(API 수준 19)입니다.
- 비 Neon 기기는 더 이상 지원되지 않습니다. 극소수의 매우 오래된 기기에서만 Neon을 지원하지 않으므로 앱 대부분의 경우 성능 개선 외에는 느껴지는 차이가 없습니다.
- RenderScript 빌드 지원이 삭제되었습니다. RenderScript는 Android 12에서 지원 중단되었습니다. RenderScript에서 앱을 이전하는 작업을 완료하지 않았다면 NDK r23 LTS를 사용할 수 있습니다.
-
GNU 어셈블러(GAS)가 삭제되었습니다.
Android NDK r23 LTS(2021년 8월)
변경 로그- 다운로드
-
- 이 출시는 여기에서 다운로드할 수 있습니다.
- 공지사항
-
-
GNU 어셈블러(GAS)를 제외한 GNU binutils를 삭제했습니다. GAS는 다음 출시 버전에서 삭제됩니다.
-fno-integrated-as
를 사용하여 빌드하는 경우 이 플래그를 삭제할 수 없다면 버그를 신고하세요. -
GDB 지원을 종료했습니다. GDB는 다음 출시 버전에서 삭제됩니다.
대신 LLDB를 사용하세요.
ndk-gdb
는 기본적으로 LLDB를 사용합니다. - NDK r23이 비 Neon 기기를 지원하는 마지막 출시 버전입니다. NDK r24부터 sysroot의 armeabi-v7a 라이브러리가 Neon으로 빌드됩니다. 극소수의 매우 오래된 기기에서만 Neon을 지원하지 않으므로 앱 대부분의 경우 성능 개선 외에는 느껴지는 차이가 없습니다.
- Jelly Bean(API 16, 17, 18)은 다음 NDK 출시 버전에서 지원되지 않습니다. r24용 NDK에서 지원하는 최소 OS는 KitKat(API 수준 19)입니다.
-
GNU 어셈블러(GAS)를 제외한 GNU binutils를 삭제했습니다. GAS는 다음 출시 버전에서 삭제됩니다.
Android NDK r22b(2021년 3월)
변경 로그- 다운로드
-
- 이 출시는 여기에서 다운로드할 수 있습니다.
- 공지사항
-
-
GNU binutils는 지원 중단되었으며 향후 NDK 출시에서 삭제될 예정입니다. GNU 어셈블러(
as
)도 여기에 포함됩니다.-fno-integrated-as
를 사용하여 빌드하는 경우 이 플래그를 삭제할 수 없다면 버그를 신고하세요.as
를 직접 사용하는 경우 대신clang
을 사용합니다. - 이제 LLD가 기본 링커입니다. ndk-build 및 CMake 도구 모음 파일도 llvm-ar 및 llvm-strip을 사용하도록 이전되었습니다.
- ndk-gdb가 이제 lldb를 디버거로 사용합니다. gdb는 지원 중단되었으며 향후 출시에서 삭제될 예정입니다. gdb로 대체하려면 --no-lldb 옵션을 사용합니다. 그러나 lldb를 사용할 수 없는 이유를 설명하는 버그를 신고하세요.
-
이제
std::filesystem
지원이 포함되었습니다. 알려진 문제가 두 가지 있습니다.
-
GNU binutils는 지원 중단되었으며 향후 NDK 출시에서 삭제될 예정입니다. GNU 어셈블러(
Android NDK r21e LTS(2021년 1월)
변경 로그- 다운로드
-
- 이 출시는 여기에서 다운로드할 수 있습니다.
- 공지사항
-
-
Windows 32비트는 더 이상 지원되지 않습니다. 지원되지 않아도 대부분의 사용자에게는 영향을 미치지 않습니다. 여전히 Windows 32비트 버전으로 NDK 앱을 빌드해야 한다면 계속 NDK r20을 사용하세요.
이 변경사항에 관한 자세한 내용은 Android 개발자 도구에서 주제에 관한 블로그 게시물 을 참조하세요.
-
이제 LLD를 테스트할 수 있습니다.
AOSP는 기본적으로 LLD를 사용하도록 전환되었으며 NDK도 전환할 예정입니다
(시기 미정). 연결 시
-fuse-ld=lld
를 전달하여 앱에서 LLD를 테스트하세요. 문제 843은 llvm-strip 및 llvm-objcopy와 반대로 binutils 스트립이 포함된 LLD 및 objcopy를 사용한 빌드에 영향을 미칩니다. -
기존 도구 모음 설치 경로는 다음 출시에서 삭제됩니다. 이러한 경로는 NDK r19부터 사용하지 않으며 NDK에 상당한 공간을 차지합니다. 삭제되는 경로는 다음과 같습니다.
- 플랫폼
- sources/cxx-stl
- sysroot
- toolchains(toolchains/llvm 제외)
make_standalone_toolchain.py
사용자가 아닙니다(r19부터 스크립트가 필요 없어짐). 기존 도구 모음 레이아웃에서 이전하는 방법에 관한 자세한 내용은 사용 중인 NDK 버전에 관련된 빌드 시스템 유지관리자 가이드를 참고하세요. - 2019년 8월부터 Play 스토어에서 APK를 업로드할 때 64비트 지원 기능이 필요합니다. 지금 포팅을 시작하여 미리 대비하시기 바랍니다. 자세한 내용은 이 블로그 게시물을 참고하세요.
- 이제 서명되고 공증된 macOS 앱 번들을 위키 및 Google 웹사이트에서 다운로드할 수 있습니다. 번들만 RPATH를 사용하고 공증을 통과할 수 있으므로 기존의 macOS용 NDK 패키지는 공증될 수 없습니다. SDK는 기존 패키지를 계속 사용합니다. 앱 번들에 필요한 레이아웃 변경으로 Android 스튜디오와 호환되지 않을 수 있기 때문입니다. NDK는 SDK Manager를 통해 다운로드될 때 격리되지 않으므로 현재 게이트키퍼에서 허용합니다. 현재 SDK Manager는 macOS용 NDK를 가져오는 가장 안정적인 방법입니다.
-
Android NDK r20b(2019년 6월)
변경 로그Android NDK r19c(2019년 1월)
변경 로그- 다운로드
-
- 이 출시는 여기에서 다운로드할 수 있습니다.
- 공지사항
-
-
개발자는 LLD로 앱 테스트를 시작해야 합니다. AOSP는 기본적으로 LLD를 사용하도록 전환되었으며 NDK는 다음 버전에서 기본적으로 LLD를 사용할 예정입니다. BFD 및 Gold는 LLD가 해결되지 않은 주요한 문제 없이 출시 주기를 통과하면 삭제될 예정입니다(r21로 예상됨). 연결 시
-fuse-ld=lld
를 전달하여 앱에서 LLD를 테스트하세요. 참고: lld는 현재 Windows에서 압축된 기호를 지원하지 않습니다. 문제 888. Clang도 Windows에서 압축된 기호를 생성할 수 없지만 Darwin 또는 Linux에서 빌드한 아티팩트를 사용할 때 문제가 될 수 있습니다. - 2019년 8월부터 Play 스토어에서 APK를 업로드할 때 64비트 지원 기능이 필요합니다. 지금 포팅을 시작하여 미리 대비하시기 바랍니다. 자세한 내용은 이 블로그 게시물을 참조하세요.
-
문제 780: 이제 독립 실행형
도구 모음이 필요하지 않습니다. 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 또는 독립 실행형 도구 모음을 사용하는 경우 워크플로를 변경해서는 안 됩니다. 이 변경사항은 서드 파티 빌드 시스템의 유지관리자에게 의미가 있으며, 이 유지관리자는 이제 일부 Android 전용 코드를 삭제할 수 있습니다. 자세한 내용은 빌드 시스템 유지관리자 가이드를 참조하세요. - ndk-depends가 삭제되었습니다. ReLinker가 이전 Android 버전의 네이티브 라이브러리 로드 문제의 더 나은 해결책이라고 생각됩니다.
- 문제 862: Clang으로 리디렉션된 GCC 래퍼 스크립트는 대체 불가능한 기능이 없기 때문에 삭제되었습니다.
-
개발자는 LLD로 앱 테스트를 시작해야 합니다. AOSP는 기본적으로 LLD를 사용하도록 전환되었으며 NDK는 다음 버전에서 기본적으로 LLD를 사용할 예정입니다. BFD 및 Gold는 LLD가 해결되지 않은 주요한 문제 없이 출시 주기를 통과하면 삭제될 예정입니다(r21로 예상됨). 연결 시
Android NDK r18b(2018년 9월)
변경 로그- 다운로드
-
- 이 출시는 여기에서 다운로드할 수 있습니다.
- 공지사항
-
- GCC가 삭제되었습니다.
-
이제 LLD를 테스트할 수 있습니다.
AOSP는 기본적으로 LLD를 사용하도록 전환하고 있으며 NDK도 전환할 예정입니다(시기 미정). 연결 시
-fuse-ld=lld
를 전달하여 앱에서 LLD를 테스트하세요. - gnustl, gabi++, stlport가 삭제되었습니다.
- ICS(android-14 및 android-15) 지원 기능이 삭제되었습니다. 실행 파일을 사용하는 앱은 더 이상 PIE 및 PIE가 아닌 실행 파일을 모두 제공할 필요가 없습니다.
- 2019년 8월부터 Play 스토어에서 APK를 업로드할 때 64비트 지원 기능이 필요합니다. 지금 포팅을 시작하여 미리 대비하시기 바랍니다. 자세한 내용은 이 블로그 게시물을 참고하세요.
Android NDK r17c(2018년 6월)
변경 로그- 다운로드
-
- 이 출시는 여기에서 다운로드할 수 있습니다.
- 공지사항
-
- GCC는 더 이상 지원되지 않으며, NDK r18에서 삭제될 예정입니다.
-
libc++가 이제 CMake 및 독립 실행형 도구 모음의 기본 STL입니다. 다른 STL을 수동으로 선택한 경우
libc++
로 이동하는 것을 적극 권장합니다. ndk-build는 여전히 STL을 사용하지 않는 것으로 기본 설정됩니다. 자세한 내용은 이 블로그 게시물을 참조하세요. - gnustl 및 stlport는 지원 중단되었으며 NDK r18에서 삭제될 예정입니다.
- ARMv5(armeabi), MIPS 및 MIPS64 지원 기능이 삭제되었습니다. 이러한 ABI 중 하나를 빌드하려고 하면 오류가 발생합니다.
- ICS(android-14 및 android-15) 지원 기능은 r18에서 삭제됩니다.
- 2019년 8월부터 Play 스토어에서 APK를 업로드할 때 64비트 지원 기능이 필요합니다. 지금 포팅을 시작하여 미리 대비하시기 바랍니다. 자세한 내용은 이 블로그 게시물을 참고하세요.
Android NDK r16b(2017년 12월)
변경 로그- 다운로드
- 이 출시는 여기에서 다운로드할 수 있습니다.
- 공지사항
-
- 지원 중단된 헤더가 삭제되었습니다. 통합 헤더가 이제 그냥 '헤더'입니다. 이전에 관한 팁은 통합 헤더 이전 참고사항을 참조하세요.
- GCC는 더 이상 지원되지 않으며, 아직 NDK에서 삭제되지는 않지만 더 이상 백포트를 수신하지 않습니다. gnustl의 일부분이 여전히 Clang과 호환되지 않으므로 libc++가 기본값이 될 만큼 충분히 안정되기 전에는 삭제할 수 없습니다. 다른 STL이 r18에서 삭제되면 삭제됩니다.
libc++
의 베타 테스트가 완료되었으며 이제 libc++가 NDK의 기본 STL입니다. r17부터libc++
가 CMake 및 독립 실행형 도구 모음의 기본 STL입니다. 다른 STL을 수동으로 선택한 경우libc++
로 이동하는 것을 적극 권장합니다. 자세한 내용은 이 블로그 게시물을 참조하세요.- ARM5(armeabi), MIPS 및 MIPS64가 지원 중단되었습니다. 더 이상 ndk-build를 사용하여 기본적으로 빌드되지 않지만 명시적으로 이름이 지정된 경우 여전히 빌드할 수 있으며, 'all', 'all32', 'all64'로 포함됩니다. 이들 각각에 대한 지원은 r17에서 삭제되었습니다. 이러한 ABI를 타겟팅하는 경우 CMake 및 ndk-build에서 모두 경고가 발생합니다.
- API
-
Android 8.1용 네이티브 API가 추가되었습니다. 이러한 API에 관한 자세한 내용은 네이티브 API 개요를 참고하세요.
이 버전의 새로운 기능 및 변경사항에 관한 추가 정보는 이 변경 로그를 참고하세요.
Android NDK r15c(2017년 7월)
변경 로그- 다운로드
- 이 출시는 여기에서 다운로드할 수 있습니다.
- 공지사항
-
- 통합 헤더가 기본적으로 사용 설정됩니다. 이 헤더를 사용하는 방법은 통합 헤더를 참조하세요.
- GCC는 더 이상 지원되지 않으며, 아직 NDK에서 삭제되지는 않지만 더 이상 백포트를 수신하지 않습니다. gnustl의 일부분이 여전히 Clang과 호환되지 않으므로 libc++가 기본값이 될 만큼 충분히 안정되기 전에는 삭제할 수 없습니다.
- Android 2.3(
android-9
)은 더 이상 지원되지 않습니다. NDK의 최소 API 수준 타겟은 이제 Android 4.0(android-14
)입니다.APP_PLATFORM
이android-14
보다 낮게 설정되면android-14
가 대신 사용됩니다. - 이제 NDK의 CMake에서 x86 및 x86-64 아키텍처에 실행할 YASM으로 작성된 어셈블리 코드를 빌드할 수 있습니다. 자세한 내용은 어셈블리 코드 빌드를 참조하세요.
참고: 지원 중단된 헤더는 향후 출시에서 삭제될 예정입니다. 이 헤더에서 문제가 발생하면 버그를 제출하세요.
이전에 관한 팁은 통합 헤더 이전 참고사항을 참조하세요.
- API
-
Android 8.0용 네이티브 API가 추가되었습니다. 이러한 API에 관한 자세한 내용은 네이티브 API 개요를 참조하세요.
이 버전의 새로운 기능 및 변경사항에 관한 추가 정보는 이 변경 로그를 참고하세요.
Android NDK r14b(2017년 3월)
변경 로그- 다운로드
- 이 출시는 여기에서 다운로드할 수 있습니다.
- 공지사항
-
- 통합 헤더: 이 출시에는 Android 플랫폼에 동기화되고 항상 정확한
최신 상태로 유지되는 플랫폼 헤더가 도입됩니다. 헤더만의 버그 수정은 이제
모든 API 레벨에 영향을 미칩니다. 통합 헤더가 도입되어 다음과 같은 이전 NDK
버전의 불일치 문제가 해결되었습니다.
- M 및 N의 헤더가 실제로는 L의 헤더였습니다.
- 헤더의 함수 선언이 플랫폼 수준과 올바르게 일치하지 않았습니다. 헤더에서 존재하지 않는 함수를 선언했거나 사용 가능한 함수를 선언하지 않았습니다.
- 이전 API 수준에 최신 API 수준에 있는 상수가 없거나 올바르지 않습니다.
새로운 통합 헤더는 기본적으로 사용 설정되지 않습니다. 이 헤더를 사용 설정하고 사용하는 방법은 통합 헤더를 참고하세요.
- GCC 지원 중단: 이 버전에서는 적극적인 GCC 지원이 종료됩니다. GCC가 아직 NDK에서 삭제되지는 않지만 더 이상 백포트를 수신하지 않습니다. gnustl의 일부분이 여전히 Clang과 호환되지 않으므로 libc++가 기본값이 될 만큼 충분히 안정되기 전에는 GCC가 완전히 삭제되지 않습니다.
- 통합 헤더: 이 출시에는 Android 플랫폼에 동기화되고 항상 정확한
최신 상태로 유지되는 플랫폼 헤더가 도입됩니다. 헤더만의 버그 수정은 이제
모든 API 레벨에 영향을 미칩니다. 통합 헤더가 도입되어 다음과 같은 이전 NDK
버전의 불일치 문제가 해결되었습니다.
이 버전의 새로운 기능 및 변경사항에 관한 추가 정보는 이 변경 로그를 참고하세요.
Android NDK r13b(2016년 10월)
- 다운로드
- 이 출시의 다운로드는 여기에 보관처리되었습니다.
- 공지사항
-
- GCC는 더 이상 지원되지 않으며, 아직 NDK에서 삭제되지는 않지만 더 이상 백포트를 수신하지 않습니다. gnustl의 일부분이 여전히 Clang과 호환되지 않으므로 libc++가 기본값이 될 만큼 충분히 안정되기 전에는 삭제할 수 없습니다. 그 이후에 삭제될 가능성이 큽니다.
- Android용 CPU 프로파일러 simpleperf가 추가되었습니다.
- r13b
-
-
__cxa_bad_cast
누락에 관한 추가 수정사항
-
- NDK
-
NDK_TOOLCHAIN_VERSION
이 이제 Clang으로 기본 설정됩니다.- libc++가 r263688로 업데이트되었습니다.
- (거의) 정리된 업스트림으로 재설정되었습니다. 이에 따라 여러 버그가 삭제되지만 libandroid_support를 정리해야 기본값으로 권장할 수 있습니다.
-
make-standalone-toolchain.sh
는 이제 단순히 도구의 Python 버전을 둘러싸는 래퍼입니다. 몇 가지 동작 차이가 있습니다. 자세한 내용은 커밋 메시지를 참조하세요. - 지원되지 않는 ABI용 일부 라이브러리가 삭제되었습니다(mips64r2, mips32r6, mips32r2, x32). 빠진 부분이 있을 수 있습니다.
- ARM android-21+용 정적 실행 파일을 빌드할 때 연결 시 crtbegin_static.o에 atexit가 누락되는 문제가 해결되었습니다: 문제 132
- build/cmake/android.toolchain.cmake에 CMake 도구 모음 파일이 추가되었습니다.
- 알려진 문제
Android NDK r12b(2016년 6월)
- 다운로드
- 이 출시의 다운로드는 여기에 보관처리되었습니다.
- 공지사항
ndk-build
명령어는 r13에서 Clang을 사용하도록 기본 설정됩니다. GCC는 이후 버전에서 삭제될 예정입니다.make-standalone-toolchain.sh
스크립트는 r13에서 삭제될 예정입니다.make_standalone_toolchain.py
가 요구에 적합한지 확인하세요.- 문제는 GitHub에 신고하세요.
ndk-gdb.py
가 수정되었습니다. (문제 118)-
더 이상 잘못된 enum 값이 포함되지 않도록
NdkCameraMetadataTags.h
가 업데이트되었습니다. - libc++를 사용하는 정적 라이브러리에 관해 잘못된 경고가 발생하는 ndk-build의 버그가 수정되었습니다. 이 변경사항에 대한 자세한 내용은 여기의 댓글을 참조하세요.
- android-24에 대한 OpenSLES 헤더가 업데이트되었습니다.
- NDK
- armeabi-v7a-hard ABI 지원이 중단되었습니다. 자세한 내용은 이 설명을 참조하세요.
- 이전 GB 플랫폼 수준의 모든 sysroot가 삭제되었습니다. r11에서 이에 대한 지원이 중단되었지만 실제로 삭제되지는 않았습니다.
- 이제 ARM32에서 c++_shared를 사용할 때 예외 처리가 대부분 작동합니다. 언와인더가 이제 libc++ 자체가 아니라 링크된 각 객체와 연결됩니다. 이 예외 처리에 관한 자세한 내용은 알려진 문제를 참고하세요.
- 기본 컴파일러 플래그가 제거되었습니다.
(문제 27).
- 이 변경사항에 관한 자세한 내용은 이 변경사항 목록을 참조하세요.
- 독립 실행형 도구 모음의 Python 구현이
build/tools/make_standalone_toolchain.py
에 추가되었습니다.- 이제 Windows 사용자가 Cygwin이 없어도 이 기능을 사용할 수 있습니다.
- bash flavor는 r13에서 삭제될 예정이므로 지금 새로운 버전을 테스트하세요.
-fno-limit-debug-info
가 기본적으로 Clang 디버그 빌드용으로 사용 설정되었습니다. 이 변경사항에 따라 LLDB의 디버깅 가능성이 향상됩니다.--build-id
가 이제 기본적으로 사용 설정됩니다.- 이제 빌드 ID가 네이티브 충돌 보고서에 표시되므로 실행 중인 코드 버전을 쉽게 확인할 수 있습니다.
NDK_USE_CYGPATH
가 더 이상 libgcc 문제를 일으키지 않습니다. (Android 문제 195486)-Wl
,--warn-shared-textrel
,-Wl,--fatal-warnings
옵션이 이제 기본적으로 사용 설정됩니다. 텍스트 재배치를 공유한 경우 Android 6.0(API 레벨 23) 이상에서 앱을 로드할 수 없습니다. 64비트 앱에서는 텍스트 재배치가 허용된 적이 없습니다.- 사전 컴파일된 헤더가 더 잘 작동합니다. (문제 14 및 문제 16)
- 연결할 수 없는 ARM(비 thumb) STL 라이브러리가 삭제되었습니다.
- android-24에 Vulkan 지원 기능이 추가되었습니다.
- android-24에 Choreographer API가 추가되었습니다.
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
이상을 사용하는 기기용libcamera2
API가 추가되었습니다. 자세한 내용은 카메라 특성을 참조하세요.- Clang
- Clang이 3.8svn(r256229, 빌드 2812033)으로 업데이트되었습니다.
- 32비트 Windows 패키지의
clang.exe
및clang++.exe
실행 파일이 실제로는 64비트입니다. 32비트 실행 파일의 이름은clang_32.exe
입니다.
이제 - 32비트 Windows 패키지의
- GCC
- ChromeOS GCC @ google/gcc-4_9 r227810과 동기화되었습니다.
- ToT(r231296)에서 커버리지 새니타이저 패치가 백포트되었습니다.
- libatomic이
ifuncs
를 사용하지 않도록 수정되었습니다. (문제 31) - Binutils
- '오류 843419가 발견되어 해결되었습니다' 정보 메시지가 사용 중지되었습니다.
- 큰 arm32 바이너리를 연결할 때 발생하는 내부 링커 오류를 수정하기 위해
--long-plt
옵션이 도입되었습니다. - AArch64의 잘못된 런타임 스터브가 수정되었습니다. 이로 인해 매우 큰 DSO의 점프 주소가 잘못 계산되는 문제가 발생했습니다.
- 이전 Android 버전의 동적 링커 버그를 해결하기 위해 기본 옵션
--no-apply-dynamic
이 도입되었습니다. dynamic_cast
용 NDK r11 KI를 Clang과 함께 사용할 수 없습니다. x86,stlport_static
및 최적화가 수정되었습니다.- GDB
- GDB 7.11로 업데이트되었습니다. 자세한 내용은 GDB 뉴스 페이지를 참조하세요.
ndk-gdb.py
버그가 수정되었습니다.- 알려진 문제
- x86 ASAN은 여전히 작동하지 않습니다. 자세한 내용은 이 변경사항 목록에 관한 설명을 참조하세요.
- Android 2.3(API 레벨 9) 또는 Android 4.0(API 레벨 14)의
ARM에서
c++_shared
를 사용한 예외 해제가 작동하지 않습니다. - android-24가 있는데도 불구하고 Android 6.0(API 수준 23) 및 Android 7.0(API 수준 24)의 Bionic 헤더와 라이브러리가 아직 노출되지 않습니다. 이 플랫폼은 여전히 Android 5.0(API 수준 21) 헤더 및 라이브러리입니다 (r11로부터의 회귀가 아님).
- RenderScript 도구가 없습니다(r11로부터의 회귀가 아님). (문제 7)
- 이 변경 로그에 해결되지 않은 버그가 모두 포함되어 있지는 않습니다.
__thread
가 실제로 작동합니다.
Android NDK r12(2016년 6월)
- 다운로드
- 이 출시의 다운로드는 여기에 보관처리되었습니다.
- 공지사항
ndk-build
명령어는 향후 버전에서 Clang을 사용하도록 기본 설정됩니다. GCC는 이후 버전에서 삭제될 예정입니다.make-standalone-toolchain.sh
스크립트는 향후 버전에서 삭제될 예정입니다. 이 스크립트를 사용하는 경우 최대한 빨리make_standalone_toolchain.py
로 이전하세요.- NDK
- armeabi-v7a-hard ABI 지원이 중단되었습니다. 문서의 설명을 참고하세요.
- Android 2.3(API 수준 9) 이전 플랫폼 수준의 모든 sysroot가 삭제되었습니다. NDK r11에서 이에 대한 지원이 중단되었지만 실제로 삭제되지는 않았습니다.
- ARM32에서 c++_shared를 사용하는 경우의 예외 처리가 업데이트되어 대부분 작동합니다(알려진 문제 참고). 언와인더는 이제 libc++ 자체가 아니라 링크된 각 객체와 연결됩니다.
- 기본 컴파일러 플래그가 제거되었습니다(NDK 문제 27). 이 업데이트의 세부정보는 변경사항 207721에서 확인할 수 있습니다.
- 독립 실행형 도구 모음의 Python 구현이
build/tools/make_standalone_toolchain.py
에 추가되었습니다. 이제 Cygwin이 없어도 Windows에서 이 기능을 사용할 수 있습니다. bash flavor는 향후 버전에서 삭제될 예정이므로 지금 새로운 버전을 테스트하세요. -fno-limit-debug-info
옵션을 포함하도록 구성된 Clang 디버그 빌드가 기본적으로 사용 설정됩니다. 이 변경사항으로 인해 LLDB를 사용한 더 나은 디버깅이 가능합니다.--build-id
가 기본 옵션으로 사용 설정되었습니다. 이 옵션을 사용하면 네이티브 충돌 보고서에 식별자가 표시되므로 실행 중인 코드 버전을 쉽게 확인할 수 있습니다.NDK_USE_CYGPATH
문제가 해결되어 libgcc에 더 이상 문제가 발생하지 않습니다. (문제 195486)- 다음 옵션이 기본값으로 사용 설정되었습니다.
-Wl,--warn-shared-textrel
및-Wl,--fatal-warnings
. 텍스트 재배치를 공유한 경우 Android 6.0(API 수준 23) 이상에서 앱이 로드되지 않습니다. 이 구성은 64비트 앱에서 허용된 적이 없습니다. - 문제가 해결되어 사전 컴파일된 헤더가 더 잘 작동합니다. (NDK 문제 14, NDK 문제 16)
- 연결할 수 없는 ARM(비 thumb) STL 라이브러리가 삭제되었습니다.
- android-24에 Vulkan 지원 기능이 추가되었습니다.
- android-24에 Choreographer API가 추가되었습니다.
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
기능 수준 이상을 지원하는 기기용 libcamera2 API가 추가되었습니다. 자세한 내용은CameraCharacteristics
참조를 확인하세요.- Clang
- Clang이 3.8svn(r256229, 빌드 2812033)으로 업데이트되었습니다. 32비트 Windows 패키지의
clang.exe
및clang++.exe
실행 파일이 실제로는 64비트입니다. 32비트 실행 파일의 이름은clang_32.exe
입니다. __thread
가 수정되어 이제 실제로 작동합니다.- GCC
- 컴파일러가 ChromeOS GCC @ google/gcc-4_9 r227810과 동기화되었습니다.
- ToT(r231296)에서 커버리지 새니타이저 패치가 백포트되었습니다.
libatomic
이 ifuncs를 사용하지 않도록 수정되었습니다. (NDK 문제 31)- Binutils
- '오류 843419가 발견되어 수정되었습니다' 정보 메시지가 사용 중지되었습니다.
- 큰 arm32 바이너리를 연결할 때 내부 링커 오류를 수정하기 위해
--long-plt
가 도입되었습니다. AArch64
의 잘못된 런타임 스터브가 수정되었습니다. 이 문제로 인해 매우 큰 동적 공유 객체(DSO)의 점프 주소가 잘못 계산되는 문제가 발생했습니다.- 이전 Android 버전의 동적 링커 버그를 해결하기 위해 기본 옵션
--no-apply-dynamic
이 도입되었습니다. - Clang, x86, stlport_static 및 최적화에서
dynamic_cast
가 작동하지 않는 NDK r11의 알려진 문제가 해결되었습니다. - GDB
- GDB 버전 7.11로 업데이트되었습니다. 이 버전에 관한 자세한 내용은 GDB 뉴스를 참고하세요.
ndk-gdb.py
스크립트의 여러 버그가 수정되었습니다.- 알려진 문제
- x86 ASAN(Address Sanitizer)는 현재 작동하지 않습니다. 자세한 내용은 문제 186276을 참조하세요.
- Android 2.3(API 레벨 9) 또는 Android 4.0(API 레벨 14)의 ARM에서
c++_shared
를 사용한 예외 해제가 작동하지 않습니다. - android-24가 있는데도 불구하고 Android 6.0(API 수준 23) 이상의 Bionic 헤더와 라이브러리가 아직 노출되지 않습니다. 이 플랫폼에 여전히 NDK r11과 일치하는 Android 5.0(API 수준 21) 헤더 및 라이브러리가 있습니다.
- NDK r11과 일치하는 RenderScript 도구가 없습니다. (NDK 문제 7)
NdkCameraMetadataTags.h
헤더 파일에 카메라 메타데이터 태그 enum 값ACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
이 실수로 나열되었으며 다음 버전에서 삭제될 예정입니다. 대신ACAMERA_STATISTICS_LENS_SHADING_MAP
값을 사용하세요.
Android NDK r11c(2016년 3월)
Android NDK r11b(2016년 3월)
- NDK
-
- 중요 공지사항
- 버그 추적기가 GitHub로 이동되었습니다.
- 변경사항
- 중요 공지사항
- Clang
-
- 오류
- r11 출시 노트에 보고된 것과 달리
__thread
가 작동하지 않습니다. 출시된 Clang 버전에 에뮬레이션된 TLS 지원에 관한 버그 수정이 누락되었기 때문입니다.
Android NDK r11(2016년 3월)
- Clang
-
- 중요 공지사항
- 추가사항
- Clang이 이제 에뮬레이션된 TLS를 지원합니다.
- 컴파일러에서 이제 pthread 스레드별 데이터로 ELF TLS를 에뮬레이션하여
__thread
를 지원합니다. - C++11
thread_local
은 일부 경우에 작동하지만 특수한 소멸자가 있는 데이터에 대해서는 작동하지 않습니다. 이 경우에는 libc의 지원이 필요하기 때문입니다. Android 6.0(API 수준 23) 이상에서 실행되는 경우에는 이 제한사항이 적용되지 않습니다. - 공유 라이브러리에서 TLS 변수에 액세스하는 경우에는 에뮬레이션된 TLS가 아직 Aarch64에서 작동하지 않습니다.
- 컴파일러에서 이제 pthread 스레드별 데이터로 ELF TLS를 에뮬레이션하여
- Clang이 이제 에뮬레이션된 TLS를 지원합니다.
- GCC
-
- 중요 공지사항
- 이제 NDK의 GCC가 지원 중단되고 Clang으로 대체됩니다.
- NDK가 5.x로 업그레이드되지 않으며 중요하지 않은 백포트도 허용되지 않습니다.
- 4.9의 잘못된 컴파일 및 내부 컴파일러 오류에 관한 유지보수가 사례별로 처리됩니다.
- 삭제 항목
- GCC 4.8이 삭제되었습니다. 모든 타겟에서 이제 GCC 4.9를 사용합니다.
- 기타 변경사항
- google/gcc-4_9가 r224707에 동기화되었습니다. 이전에는 r214835와 동기화되었습니다.
- NDK
-
- 중요 공지사항
- NDK 패키지에 더 이상 샘플이 포함되지 않습니다. 대신 GitHub에서 제공됩니다.
- NDK 패키지에 더 이상 문서가 포함되지 않습니다. 대신 Android 개발자 웹사이트에서 제공됩니다.
- 추가사항
android-23
에 네이티브 추적 API가 추가되었습니다.android-23
에 네이티브 멀티네트워크 API가 추가되었습니다.- API 레벨 21부터 libc, m, dl이 버전 관리되는 기호를 제공하도록 사용 설정되었습니다.
- API 수준 N에 Vulkan 헤더 및 라이브러리가 추가되었습니다.
- 삭제 항목
_WCHAR_IS_8BIT
지원 기능이 삭제되었습니다.- sed가 삭제되었습니다.
- mclinker가 삭제되었습니다.
- Perl이 삭제되었습니다.
- 모든 버전의 NDK libc, m, dl에서 해당 libs의 플랫폼 버전에서 지원하지 않는 모든 기호가 삭제되었습니다.
- mips64r2 지원 기능이 부분적으로 삭제되었습니다. 나머지는 추후 삭제될 예정입니다.
- 기타 변경사항
- ARM 독립 실행형 도구 모음이 arm7로 기본 설정되었습니다.
-target
옵션을armv5te-linux-androideabi
로 지정하여 이전 동작을 복원할 수 있습니다.
- 빌드 시스템이 플랫폼에 포함된 항목에
-isystem
을 사용하도록 변경되었습니다.- Bionic에서 발생하는 경고로 인해 더 이상 앱 빌드가 중단되지 않습니다.
- 바이너리에서 gabi++를 통해 예외를 생성할 때 발생하는 segfault가 수정되었습니다.(문제 179410)
- 플랫폼 libc++의 ODR 문제를 방지하기 위해 libc++의 인라인 네임스페이스가
std::__ndk1
로 변경되었습니다. - 모든 libc++ 라이브러리가 이제 libc++ abi로 빌드됩니다.
- 기본
APP_PLATFORM
이 Gingerbread로 이동했습니다.- Froyo 및 이전 버전에 대한 지원이 향후 버전에서 중단될 것으로 예상됩니다.
- ARM 독립 실행형 도구 모음이 arm7로 기본 설정되었습니다.
- 64비트용 gabi++
_Unwind_Exception
구조가 업데이트되었습니다. - cpufeatures에 다음 기능이 추가되었습니다.
- SSE4.1 및 SSE4.2를 감지합니다.
- x86_64의 CPU 기능을 감지합니다.
- libc++abi가 업스트림 r231075로 업데이트되었습니다.
byteswap.h
,endian.h
,sys/procfs.h
,sys/ucontext.h
,sys/user.h
및uchar.h
가 ToT Bionic로부터 업데이트되었습니다.- 모든 API 레벨에서
sys/cdefs.h
가 동기화되었습니다. - arm용
fegetenv and fesetenv
가 수정되었습니다. - mips64 및 x86_64용
crtend_*
의 엔드 포인터 크기/정렬이 수정되었습니다.
- 중요 공지사항
- Binutils
-
- 추가사항
- 새로운 옵션
--pic-veneer
이 추가되었습니다.
- 새로운 옵션
- 삭제 항목
- 32비트 Windows 패키지에 더 이상 ld.gold가 포함되지 않습니다. 대신 64비트 Windows 패키지에서 ld.gold를 얻을 수 있습니다.
- 변경사항
- Android와 ChromiumOS 간에 binutils 소스가 통합되었습니다. 이 변경사항에 관한 자세한 내용은 여기의 댓글을 참고하세요.
- aarch64용 Gold의 신뢰성이 향상되었습니다. BFD 대신 Gold를 사용하려면 연결 시
-fuse-ld=gold
를 사용하세요. 기본값은 다음 버전에서 변경될 것으로 보입니다. - Gold ARM 백엔드용 대규모 바이너리의 연결 시간이 향상되었습니다 (디버깅 가능한 Chrome 브라우저의 경우 연결 시간 최대 50% 감소).
- 추가사항
- GDB
-
- 삭제 항목
- ndk-gdb가 삭제되고 ndk-gdb.py로 대체되었습니다.
- 변경사항
- gdb가 버전 7.10으로 업데이트되었습니다.
- 성능이 개선되었습니다.
- 오류 메시지가 개선되었습니다.
- 상대 프로젝트 경로가 수정되었습니다.
- Ctrl-C가 백그라운드 gdbserver를 강제 종료하지 않도록 중단되었습니다.
- Windows 지원 기능이 개선되었습니다.
- 삭제 항목
- YASM
-
- 변경사항
- YASM가 버전 1.3.0으로 업데이트되었습니다.
- 변경사항
Android NDK r10e(2015년 5월)
- 다운로드
- 이 출시의 다운로드는 여기에 보관처리되었습니다.
- 중요 변경사항:
-
- Cortex-A53 오류 843419의 해결 방법이
aarch64-linux-android-4.9
링커에 통합되었습니다. 이 해결 방법에 관한 자세한 내용은 cortex-a53 오류 843419의 해결 방법을 참고하세요. - Clang 3.6이 추가되었습니다.
NDK_TOOLCHAIN_VERSION=clang
에서 이제 기본적으로 해당 Clang 버전을 선택합니다. - Clang 3.4가 삭제되었습니다.
- GCC 4.6이 삭제되었습니다.
- 모든 아키텍처의
ld.gold
에서 멀티스레딩 지원 기능이 구현되었습니다. 이제 멀티스레딩 지원 여부와 관계없이 연결할 수 있습니다. 기본적으로 지원 없이 연결하도록 설정되어 있습니다.- 멀티스레딩으로 컴파일하려면
--threads
옵션을 사용하세요. - 멀티스레딩 없이 컴파일하려면
--no-threads
옵션을 사용하세요.
- 멀티스레딩으로 컴파일하려면
- 모든 아키텍처에 대해 GDB/gdbserver가 7.7로 업그레이드되었습니다.
- 32비트 Darwin용 NDK 패키지가 삭제되었습니다.
- Cortex-A53 오류 843419의 해결 방법이
- 중요한 버그 수정:
-
- 기본 스레드 밖에 OpenMP 루프가 있을 때 발생하는 비정상 종료 문제가 해결되었습니다.
- 사용자가
#pragma GCC optimize ("O0")
를 선언했지만 명령줄에서 다른 최적화 수준을 지정했을 때 발생하는 GCC 4.9 내부 컴파일러 오류(ICE)가 해결되었습니다.pragma
가 우선 적용됩니다. - 다음 오류 메시지와 함께 비정상 종료를 일으키는 데 사용되는 오류가 해결되었습니다.
in add_stores, at var-tracking.c:6000
- LLVM 자동 벡터화 기능이 ARM 명령 집합에 상응하는 부분이 없는 명령,
llvm.cttz.v2i64()
을 생성하는 Clang 3.5 문제의 해결 방법이 구현되었습니다.
- 기타 버그 수정:
-
- 다음 헤더 및 라이브러리가 수정되었습니다.
media/NdkMediaDrm.h
의PROPERTY_*
이 수정되었습니다.mips64
용sys/ucontext.h
이 수정되었습니다.__builtin_isnan
및__builtin_isinf
의 Clang 버전 확인 기능이 삭제되었습니다.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에서 x86에 관해 생성되었던 어레이-바운드 경고가 다시 사용 설정되었습니다. 이전에는 ARM에 관한 경고가 무조건 사용 중지되었습니다.
mips
및mips64
에서 쓰기 가능한.gcc_except_table
섹션을 생성하여 GCC 동작과 일치하도록 Clang 3.5가 수정되었습니다. 이 변경사항으로 인해 다음과 같은 링커 경고를 피할 수 있습니다..../ld: warning: creating a DT_TEXTREL in a shared object
- Clang이
mips64
용으로 컴파일할 때 비정상 종료를 일으키는compiler-rt
문제의 수정사항이 백포트되었습니다. 자세한 내용은 LLVM 문제 20098을 참조하세요. - non-ASCII 댓글에서 발생하는 Clang 3.5 비정상 종료 문제가 해결되었습니다. (문제 81440)
stlport collate::compare
가-1
및1
을 반환하도록 수정되었습니다. 이전에는 부호가 있는 임의의 숫자가 반환되었습니다.- 64비트 ABI용
ndk-gdb
가 수정되었습니다. (문제 118300) - Android 4.4(Android API 수준 19)의 RenderScript에 관한 HelloComputeNDK 샘플에서 발생하는 비정상 종료 문제가 해결되었습니다. 자세한 내용은 이 페이지를 참조하세요.
- GCC용
libc++ __wrap_iter
이 수정되었습니다. 자세한 내용은 LLVM 문제 22355를 참조하세요. - ABI
x86_64
용.asm
지원 기능이 수정되었습니다. - GCC 4.8
stlport
문제의 해결 방법이 구현되었습니다. (문제 127773) - Windows의 프로젝트 경로에서 후행 디렉터리 구분 기호
\\
가 삭제되었습니다. (문제 160584) gradle
에서ndk-build.cmd
명령어를 실행하여 단일.c
파일을 컴파일할 때 발생한no rule to make target
오류가 해결되었습니다. (문제 66937)- 다음 호스트 도구 모음에서 누락되었던
libatomic.a
및libgomp.a
라이브러리가 추가되었습니다.aarch64-linux-android-4.9
mips64el-linux-android-4.9
mipsel-linux-android-4.9
x86_64-4.9
- 기타 변경사항:
-
aarch64
용ld.gold
가 추가되었습니다. 기본 링커는 계속ld.bfd
입니다.ld.gold
를 명시적으로 사용 설정하려면LOCAL_LDFLAGS
또는APP_LDFLAGS
변수에-fuse-ld=gold
를 추가하세요.- 개선된 R6 지원을 제공하는
binutils-2.25
로 MIPS 및 MIPS64 도구 모음이 빌드되었습니다. -fstandalone-debug
(전체 디버그 정보)가 Clang의 기본 옵션이 되었습니다.- GCC 4.9, Clang 3.5 및 Clang 3.6용 ARM, AArch64, X86, X86_64 도구 모음의
-fstack-protector
가-fstack-protector-strong
으로 대체되었습니다. - 빌드 시스템에서 패키지 이름을 재정의할 수 있도록
ndk-gdb
에--package
명령줄 스위치가 추가되었습니다. (문제 56189) - MIPS용
-mno-ldc1-stc1
이 지원 중단되었습니다. 이 옵션은 새로운-fpxx
및-mno-odd-spreg
옵션 또는 FPXX ABI와 함께 작동하지 않을 수도 있습니다. - MIPS MSA 및 R6 감지 기능이
cpu-features
에 추가되었습니다.
Android NDK r10d(2014년 12월)
- 중요 변경사항:
-
- GCC 4.8이 모든 32비트 ABI의 기본값이 되었습니다. GCC 4.6이 지원 중단되었으며 다음 버전에서 삭제될 예정입니다. 이전 동작을 복원하려면 ndk-build에
NDK_TOOLCHAIN_VERSION=4.6
을 추가하거나 명령줄에서make-standalone-toolchain.sh
를 실행할 때--toolchain=arm-linux-androideabi-4.6
을 추가하세요. 64비트 ABI에서는 GCC 4.9가 여전히 기본값입니다. - 모든 x86[_64] 도구 모음이 더 이상 기본적으로
-mstackrealign
을 추가하지 않습니다. NDK 도구 모음에서는 16바이트 스택 정렬을 가정합니다. 기본적으로 사용되는 도구와 옵션이 이 규칙에 적용됩니다. 어셈블리 코드를 작성하는 사용자는 스택 정렬을 유지하고 다른 컴파일러도 이 규칙을 준수하도록 해야 합니다. (GCC 버그 38496) - ARM 및 x86 ABI에 Clang 3.5 지원에 대한 Address Sanitizer 기능이 추가되었습니다. 이 변경사항에 관한 자세한 내용은 Address Sanitizer 프로젝트를 참고하세요.
- API 수준 21부터 빌드 시
-fPIE -pie
를 사용해야 한다는 요구사항이 도입되었습니다. API 레벨 16 이상에서는 빌드 시 ndk-build에서PIE
를 사용합니다. 이 변경사항은 개발자 미리보기 문제 888에서 논의된 여러 가지 결과를 가져옵니다. 공유 라이브러리에는 영향을 미치지 않습니다.
- GCC 4.8이 모든 32비트 ABI의 기본값이 되었습니다. GCC 4.6이 지원 중단되었으며 다음 버전에서 삭제될 예정입니다. 이전 동작을 복원하려면 ndk-build에
- 중요한 버그 수정:
-
- aarch64-linux-android-4.9 linker의
A53 오류 #835769와 관련하여 더 많은 사항이 수정되었습니다. 이 수정사항의 일부로,
-mfix-cortex-a53-835769
(기본적으로 사용 설정됨)이 지정된 경우 GCC가 새로운 옵션,--fix-cortex-a53-835769
를 전달합니다. 자세한 내용은 이 binutils 메시지 및 이 binutils 메시지를 참조하세요. - API 수준 21에서 발생하는 libc++
sscanf/vsscanf
중단 문제의 수정사항이 문서화되었습니다. 수정사항 자체는 r10c에 구현되었습니다. (문제 77988) -Os
가 지정되었을 때 GCC 4.9에서 발생하는 AutoFDO(-fauto-profile
) 비정상 종료 문제가 해결되었습니다. (문제 77571)
- aarch64-linux-android-4.9 linker의
A53 오류 #835769와 관련하여 더 많은 사항이 수정되었습니다. 이 수정사항의 일부로,
- 기타 버그 수정:
-
- 다음 헤더 및 라이브러리가 수정되었습니다.
- API 수준 16에
posix_memalign
이 추가되었습니다. 또한 API 수준 16~19에stdlib.h
에 프로토타입이 추가되었습니다. (문제 77861) stdatomic.h
가 C++11의 경우에만<atomic>
을 포함하도록 수정되었습니다.- API 레벨 21의 경우
sys/user.h
,gl2ext.h
,dlext.h
,fts.h
,sgidefs.h
헤더가 독립 실행형으로 사용할 수 있도록 수정되었습니다. sys/user.h
가mxcsr_mask
의 이름을mxcr_mask
로 변경하고u_ar0
의 데이터 유형을sysconf()
반환 값 유형이int
에서long
로 변경되었습니다.- ndk-build의
LOCAL_ARM_MODE
용thumb
의 처리 방식이 수정되었습니다. r10d에서는 다음 조건 중 하나가 적용되지 않을 경우 ndk-build에서 기본적으로LOCAL_LDFLAGS+=-mthumb
를 추가합니다. LOCAL_ARM_MODE
를arm
과 같게 설정한 경우.- 이전 도구 모음과 호환성을 유지하기 위해 ARM 모드가 기본값인 디버그를 빌드(
android:debuggable="true"
가 포함된APP_OPTIM=debug
및AndroidManifest.xml
과 같은 설정으로)하는 경우. (문제 74040) - ndk-build의
LOCAL_SRC_FILES
가 Windows 절대 경로를 사용하도록 수정되었습니다. (문제 74333) - ndk-gdb에서 bash별 코드가 삭제되었습니다. (문제 73338)
make-standalone-toolchain.sh
에서 bash별 코드가 삭제되었습니다. (문제 74145)System.loadLibrary()
전이 종속 항목에 관한 수정사항과 관련하여 문서가 수정되었습니다. (문제 41790)- Ubuntu 14.04 및 OS X 10.10(Yosemite)에서 64비트 패키지를 추출할 수 없는 문제가 해결되었습니다. (문제 78148)
- Clang 지원을 개선하기 위해
LOCAL_PCH
의 문제가 해결되었습니다. (문제 77575) - ld.gold의 'requires executable stack' 경고가 명확해졌습니다. (문제 79115)
unsigned long
에서 user_regs_struct* 구조로 변경하도록 수정되었습니다.
Android NDK r10c(2014년 10월)
- 중요 변경사항:
-
- 다운로드 구조가 다음과 같이 변경되었습니다.
- 이제 각 패키지에 각 플랫폼에 대한 32비트 및 64비트 헤더, 라이브러리, 도구가 포함됩니다.
- 디버깅 정보가 있는 STL 라이브러리를 더 이상 별도로 다운로드하지 않아도 됩니다.
- 이전에
Android-L
이라고 부르던 모든 항목이 공식 출시 명칭android-21
로 변경되었습니다. - GCC 4.9가 다시 GCC 저장소의
google
지점을 기반으로 하여 업데이트되었습니다. GCC 4.9의 업스트림 버전과의 주요 차이점은 다음과 같습니다. -O2
옵션이 이제 루프 필링 없이 더 적극적인 언롤링으로 벡터화 기능을 사용 설정합니다.- FDO 및 LIPO의 개선사항
- 모든 호스트에 Clang 3.5 지원 기능이 추가되었습니다.
NDK_TOOLCHAIN_VERSION=clang
에서 이제 Clang 3.5를 선택합니다. 참고: - ARM 및 x86은 통합 어셈블러를 사용하도록 기본 설정됩니다. 이로 인해 문제가 발생하면
-fno-integrated-as
를 해결 방법으로 사용하세요. - Clang 3.5가 GCC에서 지원되는
-finline-functions
옵션과 같이 사용되지 않는 플래그에 대해 더 많은 경고를 발행합니다. - ART를 가상 머신으로 사용하는 Android 5.0 기기에서 디버깅할 때
art-on
옵션을 지정하여 ART 디버깅 모드에 들어갈 수 있습니다. 자세한 내용은 NDK가 포함된 디렉터리의prebuilt/common/gdb/common.setup
을 참조하세요. - Clang 3.3 지원 기능이 삭제되었습니다.
- GCC 4.6이 지원 중단되었으며 향후 출시에서 삭제될 수 있습니다.
- mclinker가 Identical Code Folding('ICF') 지원 기능이 포함된 2.8로 업데이트되었습니다.
--icf
옵션을 사용하여 ICF를 지정하세요. - x86 및 x86_64에서
arm_neon.h
지원을 확대하여 NEON 내부 기능의 최대 93%를 달성했습니다. NEON 지원에 관한 자세한 내용은 다음과 같이 확인하세요.- NDK 프로그래머 가이드(
docs/Programmers_Guide/html/
)로 이동하여 아키텍처 및 CPU > NEON을 참고합니다. samples/
의 업데이트된hello-neon
샘플을 확인합니다.- Intel의 ARM NEON에서 Intel SSE로 포팅 가이드를 참조합니다.
- NDK 프로그래머 가이드(
- (
android-21
을 여전히Android-L
이라고 하는) r10에 포함되었지만 문서가 없는headers/libs/android-21
의_FORTIFY_SOURCE
지원 기능이 문서화되었습니다.
자세한 내용은 아래의 중요한 버그 수정을 참조하세요.
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 오류(835769)를 기본적으로 해결하도록 수정되었습니다. 해결 방법을 사용 중지하려면
-mno-fix-cortex-a53-835769
를 지정하세요.
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- 기타 버그 수정:
-
android-21
의 헤더 및 라이브러리가 다음과 같이 수정되었습니다.- 더 많은 TV 키코드가 추가되었습니다.
android/keycodes.h
android/sensor.h
에 더 많은 상수 및 새로운 센서 함수 6개가 추가되었습니다.ASensorManager_getDefaultSensorEx
,ASensor_getFifoMaxEventCount
,ASensor_getFifoReservedEventCount
,ASensor_getStringType
,ASensor_getReportingMode
,ASensor_isWakeUpSensor
.- GCC 4.6과의 호환성을 개선하고
<atomic>
헤더에 대한 지원 기능을 제공할 수 있도록stdatomic.h
가 수정되었습니다. - 모든 API 레벨에
sys/ucontext.h
및sys/user.h
가 추가되었습니다. 이제signal.h
헤더에<sys/ucontext.h>
가 포함됩니다.struct ucontext
의 기존 정의를 모두 삭제할 수도 있습니다. - API 수준 17, 18, 19에
posix_memalign
이 추가되었습니다. - 모든 아키텍처에 다음 기능이 추가되었습니다.
android_set_abort_message
,posix_fadvise
,posix_fadvise64
,pthread_gettid_np
. native-media/AndroidManifest.xml
샘플에 필수 권한이 추가되었습니다. (문제 106640)- API 수준 21에
clock_nanosleep
및clock_settime
이 추가되었습니다. (문제 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 버전에는 자리표시자 파일이 포함되었습니다.
- 더 많은 TV 키코드가 추가되었습니다.
- mips용 GCC 4.8 및 4.9의 MXU 지원 기능이 복원되었습니다. GCC r10 및 r10b 버전은 MXU를 지원하지 않는 binutils-2.24로 컴파일되어 이 지원 기능이 없었습니다. 이제는 이 지원 기능이 포함됩니다.
- Clang 버전을 지정하는 접미사의 사용을 올바르게 지원하도록
make-standalone-toolchain.sh
의--toolchain=
이 수정되었습니다. - libc++/armeabi
strtod()
함수가 수정되었습니다. docs/
의 NDK 문서가 수정되었습니다.
- 기타 변경사항:
-
- 다음 명령 세트에 대한 ARMv8 지원 기능을 감지하도록
cpu-features
가 향상되었습니다. AES, CRC32, SHA2, SHA1, 64비트 PMULL/PMULL2 (문제 106360) - ndk-build가 GCC 4.8, GCC 4.9 및 Clang에서 사용 가능한
*-gcc-ar
를 사용하도록 수정되었습니다. Clang에서는*-ar
대신 이를 지정합니다. 이 설정을 사용하면 LTO 지원 기능이 개선됩니다. - GCC 컴파일러에서
include-fixed/linux/a.out.h
및include-fixed/linux/compiler.h
헤더가 삭제되었습니다. (문제 73728) - Mac OS X의 GCC 4.8에서
-flto
관련 문제가 해결되었습니다. 오류 메시지는 다음과 같습니다. build-binary.mk.
의 오타가 수정되었습니다. (문제 76992)
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- 다음 명령 세트에 대한 ARMv8 지원 기능을 감지하도록
- 중요한 알려진 문제:
-
- GCC4.9에서 -Os(
-fauto-profile
)를 지정하면 비정상 종료가 발생할 수 있습니다. (문제 77571)
- GCC4.9에서 -Os(
Android NDK r10b(2014년 9월)
- 중요사항:
-
- 다운로드 가능한 패키지는 크기가 512MB로 제한되므로 다음 32비트 항목은 32비트 NDK 다운로드 패키지에 포함되지 않습니다. 대신 64비트 패키지에 포함됩니다.
- Android-L 헤더
- GCC 4.9
- 현재 NDK는 Android 4.4(API 수준 19)의 32비트 Renderscript만을 지원합니다. 다른 Renderscript(32비트 또는 64비트)와 Android 버전의 조합으로는 HelloComputeNDK(유일한 Renderscript 샘플)을 빌드할 수 없습니다.
- 네이티브 코덱을 컴파일하려면 모든 Android-L 헤더가 있는 64비트 NDK 패키지를 사용해야 합니다.
- 중요한 버그 수정:
- 기타 버그 수정:
-
- 모든 GCC 버전의
include-fixed/
디렉터리에서stdio.h
가 삭제되었습니다. (문제 73728) platforms/android-L/arch-*/usr/include/linux/netfilter*/
디렉터리의 Windows 패키지에서 중복 헤더 파일이 삭제되었습니다. (문제 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/dlext.h
의android_dlextinfo
가 확장되었습니다.stdlib.h
,time.h
,wchar.h
및complex.h
에서 float 또는 double 형식 값을 받거나 반환하는 함수의__NDK_FPABI__
에 주석이 추가되었습니다.
- 모든 GCC 버전의
- 기타 변경사항:
-
mipsel-linux-android-4.9
및mips64el-linux-android-4.9
가 업데이트되어 새로운 multilib 디렉터리 레이아웃을 구현하고 gdb-7.7 지원 기능을 제공합니다.- 더 많은 arm64 기능을 감지하도록
cpu-features
가 향상되었습니다. (변경사항 목록 100339)
Android NDK r10(2014년 7월)
- 중요 변경사항:
-
- 새로운 64비트 ABI 3개 arm64-v8a, x86_64, mips64가 추가되었습니다. 참고:
- GCC 4.9가 64비트 ABI용 기본 컴파일러입니다. Clang은 현재 버전 3.4입니다.
NDK_TOOLCHAIN_VERSION=clang
은 arm64-v8a 및 mips64에서 작동하지 않을 수도 있습니다. - Android-L은 64비트 지원 기능이 포함된 첫 번째 수준입니다. 이 API 레벨은 일시적인 것이며 L-미리보기에만 해당합니다. L-버전에서 실제 API 수준 번호로 대체됩니다.
- 이 버전에는 이제
APP_ABI
에 대한all32
및all64
설정이 포함됩니다.APP_ABI=all32
는APP_ABI=armeabi,armeabi-v7a,x86,mips
와 동일합니다.APP_ABI=all64
는APP_ABI=arm64-v8a,x86_64,mips64
와 동일합니다.APP_ABI=all
는 모든 ABI를 선택합니다.
- Android-L의 새로운 GNU libstdc++에는 모든
<tr1/cmath>
가 포함됩니다. 링커에서 '다중 정의' 오류가 발생하지 않도록 하려면 자신만의 수학 함수를 정의하기 전에_GLIBCXX_USE_C99_MATH_TR1
에서 이미 해당 이름의 함수가 있는지 확인하세요. - cpu-features 라이브러리가 ARMv8 커널용으로 업데이트되었습니다. 기존 cpu-features 라이브러리는 ARMv8 플랫폼에서 NEON의 존재 여부를 감지하지 못할 수도 있습니다. 새로운 버전으로 코드를 다시 컴파일하세요.
- 새로운
platforms/android-L/
API 디렉터리가 추가되었습니다. 다음 항목이 포함됩니다. - Android API 수준 3(Cupcake)~19(KitKat)에서 변경되지 않았던 업데이트된 Bionic 헤더. 레벨 L용인 이 새로운 버전은 AOSP와 동기화됩니다.
- 새로운 미디어 API 및 네이티브 코덱 샘플
- AudioPlayer에서 단일 정밀도, 부동 소수점 오디오 형식을 지원하는 업데이트된 SLES/OpenSLES용
Android.h
헤더 libGLESv3.so.
의 GLES 3.1 및 AEP 확장- 최신 공식 Khronos 버전으로 업데이트된 GLES2 및 GLES3 헤더
- 32/64비트 ABI에 GCC 4.9 컴파일러가 추가되었습니다. GCC 4.9는 이전에 언급한 바와 같이 64비트 ABI용 기본(유일한) 컴파일러입니다. 32비트 ABI의 경우 GCC 4.6이 여전히 기본값이므로 GCC 4.9를 명시적으로 사용 설정해야 합니다.
- ndk-build의 경우
NDK_TOOLCHAIN_VERSION=4.9
를Application.mk
에 추가하거나 명령줄에서 환경 변수로 내보내 32비트 GCC 4.9 빌드를 사용 설정하세요. - 독립 실행형 도구 모음의 경우
make-standalone-toolchain.sh
스크립트에서--toolchain=
옵션을 사용하세요. 예:--toolchain=arm-linux-androideabi-4.9.
- GCC 4.8/4.9 및 x86에서 GDB가 버전 7.6으로 업그레이드되었습니다*. GCC 4.6(ARM 및 MIPS용 기본값)에서는 GDB가 아직 버전 GDB-7.3.x이므로 ndk-gdb에서 GDB 7.6을 선택할 수 있도록
NDK_TOOLCHAIN_VERSION=4.8
또는4.9
를 설정해야 합니다. - SSSE3 지원 기능을 제공하기 위해
-mssse3
빌드 옵션이 추가되고 ABI x86용 기본값으로 설정되었습니다(SSE3에서 업그레이드). Google에서 출시한 이미지에는 SSSE3 명령이 포함되지 않습니다. - GCC4.8이 4.8.3으로 업데이트되었습니다.
- gabi++에서 libc++abi로 전환하여 ARM libc++ EH 지원 기능이 개선되었습니다. 자세한 내용은 문서의 'C++ 지원' 섹션을 참조하세요. 참고:
- 언어를 제외한 모든 테스트가 이제 Clang 3.4 및 GCC 4.8을 통과합니다. 자세한 내용은 문서의 'C++ 지원' 섹션을 참조하세요.
- X86 및 MIPS libc++용 libc++ 라이브러리에서는 여전히 gabi++를 사용합니다.
- 이제 GCC 4.7 이상에서 <atomic>을 사용할 수 있습니다.
__list_imp::_end
가 TBAA 규칙을 위반하므로<list>
를 사용하는 경우-fno-strict-aliasing
을 추가해야 합니다. (문제 61571)- GCC 4.6부터는 LIBCXX_FORCE_REBUILD:=true가 더 이상 libc++를 다시 빌드하지 않습니다. 다시 빌드하려면 다른 컴파일러를 사용해야 합니다. Clang 3.3은 테스트되지 않았습니다.
- mclinker는 현재 버전 2.7이며 aarch64 Linux를 지원합니다.
LOCAL_PCH
에 의해 지정된 헤더를 위한 사전 컴파일된 헤더 지원 기능이 추가되었습니다. (문제 25412)
- 중요한 버그 수정:
-
- libc++가 수정되어 이제
std::feof
등을 컴파일합니다. (문제 66668) - ABI armeabi에 대한 일부 libc++ 테스트에서 비정상 종료를 일으키는 Clang 3.3/3.4 원자 라이브러리 호출이 수정되었습니다.
- 사전 컴파일된 헤더를 읽을 때 발생하는 Clang 3.4 비정상 종료 문제가 해결되었습니다. (문제 66657)
- 다음의 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++가 수정되어 이제
- 기타 버그 수정:
-
- 헤더가 수정되었습니다.
- 32비트
ssize_t
가long int
대신int
로 수정되었습니다. WCHAR_MIN
및WCHAR_MAX
가 실행되는 아키텍처에 따라 적절한 부호를 취하도록 수정되었습니다.- X86/MIPS: signed
- ARM: unsigned
- X86/MIPS를 unsigned로 기본 설정하려면
-D__WCHAR_UNSIGNED__
를 사용하세요. wchar_t
를 16비트로 강제 설정하려면-fshort-wchar
를 사용하세요.- 32비트
libc.so
에서 존재하지 않는 기호가 삭제되고 Android API 수준 12 이상을 위한pread64
,pwrite64
,ftruncate64
가 추가되었습니다. (문제 69319) 자세한 내용은 AOSP 변경사항 목록 94137에 첨부된 커밋 메시지를 참조하세요. putchar
의 재정의에 대한 GCC 경고가 수정되었습니다. 경고 메시지는 다음과 같습니다.make-standalone-toolchain.sh --stl=libc++
가 다음과 같이 하도록 수정되었습니다.- 외부 프로그램에서 프로세스를 생성하기 위해 필요할 때만 인수를 인용하도록 GCC/Windows가 수정되었습니다. 이 변경사항에 따라 32K 길이 제한을 초과할 가능성이 줄어듭니다.
APP_PLATFORM
환경 변수를 조정할 수 없는 문제가 해결되었습니다.strchr()
대신strrchr()
을 사용하여 라이브러리 경로의 실제 기본 이름을 찾도록 crazy_linker에서IsSystemLibrary()
의 구현이 수정되었습니다.- 네이티브 오디오가 디버그 모드에서 빌드할 수 없는 문제가 해결되었습니다.
- gdb가 극한 부동 소수점 숫자를 출력하지 못하는 문제가 해결되었습니다. (문제 69203)
- (컴파일 문제가 없는
-shared
와 반대로) Clang 3.4에서-Wl,-shared
를 사용하여 컴파일할 수 없는 문제가 해결되었습니다.-shared
및-static
가 모두 존재하지 않는 경우 Clang에서 Android 타겟을 위해-pie
를 추가하는 것이 문제였습니다. 잘못된 이 동작으로 인해 링커에서-shared
와-pie
가 동시에 존재할 수 없다는 오류 메시지가 표시되었습니다.
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);
(변경사항 목록 91185) - 기타 변경사항:
-
- 이제 Neon의 최대 47%를 에뮬레이션하도록
arm_neon.h
가 x86 도구 모음에 추가되었습니다. 64비트 유형은 현재 지원되지 않습니다. 자세한 내용은 x86 문서의 ARM NEON 내부 기능 지원에 관한 섹션을 참조하세요. - ARM GCC 4.8/4.9에 (GCC google 지점에서 빌드된 GCC 4.6에 있는) ARM/GOT_PREL 최적화 기능이 포팅되었습니다. 최적화 기능을 사용하면 전역 변수에 액세스할 때 명령 수가 감소하는 경우가 있습니다.
$NDK/tests/build/b14811006-GOT_PREL-optimization/
의 build.sh 스크립트에 포함된 예를 참조하세요. - STL gabi++, stlport, libc++용 ARM 버전이 추가되었습니다. 이제 이 버전과 Thumb 모드가 둘 다 포함됩니다.
- 이제
--toolchain=x86_64-4.9
와 동일한--toolchain=x86_64-linux-android-4.9
를 사용하여 make-standalone-toolchain.sh 스크립트를 호출할 수 있습니다.
- 이제 Neon의 최대 47%를 에뮬레이션하도록
Android NDK r9d(2014년 3월)
- 중요 변경사항:
-
- Clang 3.4 컴파일러 지원 기능이 추가되었습니다. 이제
NDK_TOOLCHAIN_VERSION=clang
옵션이 Clang 3.4를 선택합니다. GCC 4.6이 여전히 기본 컴파일러입니다. APP_ABI=armeabi-v7a-hard
가 추가 multilib 옵션-mfloat-abi=hard
와 함께 추가되었습니다. 이 옵션은 (4.8의 어셈블러, 링커, 라이브러리를 사용하는) ARM GCC 4.6/4.8 및 Clang 3.3/3.4와 함께 사용하기 위한 옵션입니다. 이 옵션을 사용하는 경우 다음 변경사항에 유의하세요.-
ndk-build
스크립트를 실행할 때 armeabi-v7a 타겟을 위해 다음 옵션을 추가하세요. 드림 빌드된 라이브러리는TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
libs/armeabi-v7a
에 복사됩니다. 제조업용armeabi-v7a
및 make 타겟으로armeabi-v7a-hard
사용 (APP_ABI= 줄) 이렇게 하면 둘 중 하나가 무시됩니다. 참고:APP_ABI=all
여전히 다음과 동일합니다.armeabi armeabi-v7a x86 mips
입니다. make-standalone-toolchain.sh
스크립트는/hard
디렉터리 아래 추가 라이브러리를 복사합니다. GCC 또는 Clang을/hard
의 라이브러리에 연결하려면 위의CFLAGS
및LFLAGS
를 makefile에 추가하세요.- x86 타겟을 위해 yasm 어셈블러와
LOCAL_ASMFLAGS
및EXPORT_ASMFLAGS
플래그가 추가되었습니다.ndk-build
스크립트는prebuilts/*/bin/yasm*
을 사용하여 확장자가.asm
인LOCAL_SRC_FILES
를 빌드합니다. - MClinker가
-gc-sections
지원 기능이 추가된 2.6.0으로 업데이트되었습니다. - 실험적 libc++ 지원 기능이 추가되었습니다(업스트림 r201101). 이 새 기능을 사용하려면 다음 단계를 따르세요.
Application.mk
에APP_STL := c++_static
또는APP_STL := c++_shared
를 추가합니다.LIBCXX_FORCE_REBUILD := true
를 통해 소스에서 다시 빌드할 수도 있습니다.make-standalone-toolchain.sh --stl=libc++
를 실행하여 libc++ headers/lib이 포함된 독립 실행형 도구 모음을 만듭니다.
CPLUSPLUS-SUPPORT.html
을 참조하세요. (문제 36496)
- Clang 3.4 컴파일러 지원 기능이 추가되었습니다. 이제
- 중요한 버그 수정:
-
- GCC 4.6/4.8 ARM EABI용 예외 핸들러에서 예기치 않은 예외가 발생하는 문제가 해결되었습니다. (GCC 문제 59392)
- 종속적이고 유형이 없는 템플릿 인수를 사용하는 템플릿의 부분적 전문화를 올바로 해결하도록 GCC 4.8이 수정되었습니다. (GCC 문제 59052)
- 사전 빌드된 python에 모듈이 추가되었습니다. (문제 59902)
- Mac OS X:
zlib
,bz2
,_curses
,_curses_panel
,_hashlib
,_ssl
- Linux:
zlib
,nis
,crypt
,_curses
,_curses_panel
- Mac OS X:
- x86 및 MIPS gdbserver
event_getmsg_helper
가 수정되었습니다. - 이전 기기와의 호환성 및 C++ 리플렉션 문제 등 RenderScript NDK 도구 모음의 여러 문제가 해결되었습니다.
- 기타 버그 수정:
-
- 헤더 수정사항:
- Android API 수준 13 이상의
android/asset_manager.h
에#include <sys/types.h>
가 누락되는 문제가 해결되었습니다. (문제 64988) - Android API 수준 14 이상의
android/rect_manager.h
에#include
가 누락되는 문제가 해결되었습니다. JNICALL
가jni.h
의JNI_OnLoad
및JNI_OnUnload
에 추가되었습니다.JNICALL
은__NDK_FPABI__
로 정의됩니다. 자세한 내용은sys/cdefs.h
를 참조하세요.- 다음 헤더가 수동으로 종속성을 포함하지 않아도 포함될 수 있도록 업데이트되었습니다. (문제 64679)
- 모든 아키텍처에 대해
sys/cachectl.h
가 추가되었습니다. MIPS 개발자는 이제#ifdef __mips__
를 작성하는 대신 이 헤더를 포함할 수 있습니다. - float 또는 double 값을 취하거나 반환하는 함수에
__NDK_FPABI__
을 추가하여platforms/android-18/include/android/input.h
가 수정되었습니다. - Android API 수준 12 이상에 대해 64비트 버전으로 잘못 설정된 MIPS
struct stat
이 수정되었습니다. 이 잘못된 설정은 버전 r9c에 도입된 회귀였습니다. - Android API 수준 9 이하에 대해
__PTHREAD_MUTEX_INIT_VALUE
,__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE
및__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE
가 정의되었습니다. - API 18 이상의 x86
libm.so
에scalbln
,scalblnf
및scalblnl
이 추가되었습니다. 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
- Android API 수준 13 이상의
- 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
스크립트가ld.bfd
를 사용하여 실행 파일을 연결하기 위해-rpath-link=$SYSROOT/usr/lib
및-rpath-link=$TARGET_OUT
를 추가하도록 수정되었습니다. (문제 64266)- 모든 STL 빌드에서
-Bsymbolic
가 삭제되었습니다. SHELL
을 설정을 무시하는python.exe
에 전달하는 대신 환경 변수로 설정하여ndk-gdb-py.cmd
를 수정했습니다. (문제 63054)--stl=stlport
옵션이 gabi++ 헤더에서 심볼릭 링크를 만드는 대신 헤더를 복사하도록make-standalone-toolchain.sh
스크립트가 수정되었습니다.cmd.exe
및 MinGW 셸은 cygwin에서 만든 심볼릭 링크를 이해하지 못합니다.
- 헤더 수정사항:
- 기타 변경사항:
-
- 개발자가 권장되는
ndk-build
스크립트 대신 cygwin에ndk-build.cmd
를 사용하는 것을 선호하는 경우에 대비하여, 이전에cmd.exe
셸에만 사용하도록 개발된 모든*cmd
스크립트에 실행 권한이 적용되었습니다. - 지정된 대상 디렉터리가 존재하지 않는 경우 복사 대신 이동하여
make-standalone-toolchain.sh
스크립트의 속도를 향상했습니다.
- 개발자가 권장되는
Android NDK r9c(2013년 12월)
버그만 수정된 버전입니다.
- 중요한 버그 수정:
-
- 스택 포인터가 너무 일찍 복원되는 GCC 4.8 ARM의 문제가 해결되었습니다. 이 문제로 인해 프레임 포인터가 스택 프레임의 변수에 안정적으로 액세스하지 못했습니다. (GCC 문제 58854)
- std::nth_element의 버그로 인해 무작위 segfault를 일으키는 코드가 생성되는 GCC 4.8 libstdc++의 문제가 해결되었습니다. (문제 62910)
-fuse-ld=mcld
를 사용하여 cc1/cc1plus의 GCC 4.8 ICE가 수정되어 더 이상 다음 오류가 발생하지 않습니다.cc1: internal compiler error: in common_handle_option, at opts.c:1774
__builtin
수학 함수의-mhard-float
지원 기능이 수정되었습니다. STL을 사용한-mhard-float
의 수정사항에 관한 지속적인 정보는 문제 61784를 참조하세요.
- 기타 버그 수정:
-
- 헤더 수정사항:
poll
의 프로토타입이poll.h
의poll(struct pollfd *, nfds_t, int);
로 변경되었습니다.- Android API 수준 12 및 19용
libc.so
에utimensat
가 추가되었습니다. 이 라이브러리는 이제 Android API 수준 12~19에 모두 포함됩니다. - Android API 수준 19의
libc.so
에futimens
가 도입되었습니다. - Android API 수준 8 이상의
time.h
에 누락된clock_settime()
및clock_nanosleep()
가 추가되었습니다. time.h.
에CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,
및CLOCK_BOOTTIME_ALARM
가 추가되었습니다.- 더 이상 사용되지 않는
CLOCK_REALTIME_HR
및CLOCK_MONOTONIC_HR.
이 삭제되었습니다.
- Teapot, MoreTeapots 샘플 및
source/android/ndk_helper
에서:- armeabi-v7a에 대해 이제 hard-float abi를 사용하도록 변경되었습니다.
- Android API 레벨 19 이상에서 몰입형 모드를 사용하도록 업데이트되었습니다.
- x86 기기에서 비정상 종료를 일으키는
/system/lib/libdvm.so
내Check_ReleaseStringUTFChars
의 문제가 해결되었습니다.
- 심볼릭 링크를 통해 NDK 패키지를 참조할 때
cygwin에서 발생하는
ndk-build
오류가 해결되었습니다. LOCAL_SRC_FILES
에 절대 경로가 포함되어 있을 때cmd.exe
창에서 발생하는ndk-build.cmd
오류가 해결되었습니다. (문제 69992)- 루틴, 파일 이름 또는 선 번호를 찾을 수 없어 프레임을 파싱할 수 없는 경우에도 계속되도록
ndk-stack
스크립트가 수정되었습니다. 이 경우에는 모두??
가 출력됩니다. - windows-x64_64 타겟의
ndk-stack
스택이 수정되어 더 이상 프레임 행을pc
,eip
또는ip
가 포함되지 않는stack:
섹션의 행에 잘못 일치시키지 않습니다. 예:I/DEBUG ( 1151): #00 5f09db68 401f01c4 /system/lib/libc.so
- gabi++가 다음과 같이 하도록 수정되었습니다.
- malloc()을 사용하여 C++ thread-local 객체를 할당하지 않습니다.
- userdebug/eng Android 플랫폼 빌드에서 libc.debug.malloc이 0이 아닌 경우 gabi++에서 교착 상태를 피합니다.
- 헤더 수정사항:
- 기타 변경사항:
-
LOCAL_EXPORT_LDFLAGS
가 추가되었습니다.- 옵션이
ndk-build
에 명시적으로 전달되는 통합 빌드 시스템에서 사용하기 위해NDK_PROJECT_PATH=null
설정이 도입되었습니다. 이 설정을 사용하면ndk-build
에서NDK_PROJECT_PATH.
를 찾으려고 시도하지 않습니다. 또한 변수가 NDK_PROJECT_PATH에서 기본 설정을 파생하지 않습니다. 그 결과 이제 다음 변수를 (기본값이 있는 경우 기본값을 사용하여) 명시적으로 지정해야 합니다.NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG
(선택 사항, 0으로 기본 설정) 및 기타Application.mk
에 포함된APP_*
. - 이제 쉼표로 구분된 목록에
APP_ABI
를 열거할 수 있습니다. 예:APP_ABI := "armeabi,armeabi-v7a"
-g
옵션을 사용하여android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip
이라고 하는 별도의 선택 패키지에 디버깅 정보가 포함된 STL을 다시 빌드할 수 있습니다. 이 옵션은ndk-stack
스크립트에서 STL 전체에 더 나은 스택 덤프를 제공하는 데 도움이 됩니다 이 변경사항은 제거된 최종 파일의 코드/크기에 영향을 미치지 않습니다.- 컴파일 시
APP_ABI
를 보고하도록hello-jni
샘플이 향상되었습니다. - 결정적 모드(옵션
-D
)에서ar
도구를 사용하여 정적 라이브러리가 빌드되었습니다. (문제 60705)
Android NDK r9b(2013년 10월)
- 중요 변경사항:
-
- 수준 13, 15, 16, 17의 추가를 포함하여 수준 18까지 모든 Android API 수준에 관해
include/android/*h
및math.h
가 업데이트되었습니다. 추가된 API에 관한 정보는 변경사항 68012 및 68014의 커밋 메시지를 참고하세요. (문제 47150, 58528 및 38423) - Renderscript 바인딩을 비롯하여 Android API 수준 19 지원 기능이 추가되었습니다.
- 기존 armeabi-v7a ABI에
-mhard-float
지원 기능이 추가되었습니다. 자세한 내용 및 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가 지원 중단되었으며 다음 릴리스에서 삭제될 예정입니다.
- 수준 13, 15, 16, 17의 추가를 포함하여 수준 18까지 모든 Android API 수준에 관해
- 중요한 버그 수정:
-
- 16비트 상대 점프 테이블을 생성하지 못하는 ARM GCC 4.6
thumb2
의 문제가 해결되었습니다. (GCC 문제) - 다음의 GCC 4.8 내부 컴파일러 오류(ICE)가 해결되었습니다.
g++.dg/cpp0x/lambda/lambda-defarg3.C
. (변경사항 62770, GCC 문제) - Windows 32비트
*-gdb.exe
실행 파일이 시작되지 않는 문제가 해결되었습니다. (문제 58975) - bullet 라이브러리를 빌드할 때 GCC 4.8 ICE가 수정되었습니다. 오류 메시지는 다음과 같습니다.
드림 (문제 58916, GCC 문제).internal compiler error: verify_flow_info failed
- GDB/ARM 빌드가 프롤로그 코드에서 해제를 위해
ARM.exidx
데이터를 건너뛰도록 수정되고 exidx 기반 스택 예제를 제어하기 위해 명령어(set arm exidx-unwinding
)가 추가되었습니다. (문제 55826) - HI 및 LO 레지스터가 잘못 재사용되는 Clang 3.3 MIPS 컴파일러의 문제가 해결되었습니다.
dbx_reg_number
의 MIPS 4.7 ICE 문제가 해결되었습니다. 오류 메시지는 다음과 같습니다. 드림 (GCC 패치)external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
- 16비트 상대 점프 테이블을 생성하지 못하는 ARM GCC 4.6
- 기타 버그 수정:
-
- 헤더 수정사항
- 사양에 따라 ARM
WCHAR_MIN
및WCHAR_MAX
가 unsigned로 수정되었습니다(X86/MIPS 버전은 signed임). 이전 동작을 복원하려면_WCHAR_IS_ALWAYS_SIGNED
를 정의하세요. (문제 57749) include/netinet/tcp.h
가TCP_INFO
상태 enum을 포함하도록 수정되었습니다. (문제 38881)cdefs_elh.h
매크로_C_LABEL_STRING
이 c++11 모드를 사용할 때 GCC 4.8 도구 모음에서 경고 생성을 중단하도록 수정되었습니다. (문제 58135, 문제 58652)- 헤더
inttypes.h
에서 존재하지 않는 함수imaxabs
및imaxdiv
가 삭제되었습니다. pthread_exit()
반환 값 및pthread_self()
문제가 해결되었습니다. (문제 60686)bionic
헤더stdlib.h
에 이미 존재하는 누락된mkdtemp()
함수가 추가되었습니다.
- 사양에 따라 ARM
- Android API 수준 11에서 Clang을 사용하여
samples/gles3jni
를 빌드하는 문제가 해결되었습니다. - MCLinker가
-gc-sections
및--eh-frame-hdr
옵션을 여러 번 사용할 수 있도록 수정되었습니다. - MCLinker가
--no-warn-mismatch
옵션을 수락하도록 수정되었습니다. cpu-features
옵션이 모든 VFPv4 기기가 IDIV를 지원한다고 가정하지 않도록 수정되었습니다. 이제 이 옵션은 Nexus 4 등 허용 목록에 있는 기기에만 IDIV를 추가합니다. (문제 57637)android_native_app_glue.c
에서 이벤트 사전 디스패치 작업을 잘못 로깅하는 문제가 해결되었습니다.gabi++
terminate 및 unexpected_handler의 모든 작업이 스레드로부터 안전하게 수정되었습니다.ssax-instructions
및fenv
테스트를 통과할 수 있도록 Clang-integrated-as
옵션의 여러 문제가 해결되었습니다.- GCC 4.6/4.7/4.8 컴파일러가 정적 실행 파일에도 링커 옵션
--eh-frame-hdr
을 전달하도록 수정되었습니다. 자세한 내용은 GCC 패치를 참조하세요. CPU-ARCH-ABIS.html
의 추가 아포스트로피가 수정되었습니다. 자세한 내용은NDK-DEPENDS.html
을 참조하세요. (문제 60142)- Windows에서 ndk-build 출력의 추가 인용 문자가 수정되었습니다. (문제 60649)
- Clang 3.3이
__atomic_fetch_add
,__atomic_fetch_sub
,__atomic_fetch_or
와 같은 ARM의 내장 원자 작업을 컴파일하도록 수정되었습니다. - Clang 3.3 ICE가 맞춤설정된
vfprintf
를 사용하여 수정되었습니다. (Clang 문제)
- 헤더 수정사항
- 기타 변경사항:
-
- 모든 GCC 빌드에 대해 OpenMP가 사용 설정되었습니다. 이 기능을 사용하려면 다음 플래그를 빌드 설정에 추가하세요.
드림 코드 예는LOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
tests/device/test-openmp
를 참고하세요. ld.mcld
의 크기가 크게 감소하여(1.5MB와ld.bfd
3.5MB 및ld.gold
7.5MB 비교) 속도가 약 20% 향상했습니다.- C++가 아니라 C에만 적용할 수 있는 옵션을 지정하기 위해
LOCAL_CONLYFLAGS
및APP_CONLYFLAGS
가 추가되었습니다. 기존의LOCAL_CFLAGS
및APP_CFLAGS
는 (대부분의 옵션을 두 번 지정하는 수고를 덜기 위해) C++ 컴파일에도 사용되므로-std=gnu99
와 같은 옵션은 g++ 빌드의 경우 경고가 발생하고 clang++ 빌드의 경우 오류가 발생하며 작동하지 않을 수도 있습니다. gabi++
배열 도우미 함수가 추가되었습니다.- 스택이
__aeabi_idiv0
와 같이 이전에 차단된 지점을 지나 해제되지 않도록 하기 위해 모든libgcc.a
파일이-funwind-tables
를 사용하여 빌드되도록 GCC 빌드가 수정되었습니다. - Ingenic MXU 지원 기능이 새로운
-mmxu
옵션과 함께 MIPS GCC4.6/4.7/4.8에 추가되었습니다. - MIPS GCC4.6/4.7/4.8
-mldc1-sdc1
이 ldxc1/sdxc1도 제어하도록 확장되었습니다. - crazy 링커가 추가되었습니다. 자세한 내용은
sources/android/crazy_linker/README.TXT
를 참조하세요. bitmap-plasma
가 200x200픽셀 영역이 아니라 전체 화면에 그리도록 수정되었습니다.- 동일한 파일에 심볼릭 링크를 생성하여 linux 및 darwin 도구 모음 크기를 25% 줄였습니다.
- 모든 GCC 빌드에 대해 OpenMP가 사용 설정되었습니다. 이 기능을 사용하려면 다음 플래그를 빌드 설정에 추가하세요.
Android NDK r9(2013년 7월)
- 중요 변경사항:
-
- Android 4.3(API 수준 18) 지원 기능이 추가되었습니다. 자세한 내용은
STABLE-APIS.html
및samples/gles3jni/README
의 새로운 코드 예를 참조하세요. - Android 4.3(API 수준 18) 이상에서 지원하는 OpenGL ES 3.0용 헤더와 라이브러리가 추가되었습니다.
- NDK에 GNU Compiler Collection(GCC) 4.8 컴파일러가 추가되었습니다. GCC 4.6이 여전히 기본값이므로 이 옵션을 명시적으로 사용 설정해야 합니다.
ndk-build
빌드의 경우NDK_TOOLCHAIN_VERSION=4.8
을 내보내거나Application.mk
에 추가하세요.- 독립 실행형 빌드의 경우
make-standalone-toolchain.sh
에--toolchain=
옵션을 추가하세요. 예:
--toolchain=arm-linux-androideabi-4.8
참고:
-Wunused-local-typedefs
옵션은-Wall
에 의해 사용 설정됩니다.sources/cxx-stl/stlport/stlport/stl/config/features.h
와 같은 컴파일 타임 어셜션을 사용하는 경우 #311행에__attribute__((unused))
를 추가하세요. 자세한 내용은 변경사항 55460을 참조하세요.참고: GCC 4.7 버전 이상에서는 ARM 컴파일러가 ARMv6 이상 빌드 타겟에 대해 기본적으로 정렬되지 않은 액세스 코드를 생성합니다. 이 기능을 지원하지 않는 커널을 위해 빌드할 때
-mno-unaligned-access
빌드 옵션을 추가해야 할 수도 있습니다. - Clang 3.3 지원 기능이 추가되었습니다.
NDK_TOOLCHAIN_VERSION=clang
옵션에서 이제 기본적으로 Clang 3.3을 선택합니다.참고: GCC 4.4.3과 Clang 3.1 둘 다 지원 중단되었으며 다음 NDK 버전에서 삭제될 예정입니다.
- GNU 프로젝트 디버거(GDB)가 Python 2.7.5를 지원하도록 업데이트되었습니다.
- Windows 호스트를 지원하기 위해 MCLinker가 추가되었습니다.
ld.gold
가 기본값인 경우(사용 가능한 경우) MCLinker를 사용 설정하려면LOCAL_LDFLAGS
또는APP_LDFLAGS
에-fuse-ld=mcld
을 추가해야 합니다. - ELF 라이브러리 종속 항목을 출력하는
ndk-depends
도구가 추가되었습니다. 자세한 내용은NDK-DEPENDS.html
을 참조하세요. (문제 53486)
- Android 4.3(API 수준 18) 지원 기능이 추가되었습니다. 자세한 내용은
- 중요한 버그 수정:
-
android_native_app_glue
의 잠재적 이벤트 처리 문제가 해결되었습니다. (문제 41755)- ARM/GCC-4.7 빌드가 NEON 로드 및 저장 명령 VST 및 VLD에 대해 충분한 정렬을 생성하도록 수정되었습니다. (GCC 문제 57271)
- 문자열 리터럴의 일정한 음의 색인 값에 대한 GCC 4.4.3/4.6/4.7 내부 컴파일러 오류(ICE)가 수정되었습니다. (문제 54623)
- 객체 주소를 끊임없이 초기화하는 GCC 4.7 세분화 오류가 해결되었습니다. (문제 56508)
- Boost 1.52.0을 사용할 때
-O
값에 대한 GCC 4.6 ARM 세분화 오류가 해결되었습니다. (문제 42891) libc.so
및libc.a
가wait4()
함수를 지원하도록 수정되었습니다. (문제 19854)- x86 libc.so 및 libc.a 파일이
clone()
함수를 포함하도록 업데이트되었습니다. linker.list
파일이 비어 있거나 사용되지 않는LOCAL_SHORT_COMMANDS
버그가 해결되었습니다.- Mac OS의 GCC MIPS 빌드가 CFI 지시문을 사용하도록 수정되었습니다. CFI 지시문이 없으면
ld.mcld --eh-frame-hdr
에서 자주 오류가 발생합니다. llvm/lib/VMCore/Value.cpp
의 Clang 3.2 X86/MIPS 내부 컴파일러 오류가 해결되었습니다. (변경사항 59021)- GCC 4.7 64비트 Windows 어셈블러가 비정상 종료되는 문제가 해결되었습니다. (오류:
out of memory allocating 4294967280 bytes
) ndk-gdb
스크립트가--start
또는--launch
작업이 이제 GNU 디버그 서버를 기다리도록, 따라서 실행 경로 초기에 더 안정적으로 중단점 세트(예: JNI 코드의 중단점)에 도달할 수 있도록 수정되었습니다. (문제 41278)참고: 이 기능에는 jdb가 필요하며 대기 중인 중단점에 대한 경고가 발생합니다. 이전 동작을 복원하려면
--nowait
옵션을 지정하세요.- 라이브러리 목록이 비어있을 때 GDB가 비정상 종료되는 문제가 해결되었습니다.
bx pc
또는blx pc
Thumb 명령을 넘어stepi
명령어를 사용할 때 GDB가 비정상 종료되는 문제가 해결되었습니다. (문제 56962, 문제 36149)- MIPS
gdbserver
가DT_DEBUG
대신DT_MIPS_RLD_MAP
을 찾도록 수정되었습니다. (문제 56586) - ndk-build 스크립트의 순환 종속 항목이 해결되었습니다. 예를 들어 A->B이고 B->B이면 B가 빌드에서 삭제되었습니다. (문제 56690)
- 기타 버그 수정:
-
ndk-build
스크립트가 Clang 버전을 명령줄 옵션으로 지정할 수 있도록 수정되었습니다(예:NDK_TOOLCHAIN_VERSION=clang3.2
). 이전에는 버전을 환경 변수로 지정하는 경우에만 작동했습니다.- Clang 컴파일러를 사용할 때 MIPS 빌드 타겟의
_Unwind_Exception
크기가 24로 수정되었습니다. (변경사항 54141) ndk-build
스크립트가ndk-build clean
명령어를 사용할 때 빌드된 라이브러리가 사전 빌드된 정적 라이브러리가 포함된 프로젝트에서 실제로 삭제되는지 확인하도록 수정되었습니다. (변경사항 54461, 변경사항 54480)NDK_ANALYZE=1
옵션이 간결하게 수정되었습니다.- 이전 버전과의 호환성을 사용하는 빌드의 경우
gnu-libstdc++/Android.mk
가backward/
경로를 포함하도록 수정되었습니다. (문제 53404) stlport new
가 때때로 임의의 값을 반환하는 문제가 해결되었습니다.APP_ABIS
가 아니라CPU_ABIS
의 순서와 일치하도록ndk-gdb
가 수정되었습니다. (문제 54033)- MacOSX의 NDK 64비트 빌드가 컴파일러 경로를 잘못 선택하는 문제가 해결되었습니다. (문제 53769)
- 빌드 스크립트가 64비트 Windows Vista를 감지하도록 수정되었습니다. (문제 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
섹션을 추가하지 않습니다. _Unwind_Control_Block
의 일관되지 않은typedef
에 대한 GCC 4.4.3stlport
컴파일 오류가 해결되었습니다. (문제 54426)- 후행
\r
문자가 포함되고 빌드 오류를 일으킬 수 있는 Windows에서 생성된AndroidManifest.xml
파일을 처리하도록awk
스크립트가 수정되었습니다. (문제 42548) - 호스트가 32비트인지 또는 64비트인지 감지하기 위해
prebuilts/
디렉터리를 검색하도록make-standalone-toolchain.sh
가 수정되었습니다. - Clang 3.2
-integrated-as
옵션이 수정되었습니다. - Clang 3.2 ARM EHABI 컴팩트 모델
pr1
및pr2
핸들러 데이터가 수정되었습니다. - 다음 Clang 오류를 해결하기 위해 Clang
-mllvm -arm-enable-ehabi
옵션이 추가되었습니다.clang: for the -arm-enable-ehabi option: may only occur zero or one times!
- 애플리케이션 manifest에
uses-sdk
요소가 없는 빌드 오류가 해결되었습니다. (문제 57015)
- 기타 변경사항:
-
- 헤더 수정사항
errno.h
의__set_errno
가 지원 중단되고libc.so
에서 더 이상 내보내지 않으므로__set_errno
를 인라인 함수로 만들도록 헤더가 수정되었습니다.elf.h
가stdint.h
를 포함하도록 수정되었습니다. (문제 55443)sys/un.h
가 다른 헤더와 독립적으로 포함되도록 수정되었습니다. (문제 53646)- 모든
MotionEvent_getHistorical
API 패밀리가const AInputEvent* motion_event
를 취하도록 수정되었습니다. (문제 55873) malloc_usable_size
가const void*
를 취하도록 수정되었습니다. (문제 55725)- stdint.h가 C99과 더 호환되도록 수정되었습니다. (변경사항 46821)
wchar.h
가WCHAR_MAX
및WCHAR_MIN
을 다시 정의하지 않도록 수정되었습니다.- 포인터 관련
PRI
및SCN
매크로의<inttypes.h>
선언이 수정되었습니다. (문제 57218) - API 수준 9 미만의 경우
__WCHAR_TYPE__
가 32비트가 되도록, 즉 모든 API 수준에 관해wchat_t
가 32비트가 되도록sys/cdefs.h
헤더가 변경되었습니다. 이전 동작을 복원하려면_WCHAR_IS_8BIT
부울 변수를 정의하세요. (문제 57267)
- NDK
docs/
및 기타 문서 수정사항에 더 많은 서식이 추가되었습니다. - 정적 라이브러리를 빌드할 때 씬 아카이브 기법에 관한 지원 기능이 추가되었습니다. (문제 40303)
- 스크립트
make-standalone-toolchain.sh
가 옵션--stl=stlport
를 지정할 때gnustl
외에stlport
라이브러리를 지원하도록 업데이트되었습니다. 자세한 내용은STANDALONE-TOOLCHAIN.html
을 참고하세요. - 호스트의 clang 및 clang++ 정의를 실수로 사용하지 않도록
--llvm-version=
옵션에서clang
및clang++
외에$TOOLCHAIN_PREFIX-clang
및$TOOLCHAIN_PREFIX-clang++
스크립트를 생성하도록make-standalone-toolchain.sh
스크립트가 업데이트되었습니다. - 업스트림 Clang에서 두 가지 최적화 기능을 다시 사용 설정하기 위해 플래그 두 개가 추가되었지만 GCC로 컴파일된 코드와의 호환성을 높이기 위해 NDK에서는 사용 중지되었습니다.
- Clang 3.2+에서 누락된 반환 의미 체계를 다시 사용 설정하기 위해
-fcxx-missing-return-semantics
플래그가 추적되었습니다. 일반적으로 모든 경로는 값을 반환하는 함수에 대한 return 문으로 끝나야 합니다. 그렇지 않은 경우, clang에서 경로에 return 문 없이 정의되지 않은 명령(또는 디버그 모드에서는 트랩)을 삽입합니다. 코드가 올바른 것이 확실하면 이 플래그를 사용하여 최적화 도구에서 정의되지 않은 동작을 이용할 수 있도록 허용하세요. 확실하지 않으면 이 플래그를 사용하지 마세요. 호출자가 여전히 임의의 잘못된 값을 수신할 수 있지만 최적화 도구에서 이 값을 이용하지 않으며 코드가 디버깅하기 더 어렵게 됩니다. - 정적 생성자가 포함된 전역 변수를 상수로 다시 승격시킬 수 있도록
-fglobal-ctor-const-promotion
플래그가 추가되었습니다. 이 플래그를 사용하면 LLVM의 전역 변수 최적화 단계에서 정적 생성자가 포함된 전역 변수를 평가하고 전역 상수로 승격시키려고 시도합니다. 이 최적화가 올바르더라도 GCC로 컴파일된 코드와 호환되지 않는 문제가 발생할 수 있습니다. 예를 들어 코드에서const_cast
const_cast를 사용하여 상수를 변경 가능하도록 만들고 수정할 수 있습니다. GCC에서는 변수가 읽기-쓰기 상태이며 코드가 우연히 실행됩니다. Clang에서는 const 변수가 읽기 전용 메모리에 있으며 애플리케이션의 비정상 종료를 야기할 수 있습니다.
- Clang 3.2+에서 누락된 반환 의미 체계를 다시 사용 설정하기 위해
- MIPS GCC 및 Clang 컴파일러에
-mldc1-sdc1
이 추가되었습니다. 기본적으로 컴파일러는 8바이트 객체를 제대로 정렬하고ldc1
및sdc1
명령을 내려 객체를 이동합니다. 앱에서 기본 할당자와 같은 방식으로 새 객체의 8바이트 경계와 항상 정렬되지 않는 맞춤 할당자를 사용하는 경우 정렬되지 않은 메모리의ldc1
및sdc1
작업으로 인해 앱이 비정상 종료될 수 있습니다. 이 경우 문제를 해결하려면-mno-ldc1-sdc1
플래그를 사용하세요. APP_PLATFORM_LEVEL
이APP_MIN_PLATFORM_LEVEL
보다 큰 경우 이벤트 심각도가 경고에서 정보로 다운그레이드됩니다. NDK에 모든 레벨에 대한 헤더가 없으므로APP_PLATFORM_LEVEL
이jni/Application.mk
의APP_PLATFORM
보다 낮을 수 있습니다. 이 경우 실제 레벨이 아래쪽으로 이동합니다.APP_MIN_PLATFORM_LEVEL
은 애플리케이션의 manifest에서android:minSdkVersion
에 의해 지정됩니다. (문제 39752)cpu-features.c
에android_getCpuIdArm()
및android_setCpuArm()
메서드가 추가되었습니다. 이에 따라 ARM CPUID 정보를 더 쉽게 가져올 수 있습니다. (문제 53689)ndk-build
가 Clang 컴파일에 GCC 4.7'의as/ld
를 사용하도록 수정되었습니다.참고: GCC 4.7에서
monotonic_clock
및is_monotonic
의 이름이 각각steady_clock
및is_steady
로 변경되었습니다.ndk-build
스크립트에 다음과 같은 새 경고가 추가되었습니다.- 정적 라이브러리 모듈에
LOCAL_LDLIBS/LDFLAGS
가 사용되는 경우 경고가 추가되었습니다. - 구성에 빌드할 모듈이 없는 경우 경고가 추가되었습니다.
- 비시스템 라이브러리가 공유 라이브러리 또는 실행 모듈의
LOCAL_LDLIBS/LDFLAGS
에 사용되는 경우에 대한 경고가 추가되었습니다.
- 정적 라이브러리 모듈에
- 빌드 스크립트가 업데이트되어,
APP_MODULES
가 정의되지 않고Android.mk
에 정적 라이브러리만 나열된 경우 스크립트가 모두 강제 빌드합니다. (문제 53502) ndk-build
가LOCAL_SRC_FILES
의 절대 경로를 지원하도록 업데이트되었습니다.-tui
옵션이 사용 설정된*-gdb
실행 파일의 중복 항목인*-gdbtui
실행 파일이 삭제되었습니다.- Edison Design Group(EDG) 컴파일러 프런트 엔드가
_STLP_HAS_INCLUDE_NEXT
를 다시 설정하면 경고하도록 빌드 스크립트가 업데이트되었습니다. (문제 53646) libraries/gdbserver
의 경로를 기본$PROJECT/libs
에서 재정의할 수 있도록 환경 변수NDK_LIBS_OUT
이 추가되었습니다. 자세한 내용은OVERVIEW.html
을 참조하세요.- ndk-build 스크립트 기본값이 형식 문자열 보호
-Wformat -Werror=format-security
를 사용하여 코드를 컴파일하도록 변경되었습니다.LOCAL_DISABLE_FORMAT_STRING_CHECKS=true
를 설정하여 사용 중지할 수도 있습니다. 자세한 내용은ANDROID-MK.html
을 참조하세요. ndk-gdb-py
에 STL pretty-print 지원 기능이 추가되었습니다. 자세한 내용은NDK-GDB.html
을 참조하세요.- googletest 프레임워크를 기반으로 테스트가 추가되었습니다.
- 현재 셸이
bash
가 아닌 경우 경고하는 알림이 도구 모음 빌드 스크립트에 추가되었습니다.
- 헤더 수정사항
Android NDK r8e(2013년 3월)
- 중요 변경사항:
-
- 64비트 호스트 도구 모음 세트(패키지 이름 접미사
*-x86_64.*
)가 추가되었습니다. 자세한 내용은CHANGES.HTML
및NDK-BUILD.html
을 참고하세요. - Clang 3.2 컴파일러가 추가되었습니다. GCC 4.6이 여전히 기본값입니다. Clang 컴파일러에 관한 정보는
CHANGES.HTML
을 참조하세요. - Linux/Mac OS X 호스트용 정적 코드 분석기가 추가되었습니다. 분석기 사용에 관한 정보는
CHANGES.HTML
을 참조하세요. - Linux/MacOSX 호스트용 MCLinker가 실험적 기능으로 추가되었습니다. 해당하는 경우
ld.gold
링커가 기본값이므로 명시적으로 사용 설정해야 합니다. 자세한 내용은CHANGES.HTML
을 참조하세요. - 모듈 종속 항목에 관해 위상 정렬을 사용하도록 ndk-build가 업데이트되었습니다. 즉 빌드에서
LOCAL_STATIC_LIBRARIES
,LOCAL_WHOLE_STATIC_LIBRARIES
,LOCAL_SHARED_LIBRARIES
에 지정된 라이브러리의 순서를 자동으로 정렬합니다. 자세한 내용은CHANGES.HTML
을 참고하세요. (문제 39378)
- 64비트 호스트 도구 모음 세트(패키지 이름 접미사
- 중요한 버그 수정:
-
-O2
에서 모든 도구 모음을 빌드하도록 빌드 스크립트가 수정되었습니다. 이전 버전의 도구 모음은 최적화 없이 잘못 빌드되었습니다.- 64비트에서 Mac OS X용 Clang/LLVM을 무조건 빌드하는 빌드 스크립트가 수정되었습니다.
- GCC 4.6/4.7 내부 컴파일러 오류가 해결되었습니다.
gen_thumb_movhi_clobber at config/arm/arm.md:5832
. (문제 52732) - GCC/ARM 4.6/4.7이 64비트 원자 내장 함수를 사용하여 코드를 연결하지 못하는 빌드 문제가 해결되었습니다. (문제 41297)
- GCC 4.7 링커 DIV 사용 불일치 오류가 해결되었습니다. (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) - GCC 4.7 segfault가 수정되었습니다. (GCC 문제)
<chrono>
클럭 정확도가 수정되고steady_clock
이 사용 설정되었습니다. (문제 39680)- GCC 4.7 libstdc++에 대해
_GLIBCXX_HAS_GTHREADS
를 사용 설정하도록 도구 모음이 수정되었습니다. (문제 41770, 문제 41859) posix_memalign
이 누락되어 X86 MXX/SSE 코드가 연결되지 않는 문제가 해결되었습니다. (변경사항 51872)i386.c
함수distance_non_agu_define_in_bb()
의 GCC4.7/X86 세분화 오류가 해결되었습니다. (변경사항 50383)- GCC4.7/X86이 이전
cmov
동작을 복원하도록 수정되었습니다. (GCC 문제) - libstdc++/GCC4.7에서
setlocale()
의 NULL 반환 값 처리 방식이 수정되었습니다. (문제 46718) ld.gold
런타임 정의되지 않은 참조가__exidx_start
및__exidx_start_end
로 수정되었습니다. (변경사항 52134)- Eigen 라이브러리를 사용할 때의 Clang 3.1 내부 컴파일러 오류가 해결되었습니다. (문제 41246)
- C++11 모드에서
<chrono>
가 포함된 Clang 3.1 내부 컴파일러 오류가 해결되었습니다. (문제 39600) - 초기화된 균일
rvalue
에 대한 메서드 호출을 위한 객체 코드를 생성할 때 Clang 3.1 내부 컴파일러 오류가 해결되었습니다. (문제 41387) - Clang 3.1/X86 스택 재정렬이 수정되었습니다. (변경사항 52154)
- Android 4.1.2에서 디버깅할 때 GNU Debugger(GDB) SIGILL 문제가 해결되었습니다. (문제 40941)
- 기호에 길고 간접적인 파일 경로가 포함되어 있을 때 GDB가
source:line
중단점을 설정할 수 없는 문제가 해결되었습니다. (문제 42448) - MIPS PIE 실행 파일에 대한 GDB
read_program_header
가 수정되었습니다. (변경사항 49592) uncaught_exception()
의STLport
세분화 오류가 해결되었습니다. (변경사항 50236)- 정렬되지 않은
DW_EH_PE_udata2
,DW_EH_PE_udata4
및DW_EH_PE_udata8
액세스로 인한 예외 처리의STLport
버스 오류가 해결되었습니다. nothrow new[]
연산자의 Gabi++ 무한 재귀 문제가 해결되었습니다. (문제 52833)- 예외 핸들러 포인터에 대한 잘못된 Gabi++ 오프셋이 수정되었습니다. (변경사항 53446)
- 예외 객체에 중복되지 않도록 Gabi++가 삭제되었습니다. (변경사항 53447)
- 기타 버그 수정:
-
- NDK 헤더가 수정되었습니다.
STLport
가 메모리 부족 오류 후 자동으로 종료하는 대신 취소하도록 수정되었습니다.- 시스템 및 Gabi++ 헤더가 API 수준 8 이하에서 컴파일될 수 있도록 수정되었습니다.
cpufeatures
가/proc/self/auxv
를 파싱하지 않도록 수정되었습니다. (문제 43055)ld.gold
가 호스트 libstdc++, Windows 플랫폼 및libgcc_sjlj_1.dll
라이브러리에 종속되지 않도록 수정되었습니다..vsave
에 일관되지 않는 레지스터 목록을 출력하고 어셈블러에서 오류를 일으키는 Clang 3.1이 수정되었습니다. (변경사항 49930)- Clang 3.1이 libgabi++를 컴파일하고 MIPS 빌드 타겟의
test-stlport
테스트를 통과할 수 있도록 수정되었습니다. (변경사항 51961) - Clang 3.1이 C가 아니라 C++에 대해서만 기본적으로 예외를 사용 설정하도록 수정되었습니다.
- 대부분의 GNU 예외 테스트를 통과할 수 있도록 Clang 3.1의 몇 가지 문제가 해결되었습니다.
-cc1
을 감지하고 발견 시-target
을 지정하지 않도록 독립 실행형 NDK 컴파일러의clang
및clang++
스크립트가 수정되었습니다.Application.mk
의NDK_APP_OUT
세트를 관찰하도록ndk-build
가 수정되었습니다.setjmp.h
에 이미 선언된sigsetjmp
및siglongjmp
함수가 누락된 X86libc.so
및lib.a
가 수정되었습니다. (문제 19851)- GCC 4.4.3/4.6/4.7 libstdc++가 C++ 11에서 Clang과 함께 작동하도록 패치되었습니다. (Clang 문제)
HOST_AWK
에 전달되는 인수의 cygwin 경로가 수정되었습니다.- 프로젝트의 JNI 디렉터리에서 실행될 때 창에서
ndk-build
스크립트 경고가 수정되었습니다. (문제 40192) LOCAL_PATH
의 정의에 후행 공백이 있을 때ndk-build
스크립트가 빌드하지 않는 문제가 해결되었습니다. (문제 42841)
- 기타 변경사항:
-
- GCC/MIPS 도구 모음에서 스레딩 지원 기능이 사용 설정되었습니다.
- GCC 예외 처리 도우미
__cxa_begin_cleanup
및__cxa_type_match
가 GNU libstdc++에서 이전의 숨겨진 공개 상태가 아닌 기본 공개 상태를 갖도록 업데이트되었습니다. 자세한 내용은CHANGES.HTML
을 참고하세요. - 이제 Gabi++ 및 STLport 정적 라이브러리가 예외 처리 도우미를 제외하고 숨겨진 공개 상태로 빌드되도록 빌드 스크립트가 업데이트되었습니다.
- Thumb 모드에서
STLport
가 ARM용으로 빌드되도록 빌드가 업데이트되었습니다. - Gabi++에
std::set_new_handler
지원 기능이 추가되었습니다. (문제 52805) - GNU libstdc++의
FUTEX
시스템 호출이 사용 설정되었습니다. ndk-build
가 더 이상 사전 빌드된 정적 라이브러리를 프로젝트의obj/local/<abi>/
디렉터리에 복사하지 않도록 업데이트되었습니다. (문제 40302)- ARM
toolchains/*/setup.mk
스크립트에서__ARM_ARCH_5*__
가 삭제되었습니다. (문제 21132) - ARM용 thumb에 추가 GNU libstdc++ 라이브러리가 빌드되었습니다.
- 32비트 FPU를 사용하여 MIPS 부동 소수점
madd/msub/nmadd/nmsub/recip/rsqrt
명령을 사용 설정했습니다. - GCC 4.6 및 4.7의 그래파이트 루프 최적화 도구가 더 많은 최적화를 허용하도록 사용 설정되었습니다.
-fgraphite
,-fgraphite-identity
,-floop-block
,-floop-flatten
,-floop-interchange
,-floop-strip-mine
,-floop-parallelize-all
,-ftree-loop-linear
. (정보) - 메모리 액세스를 분석하고 최적화하는 Linux 및 Max OS X 32비트 호스트에서 Clang 3.1용
polly
가 사용 설정되었습니다. (정보) - Linux의 GCC 4.7, 4.6, Clang 3.2 및 Clang 3.1에서
-flto
가 사용 설정되었습니다(LLVMgold.so를 통한 Clang LTO).ld.gold
를 사용할 수 없으므로 MIPS 컴파일러 타겟은 지원되지 않습니다. - GCC 4.6/4.7에서
ld.gold
의--plugin
및--plugin-opt
가 사용 설정되었습니다. - GCC 4.7에서
ld.gold
에 대한--text-reorder
가 사용 설정되었습니다. - bionic 헤더에서
isinf
스크립트를 정의 해제하는_GLIBCXX_USE_C99_MATH
를 사용하여 GNU libstdc++가 구성되었습니다. 자세한 내용은CHANGES.html
을 참조하세요. - 빌드 스크립트에
APP_LDFLAGS
가 추가되었습니다. 자세한 내용은ANDROID-MK.html
을 참조하세요. NDK_LOG=0
가NDK_LOG
를 사용 중지할 수 있도록 빌드 스크립트가 업데이트되었습니다.NDK_HOST_32BIT=0
이 호스트 개발자 환경 32비트 도구 모음을 사용 중지할 수 있도록 빌드 스크립트가 업데이트되었습니다.- 가본 GCC/X86 플래그
-march=
및-mtune=
가pentiumpro
및generic
에서i686
및atom
으로 변경되었습니다. - 도구 모음 빌드 스크립트가 향상되었습니다.
- 상당히 많은 병렬 빌드 처리를 방해하는
mingw
빌드 유형에 대한build-gcc.sh
의 경합 상태가 수정되었습니다. build-gabi++.sh
및build-stlport.sh
가 이제 NDK 패키지에서 실행할 수 있도록 업데이트되었습니다. (문제 52835)MSys
유틸리티 컬렉션의run-tests.sh
가 수정되었습니다.- 64비트 호스트 도구 모음 및 Canadian Cross 빌드 지원 기능이 개선되었습니다.
build-mingw64-toolchain.sh
스크립트가 최신 버전으로 업데이트되었습니다.- 공개 상태가 숨김이 아닌
libgnustl_static.a
및stlport_static.a
를 빌드하는 옵션이 추가되었습니다.
- 상당히 많은 병렬 빌드 처리를 방해하는
Android NDK r8d(2012년 12월)
- 중요 변경사항:
-
- NDK에 GNU Compiler Collection(GCC) 4.7 컴파일러가 추가되었습니다. GCC 4.6 컴파일러가 여전히 기본값이므로 다음과 같이 새 버전을 명시적으로 사용 설정해야 합니다.
ndk-build
의 경우NDK_TOOLCHAIN_VERSION=4.7
변수를 내보내거나 또는Application.mk
에 추가합니다.- 독립 실행형 빌드의 경우
--toolchain=
옵션을make-standalone-toolchain.sh
에 추가합니다. 예:--toolchain=arm-linux-androideabi-4.7
참고: 이 기능은 실험적 기능입니다. 기능을 사용해 보고 문제가 있으면 신고하세요.
- gabi++를 통해
stlport
예외 지원 기능이 추가되었습니다. 새로운 gabi++는dlopen
및 관련 코드에 종속됩니다. 즉- 더 이상
-static
옵션을 사용하여 정적 실행 파일을 빌드하거나APP_STL := stlport_static
을 사용하여libstlport_static.a
를 포함할 수 없습니다. 독립 실행형 도구 모음에는 여전히-static
옵션을 사용할 수 있습니다. 컴파일러가-ldl
옵션을 자동으로 추가하므로 계속해서include $(BUILD_EXECUTABLE)
을 사용하여 동적 실행 파일을 컴파일할 수는 있습니다. - 프로젝트가
-nostdlib
및 {-Wl,--no-undefined}를 사용하여 연결하는 경우-ldl
옵션을 수동으로 포함해야 합니다.
CPLUSPLUS-SUPPORT.html
을 참조하세요.참고: 이 기능은 실험적 기능이며 GCC 4.4.3 또는 Clang 3.1보다 GCC 4.6/4.7 컴파일러에서 더 잘 작동합니다. 기능을 사용해 보고 모든 문제를 보고하세요.
- 더 이상
- 이전의 Android C 라이브러리(bionic)와 호환되는 글로벌 기본 경로와 GCC 4.6 이상의 컴파일러를 사용하는
-fstack-protector
,-fstack-protector-all
,-fstack-protector-strong
에 대한 새로운 tls 경로(%gs:20) 중에서 선택할 수 있는 x86용-mstack-protector-guard=
옵션이 추가되었습니다.참고:
-mstack-protector-guard
설정 자체는 어떤-fstack-protector*
옵션도 사용 설정하지 않습니다. - Android 4.1 이상에서
/proc
을 통해 자동으로 감지할 수 없을 때 사용하기 위해android_setCpu()
함수가sources/android/cpufeatures/cpu-features.c
에 추가되었습니다. (Chromium 문제 164154)
- NDK에 GNU Compiler Collection(GCC) 4.7 컴파일러가 추가되었습니다. GCC 4.6 컴파일러가 여전히 기본값이므로 다음과 같이 새 버전을 명시적으로 사용 설정해야 합니다.
- 중요한 버그 수정:
-
ndk-build
스크립트를 사용할 때 객체 파일이 불필요하게 다시 빌드되는 문제가 해결되었습니다. (문제 39810)- 다음과 같은 오류를 일으키는 Mac OS X 10.6.x용 NDK 8c 릴리스의 링커 문제가
해결되었습니다.
드림 이 문제는 Mac OS X 10.7에서 빌드한 결과, 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
- Clang++ 독립 실행형 빌드 스크립트에서
-x c++
옵션이 삭제되었습니다. (문제 39089) - Cygwin의
NDK_TOOLCHAIN_VERSION=clang3.1
옵션을 사용하여 문제가 해결되었습니다. (문제 39585) - Cygwin 또는 MinGW 환경을 사용하여 독립 실행형 도구 모음을 생성할 수 있도록
make-standalone-toolchain.sh
스크립트가 수정되었습니다. 그 결과 생성된 도구 모음은 Cygwin, MingGW, CMD.exe 환경에서 사용할 수 있습니다. (문제 39915, 문제 39585) - ARM 및 X86용 android-14 빌드에 누락된
SL_IID_ANDROIDBUFFERQUEUESOURCE
옵션이 추가되었습니다. (문제 40625) ANDROID_CPU_X86_FEATURE_MOVBE
기능의 x86 CPU 감지 기능이 수정되었습니다. (문제 39317)- 표준 템플릿 라이브러리(STL)에서
.cpp
파일 확장자가 없는 C++ 소스를 사용하지 못하는 문제가 해결되었습니다. - reload1.c:1061에서 GCC 4.6 ARM 내부 컴파일러 오류가 해결되었습니다. (문제 20862)
- emit-rtl.c:1954에서 GCC 4.4.3 ARM 내부 컴파일러 오류가 해결되었습니다. (문제 22336)
- postreload.c:396에서 GCC 4.4.3 ARM 내부 컴파일러 오류가 해결되었습니다. (문제 22345)
- 람다 함수를 건너뛰는 GCC 4.6/4.7의 문제가 해결되었습니다. (문제 35933)
- 기타 버그 수정:
-
- NDK 헤더 파일 수정사항:
__WINT_TYPE__
및wint_t
가 동일한 유형으로 수정되었습니다.android/bitmap.h
의 오타가 수정되었습니다. (문제 15134)errno.h
의 오타가 수정되었습니다.sys/cdefs.h
에서__STDC_VERSION__
의 존재를 확인하는 기능이 추가되었습니다. (문제 14627)byteswap.h
및dirent.h
의 헤더가 재구성되었습니다.limits.h
가PAGE_SIZE
설정을 제공하는page.h
를 포함하도록 수정되었습니다. (문제 39983)glGetAttribLocation()
및glGetUniformLocation()
의 반환 유형이int
에서GLint
로 수정되었습니다.- x86 빌드용
__BYTE_ORDER
상수가 수정되었습니다. (문제 39824)
ndk-build
스크립트가-Os
를 ARM 빌드를 위한-O2
로 덮어쓰지 않도록 수정되었습니다.- 빌드 스크립트가
HOST_AWK
,HOST_SED
,HOST_MAKE
설정을 덮어쓸 수 있도록 수정되었습니다. - Intel C/C++ 컴파일러(ICC)에 의해 빌드된 객체를 연결하는
fsck_msdos
빌드의ld.gold
에 관한 문제가 해결되었습니다. - Clang의 ARM EHABI 지원 기능이 사양과 일치하도록 수정되었습니다.
solib
이벤트 중에 타겟의 링크 맵을 이동하는 데 소요되는 시간을 단축할 수 있도록 GNU Debugger(GDB)가 수정되었습니다. (문제 38402)- 공유 라이브러리를 연결할 때 누락된
libgcc.a
파일이 수정되었습니다.
- NDK 헤더 파일 수정사항:
- 기타 변경사항:
-
- ARM의 64비트 내장 원자 함수가 GCC 4.6으로 백포트되었습니다.
- 기타 문서 및 수정사항과 함께 오디오 출력 지연 시간에 대한 문서가 추가되었습니다.
- 비 void 함수에서 이제 return 문이 없는 경로에 대해
SIGILL
신호를 발생하도록 Clang을 사용한 디버그 빌드가 수정되었습니다. - GCC 4.6 도구 모음에
--llvm-version=3.1
을 추가하는 것과 동일한 접미사-clang3.1
을 수락하도록make-standalone-toolchain.sh
가 업데이트되었습니다. - GCC 및 Clang 버그 신고 URL이 http://source.android.com/source/report-bugs.html로 업데이트되었습니다.
llvm-objdump
에 ARM ELF 지원 기능이 추가되었습니다.- Clang 빌드에 대해 treating c input as c++ 경고가 표시되지 않습니다.
libiberty.a
의 32비트 버전만이 빌드되고lib32/
에 배치되도록 빌드가 업데이트되었습니다.
Android NDK r8c(2012년 11월)
- 중요 변경사항:
-
- NDK에 Clang 3.1 컴파일러가 추가되었습니다. GNU Compiler Collection(GCC) 4.6이 여전히 기본값이므로 다음과 같이 Clang 컴파일러 옵션을 명시적으로 사용 설정해야 합니다.
ndk-build
의 경우NDK_TOOLCHAIN_VERSION=clang3.1
을 내보내거나 또는 이 환경 변수 설정을Application.mk
에 추가합니다.- 독립 실행형 빌드의 경우
make-standalone-toolchain.sh
에--llvm-version=3.1
을 추가하고 makefile의CC
및CXX
를<tool-path>/bin/clang
및<tool-path>/bin/clang++
로 대체합니다. 자세한 내용은STANDALONE-TOOLCHAIN.html
을 참조하세요.
참고: 이 기능은 실험적 기능입니다. 기능을 사용해 보고 문제가 있으면 신고하세요.
- Windows 도구 모음에 대한 Gold 링커
ld.gold
가 추가되었습니다. Gold 링커는 또한 모든 호스트에서 ARM 및 X86의 기본값입니다.Android.mk
에LOCAL_LDFLAGS += -fuse-ld=bfd
를 추가하거나 연결하는 g++/clang++ 명령줄에-fuse-ld=bfd
를 전달하여ld.bfd
링커를 사용하도록 재정의할 수도 있습니다. - 진단하기 어려운 빌드 오류를 방지하기 위해
ndk-build[.cmd]
및ndk-gdb
스크립트에 NDK 경로에서 공백을 확인하는 기능이 추가되었습니다. - API 레벨 처리 기능이 다음과 같이 변경되었습니다.
APP_PLATFORM
,project.properties
또는default.properties
의android-13
을 통해android-10
을 지정하는 프로젝트가android-14
대신android-9
에 연결되도록 빌드 로직이 수정되었습니다.- android-16(Jelly Bean) 이상을 사용하는 실행 파일이 위치 독립적 실행 파일(PIE)에 대한
-fPIE
옵션을 사용하여 컴파일되도록 빌드가 업데이트되었습니다. 새APP_PIE
옵션을 사용하면 이 동작을 제어할 수 있습니다. 자세한 내용은APPLICATION-MK.html
을 참조하세요.참고: 14 이상의 모든 API 레벨은 여전히
platforms/android-14
에 연결되며 새로운platforms/android-N
은 추가되지 않았습니다. - 조정된 API 수준이 프로젝트의
AndroidManifest.xml
에 있는android:minSdkVersion
보다 큰 경우 경고가 발생하도록ndk-build
가 수정되었습니다.
cpu-features
도우미 라이브러리가 더 많은 ARM 전용 기능을 포함하도록 업데이트되었습니다. 자세한 내용은sources/android/cpufeatures/cpu-features.h
를 참고하세요.- X86 플랫폼의 long double이 8바이트로 수정되었습니다. 이 데이터 유형은 이제 double과 크기가 같지만 여전히 다른 유형으로 처리됩니다.
APP_ABI=armeabi-v7a
용 빌드가 업데이트되었습니다.- 이 빌드 유형이 링커에
-march=armv7-a
매개변수를 전달하도록 수정되었습니다. 이 변경사항에 따라 v7 전용 라이브러리 및crt*.o
가 올바로 연결됩니다. -mfpu=vfpv3-d16
가 이전 버전에 사용된-mfpu=vfp
옵션 대신ndk-build
에 추가되었습니다.
- 이 빌드 유형이 링커에
- NDK에 Clang 3.1 컴파일러가 추가되었습니다. GNU Compiler Collection(GCC) 4.6이 여전히 기본값이므로 다음과 같이 Clang 컴파일러 옵션을 명시적으로 사용 설정해야 합니다.
- 중요한 버그 수정:
-
- 루트 권한으로
make-standalone-toolchain.sh
를 실행하면 일부 사용자가 독립 실행형 도구 모음에 액세스할 수 없는 문제가 해결되었습니다. (문제 35279)- NDK 버전 패키지의 모든 파일 및 실행 파일은 전체에 대한 읽기 및 실행 권한을 보유하도록 설정됩니다.
- 이제 복사될 때
libstdc++.a
l의 소유권/그룹이 보존됩니다.
- Windows 사전 빌드
echo.exe
에서 중복된\r
이 삭제되었습니다. 중복된\r
이 경로의 일부가 되어gdb.setup
이 GNU Debugger(GDB)에서 올바로 작동하지 못했습니다. (문제 36054) host-mkdir
구현에서 타이밍 문제로 인해 때때로 실패하는 Windows 병렬 빌드가 수정되었습니다. (문제 25875)- GCC 4.4.3 GNU
libstdc++
가 기본적으로typeinfo
이름을 병합하지 않도록 수정되었습니다. 자세한 내용은toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo
를 참조하세요. (문제 22165) - GCC 4.6
cp/mangle.c::write_unscoped_name
의null
컨텍스트에서 컨텍스트가null
이고TREE_CODE
에서 역참조될 때 GCC가 비정상 종료될 수 있는 문제가 해결되었습니다. - float에 대한 ARM NEON 전용 유형 정의에서 GCC 4.4.3이 비정상 종료되는 문제가 해결되었습니다. (문제 34613)
- 역참조된 값이 포함된 부실한 스택 위치가 반환되고 런타임 비정상 종료를 일으키는
STLport
내부_IteWrapper::operator*()
구현이 수정되었습니다. (문제 38630) - ARM 관련 수정사항:
- ARM GCC 4.4.3/4.6
g++
가 GCC 4.4에서 <va_list>의 맹글링이 변경되었음을 경고하지 않도록 수정되었습니다. 이 경고를 피하기 위해-Wno-psabi
스위치를 사용하는 해결 방법은 더 이상 필요하지 않습니다. - 접미사가
.arm
또는.neon
인LOCAL_SRC_FILES
의 프로젝트에서APP_STL
도 사용하는 문제가 해결되었습니다APP_STL
을 사용하면ndk-build
스크립트에서 컴파일에 STLheader/lib
경로를 추가하기 전에LOCAL_SRC_FILES
에서 C++ 파일을 검색합니다.ndk-build
가 검색 전에.arm
및.neon
접미사를 제외하도록 수정되었습니다. 이러한 접미사가 제외되지 않으면myfile.cpp.arm.neon
와 같은LOCAL_SRC_FILES
의 항목이 C++ 코드로 컴파일되지 않습니다. binutils-2.21/ld.bfd
가 GNU Binutils에서 assertion fail 오류 메시지를 생성하는tag_FP_arch
없이 이전 binutils의 객체를 연결할 수 있도록 수정되었습니다. (문제 35209)binutils-2.19/ld
가 최신binutils-2.21
에 의해 사전 빌드된 객체를 연결할 때 발생하는 Unknown EABI object attribute 44 경고가 삭제되었습니다.- 하위 디렉터리
armv7-a/thumb
에headers/libs
를 채우도록make-standalone-toolchain.sh
를 수정하여-mthumb
와-march=armv7-a
를 모두 사용하는 GNUstdc++
컴파일의 문제가 해결되었습니다. (문제 35616) - unresolvable R_ARM_THM_CALL relocation 오류가 해결되었습니다. (문제 35342)
char
에서 부호 확장 시 잘못된 피연산자 유형을 기대하는 ARM 백엔드에 의해reload1.c:3633
에서 발생하는 내부 컴파일러 오류가 해결되었습니다. (GCC 문제 50099)- 이동 크기가 음수인 내부 컴파일러 오류가 해결되었습니다. (GCC 문제)
- ARM GCC 4.4.3/4.6
ndk-build
x86 ABI 타겟의 기본값이기도 한 X86용-fstack-protector
가 수정되었습니다.- MIPS 관련 수정사항:
- MIPS
libstlport_*
를 컴파일할 때_STLP_LITTLE_ENDIAN
을 1로 설정하여STLport
를 수정했습니다. - LLVM 컴파일 시 GCC
__builtin_unreachable
문제가 해결되었습니다. (GCC 문제 54369) - 100% CPU를 사용하는
cc1
컴파일 프로세스의 수정사항이 백포트되었습니다. (GCC 문제 50380)
- MIPS
- GNU Debugger 관련 수정사항:
- 빌드 시 gdb-7.x에서 Python 지원 기능이 사용 중지되었습니다. 그렇지 않은 경우 gdb-7.x 구성 함수에서 호스트에서 사용 가능한 Python 버전을 선택하고 특정 Python 버전에서 하드웨어에 내장된 종속 항목을 사용하여
gdb
를 빌드할 수도 있습니다. (Issue 36120) APP_ABI
에all
가 포함되어 있고 알려진 아키텍처와 일치하지 않을 때ndk-gdb
가 수정되었습니다. (문제 35392)- 드라이브 문자로 시작하는 Windows 경로의 일부가 될 수 있는 것으로 보이는 경우
:
문자를 유지하여 Windows 경로 이름 지원 기능을 수정했습니다. (GDB 문제 12843) gdbserver
에 ARM에 대한 하드웨어 중단점 추가 지원 기능이 수정되었습니다. (GDB 문제)- 링커가 변경되지 않은 경우 현재
solibs
만 읽기 위한 수정사항이 추가되었습니다. 이 변경사항에 따라solib
이벤트 처리 속도가 증가합니다. (문제 37677) solib
중단점을 찾으려고 반복적으로 시도하는 수정사항이 추가되었습니다. GDB에서 이제svr4_current_sos()
를 호출할 때마다 성공할 때까지enable_break()
를 다시 시도합니다. (변경사항 43563)gdb
가dlopen-ed
라이브러리에 있는 중단점에서 멈추지 않는 문제가 해결되었습니다. (문제 34856)sym_addr
의LSB
를 보존하지 않아/system/bin/linker
에서 기호가 제거되거나rtld_db_dlactivity()
가Thumb
으로 구현되는 시스템에서dlopen()
을 호출할 때 동적 링커의SIGILL
이 수정되었습니다. (문제 37147)
- 빌드 시 gdb-7.x에서 Python 지원 기능이 사용 중지되었습니다. 그렇지 않은 경우 gdb-7.x 구성 함수에서 호스트에서 사용 가능한 Python 버전을 선택하고 특정 Python 버전에서 하드웨어에 내장된 종속 항목을 사용하여
- 루트 권한으로
- 기타 버그 수정:
-
- NDK 헤더가 수정되었습니다.
- 원본 커널에서 잘못 삭제된
arch-mips/include/asm/*
코드가 수정되었습니다. (변경사항 43335) sys/cdefs.h
의#define __unused
와의 충돌을 피하기 위해linux/sysctl.h
및linux/icmp.h
에서 구조 멤버 데이터__unused
가__linux_unused
로 대체되었습니다.__BEGIN_DECLS
와__END_DECLS
로 둘러싸인 C 함수에 대한fenv.h
가 수정되었습니다.malloc.h
에서 구현되지 않은 함수가 삭제되었습니다.- ANSI 컴파일러용
uint64_t
의stdint.h
정의가 수정되었습니다. (문제 1952) <arch>/include/machine/*
의 프로세서 매크로가 수정되었습니다.- MIPS용
link.h
가 모든 플랫폼을 지원하는 새 버전으로 대체되었습니다. linux-unistd.h
가 삭제되었습니다.- GLibc 전용 매크로
LONG_LONG_MIN
,LONG_LONG_MAX
및ULONG_LONG_MAX
가<pthread.h>
에서<limits.h>
로 이동했습니다.
- 원본 커널에서 잘못 삭제된
ndk-stack-parser
의 버퍼 오버플로가 수정되었습니다.- 정의되지 않은 경우
__Named_exception
의 모든 선언과 사용을 생략하도록_STLP_USE_EXCEPTIONS
이 수정되었습니다.__Named_exception
설정은STLport
가 예외를 사용할 수 있는 경우에만 컴파일되고 사용됩니다. - Windows 코드를 빌드하지 않고 Linux 전용 NDK 패키지의 빌드가 수정되었습니다. 이 유형을 빌드하려면 다음 설정을
사용하세요.
./build/tools/make-release.sh --force --systems=linux-x86
atexit()
및__do_handler
를 내보내지 않도록libc.so
이 수정되었습니다. 이러한 기호는 이전 네이티브 라이브러리를 지원하기 위해 C 라이브러리의 시스템 버전에 의해 ARM 빌드용으로 내보내집니다. NDK로 생성된 항목은 기호를 직접 참조하지 말아야 합니다. 대신, 각 공유 라이브러리 또는 실행 파일에는crtbegin_*.o
에서 제공하는 이러한 기호의 자체 버전이 포함되어야 합니다.프로젝트가
-nostdlib -Wl,--no-undefined
옵션을 사용하여 연결된 경우에는crtbegin_so.o
가 연결되지 않으므로__dso_handle
을 직접 제공해야 합니다. 다음 코드 예에 표시된 대로__dso_handle
의 내용은 중요하지 않습니다.extern "C" { extern void *__dso_handle __attribute__((__visibility__ ("hidden"))); void *__dso_handle; }
plt
항목의objdump
에 사용되는 ARM용 기호 디코더가 더 읽기 쉬운 형태의function@plt
를 생성하도록 수정되었습니다.- GCC 4.6
libgcc.a
에 도입된 다음 기호가 X86 플랫폼libc.so
라이브러리에서 삭제되었습니다.__aeabi_idiv0
,__aeabi_ldiv0
,__aeabi_unwind_cpp_pr1
,__aeabi_unwind_cpp_pr2
. - 사용되지 않는
.ctors
,.dtors
,.eh_frame
이 MIPScrt*_so.S
에서 삭제되었습니다. ndk-gdb
가ndk-build
에 대해DUMP_XXXX
출력의 마지막 행만 취하도록 업데이트되었습니다. 이 변경사항에 따라Application.mk
또는Android.mk
가$(info ...)
문법으로 출력하는 내용은DUMP_XXXX
의 결과에 삽입되지 않습니다. (추가 정보)
- NDK 헤더가 수정되었습니다.
- 기타 변경사항:
-
arch-x86
및arch-mips
헤더가platforms/android-[3,4,5,8]
에서 삭제되었습니다. 이 헤더는 X86 및 MIPS ABI가 API 9 이상에서만 지원되기 때문에 불완전했습니다.- 독립 실행형 패키지의 c++ include 경로가 아래와 같이 간소화되었습니다.
(문제 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
의 문제가 해결되었습니다. - NDK 샘플의 지원 중단된 API가 대체되었습니다.
(문제 20017)
hello-gl2
를 android-5에서 android-7로native-activity
를 android-9에서 android-10으로native-audio
를 android-9에서 android-10으로native-plasma
를 android-9에서 android-10으로
- 디버깅 도구가 적절히 작동하도록
crtbegin_static/dynamic.o
에 정의된.note.android.ident
섹션에 구성이 더 간단한 Android 실행 파일에 대한 새 브랜딩이 추가되었습니다. 구조 멤버 및 값은 다음과 같이 정의됩니다.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.sh
및standalone/run.sh
를 호출하는 새로운 스크립트run-tests-all.sh
가 추가되었습니다. 스크립트run-tests.sh
는--abi
옵션 없이 실행되며, 대부분의 테스트를 지원되는 모든 ABI에 관해 컴파일하고 연결된 모드 기기에서 실행되도록 향상되었습니다.
Android NDK r8b(2012년 7월)
이 버전의 주요 기능은 새로운 GNU Compiler Collection(GCC) 4.6 도구 모음 및 Android 4.1(API 수준 16) 시스템 이미지에 관한 디버깅 지원 기능이 추가된 GNU Debugger(GDB) 7.3.x입니다.
- 중요한 버그 수정:
-
- 정적 라이브러리용 Mac OS, Windows Cygwin 환경에서
LOCAL_SHORT_COMMANDS
문제가 해결되었습니다. 목록 파일이 더 빠르게 생성되며 반복되는 프로젝트 재빌드를 피하기 위해 다시 생성되지 않습니다. ndk-gdb
의 여러 문제가 해결되었습니다.- 도구가
-e
,-d
및-s
플래그를 adb에 더 일관성 있게 전달하도록 업데이트되었습니다. - 도구가 공백이 포함된 기기 일련번호 이름을 허용하도록 업데이트되었습니다.
/system/bin/link
정보를 가져오도록 도구가 업데이트되어 호스트의gdb
가__dl_rtld_db_dlactivity
에 중단점을 설정하고 링커 활동(예:dlopen()
가 호출되는 경우solib
기호를 다시 검색)을 인식할 수 있습니다.
- 도구가
./libs/*/lib*.so
를 삭제하지 못하는 Windows의ndk-build clean
이 수정되었습니다.make
가 실패하면 0이 아닌ERRORLEVEL
을 반환하도록ndk-build.cmd
가 수정되었습니다.__exidx_start
및__exidx_end
기호를 더 이상 잘못 내보내지 않도록libc.so
가 수정되었습니다.- ARM 및 MIPS용
__libc_init
를 지나는 스택을 해제할 때SEGV
가 수정되었습니다.
- 정적 라이브러리용 Mac OS, Windows Cygwin 환경에서
- 중요 변경사항:
-
- GCC 4.6 도구 모음(
gold
및 GDB 7.3.x가 포함된binutils
2.21)이 원본 GCC 4.4.3 도구 모음(binutils
2.19 및 GDB 6.6)과 동시에 존재하도록 추가되었습니다.- GCC 4.6이 이제 기본 도구 모음입니다.
Application.mk
의NDK_TOOLCHAIN_VERSION=4.4.3
을 설정하여 원본 도구 모음을 선택할 수도 있습니다. gold
링커 지원 기능은 Linux 및 Mac OS 호스트의 ARM 및 x86 아키텍처에만 사용할 수 있습니다. 이 지원 기능은 기본적으로 사용 중지됩니다. 사용 설정하려면Android.mk
에LOCAL_LDLIBS += -fuse-ld=gold
를 추가하세요.-fPIE
를 사용하여 컴파일된 프로그램에는 Android 4.1(API 레벨 16) 시스탬 이미지의 바이너리를 포함하여 디버깅을 위한 새GDB
가 필요합니다.binutils
2.21ld
도구에는 버전 2.22에서 백포트된 수정사항이 포함됩니다.- 이전 플랫폼과의 호환성을 위해
sincos()
최적화가 사용 중지되었습니다.
- GCC 4.6이 이제 기본 도구 모음입니다.
- 기본적으로 Never eXecute(NX) 비트 및
relro
/bind_now
보호를 사용 설정하도록 빌드 옵션이 업데이트되었습니다.- 어셈블러에
--noexecstack
이 추가되고 스택 및 힙에서 NX 비트를 사용 설정하여 버퍼 오버플로 공격에 대한 NX 보호 기능을 제공하는 링커에-z noexecstack
이 추가되었습니다. - 메모리 손상으로 인해 보안 취약점이 발생하지 않도록 연결 후 내부 데이터 섹션을 강화하기 위해 링커에
-z relro
및-z now
가 추가되었습니다. (추가 정보: 1, 2) - 이 기능은 다음 옵션을 사용하여 사용 중지할 수 있습니다.
- 어셈블러에 대해
--execstack
옵션, 링커에 대해-z execstack
을 설정하여 NX 보호를 중지합니다. - 링커에 대한
-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
을 참고하세요. - 어셈블러에 대해
- 어셈블러에
- 디버깅 도구가 적절히 작동하도록
crtbegin_static/dynamic.o
의.note.ABI-tag
섹션에 구성이 더 간단한 Android 실행 파일에 관한 새 브랜딩이 추가되었습니다. 구조 멤버 및 값은 다음과 같이 정의됩니다.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 도구 모음(
- 기타 버그 수정:
-
mips-linux-gnu
재배치가R_MIPS_TLS_LDM
에 맞게 잘리는 문제가 해결되었습니다. (추가 정보)--gc-sections
을 사용하는 경우ld
도구 segfault가 수정되었습니다. (추가 정보)- MIPS
GOT_PAGE
집계 문제가 해결되었습니다. (추가 정보) mips_elf_count_got_symbols
에 대한 경고 기호 팔로우 링크가 수정되었습니다.mips_elf_allocate_lazy_stub
에 대한 경고 기호 팔로우 링크가 수정되었습니다.- MIPS
.dynamic
이 데이터 세그먼트로 이동하여 쓰기가 가능합니다. - 기호의 하드 코딩된 값이 MIPS에 대한 올바른 세그먼트 크기로 교체되었습니다.
- MIPS 도구 모음의 기본값에서
-mno-shared
옵션이 삭제되었습니다. Android 도구 모음의 기본값은-fPIC
(지원되는 경우-fpic
)입니다.-mshared
,-fpic
,-fPIC
,-fpie
또는-fPIE
를 명시적으로 지정하지 않으면 MIPS 컴파일러가 PIC를 해제하는-mno-shared
를 추가합니다. 이 경우 컴파일러가-mno-shared
를 추가하지 않도록 수정되었습니다. - 패키지 아래의
tests
프로젝트를 컴파일할 수 있도록 샘플hello-jni
및two-libs
의 잘못된 패키지 이름이 수정되었습니다.
- 기타 변경사항:
-
- 바이너리 위치가 변경되었습니다.
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
를 GCC 4.6으로 컴파일하는 경우sources/cxx-stl/gnu-libstdc++/4.6
, GCC 4.4.3으로 컴파일하는 경우sources/cxx-stl/gnu-libstdc++/4.4.3
으로 이동했습니다.libbfd.a
및libintl.a
를lib/
에서lib32/
로 이동했습니다.
- 재빌드 및 테스트 NDK 도구 모음에 다양한 스크립트가 추가되고 개선되었습니다.
- Win32 및 Win64 실행 파일을 생성하며 Linux에서 호스팅되는 새로운 도구 모음을 생성하기 위해
build-mingw64-toolchain.sh
가 추가되었습니다. clone
명령어를 사용하고 NDK 도구 모음 바이너리를 빌드하는 데 필요한 디렉터리에checkout
만 사용하여download-toolchain-sources.sh
의 속도를 향상했습니다.build-host-gcc.sh
및build-host-gdb.sh
스크립트가 추가되었습니다.- 주어진 NDK 설치 디렉터리 또는 기존 NDK 패키지의 내용을 확인하기 위해
tests/check-release.sh
가 추가되었습니다. tests/standalone/run.sh
독립 실행형 테스트가 다시 작성되었습니다.
- Win32 및 Win64 실행 파일을 생성하며 Linux에서 호스팅되는 새로운 도구 모음을 생성하기 위해
- 모든 플랫폼 및 아키텍처에서
if_dl.h
헤더가 삭제되었습니다. 헤더에 설명된AF_LINK
및sockaddr_dl
요소는 BSD에만 해당합니다(Linux에는 없음).
- 바이너리 위치가 변경되었습니다.
Android NDK r8(2012년 5월)
이 NDK 버전에는 MIPS ABI 지원 기능 및 추가 수정사항이 포함되어 있습니다.
- 새로운 기능:
-
- 호환되는 MIPS 기반 Android 기기에서 실행되는 기계어 코드를 생성할 수 있는
MIPS ABI 지원 기능이 추가되었습니다. MIPS를 위한 주요 기능으로는 MIPS 전용 도구 모음, 시스템 헤더, 라이브러리, 디버깅 지원 등이 있습니다. MIPS 지원에 관한 자세한 내용은 NDK 패키지의
docs/CPU-MIPS.html
을 참조하세요.기본적으로 코드는 ARM 기반 기기용으로 생성됩니다.
Application.mk
파일의APP_ABI
정의에mips
을 추가하여 MIPS 플랫폼용으로 빌드할 수 있습니다. 예를 들어 다음 행에서는ndk-build
에 서로 다른 세 ABI에 대한 코드를 빌드하도록 지시합니다.APP_ABI := armeabi armeabi-v7a mips
ARM 어셈블리 코드와 같은 아키텍처별 어셈블리 소스에 의존하지 않는 경우 MIPS 기계어 코드를 빌드하기 위해
Android.mk
파일을 수정할 필요가 없습니다. make-standalone-toolchain.sh
를 호출할 때--arch=mips
옵션을 사용하여 독립 실행형 MIPS 도구 모음을 빌드할 수 있습니다. 자세한 내용은docs/STANDALONE-TOOLCHAIN.html
을 참조하세요.
참고: 사용자의 기기에서 실행할 수 있는 경우에만 사용자에게 애플리케이션이 제공될 수 있도록 Google Play에서는 애플리케이션에 포함된 명령 세트 정보를 기반으로 애플리케이션을 필터링합니다. 필터링을 사용 설정하기 위해 사용자가 별도로 취해야 할 조치는 없습니다. 또한 Android 시스템 자체에서도 설치 시 애플리케이션을 확인하여 애플리케이션에서 기기의 CPU 아키텍처용으로 컴파일된 라이브러리를 제공하는 경우에만 설치를 계속할 수 있도록 허용합니다.
- 호환되는 MIPS 기반 Android 기기에서 실행되는 기계어 코드를 생성할 수 있는
MIPS ABI 지원 기능이 추가되었습니다. MIPS를 위한 주요 기능으로는 MIPS 전용 도구 모음, 시스템 헤더, 라이브러리, 디버깅 지원 등이 있습니다. MIPS 지원에 관한 자세한 내용은 NDK 패키지의
- 중요한 버그 수정:
-
- 파생된 클래스
D
에 대한 기본 클래스 객체b
의dynamic_cast<D>(b)
의 결과가 기본 클래스의 반대 방향으로 잘못 조정된 GAbi++ 구현의 오타가 수정되었습니다. (문제 28721) make-standalone-toolchain.sh
가libsupc++.*
을 복사하지 못하는 문제가 해결되었습니다.
- 파생된 클래스
- 기타 버그 수정:
-
- Windows 환경에서 다양한 개발 도구를 설치할 때 변경될 수도 있는
SHELL
환경 변수를 사용자가 다시 정의하는 경우에도ndk-build.cmd
가 올바로 작동하도록ndk-build.cmd
가 수정되었습니다.
- Windows 환경에서 다양한 개발 도구를 설치할 때 변경될 수도 있는
Android NDK r7c(2012년 4월)
이 NDK 버전에는 Tegra2 기반 기기에 관한 중요한 수정사항과 추가 수정사항 및 개선사항이 포함되어 있습니다.
- 중요한 버그 수정:
-
- GNU STL armeabi-v7a 바이너리가 비 NEON 기기에서 비정상 종료되지 않도록 수정되었습니다. NDK r7b와 함께 제공된 파일이 제대로 컴파일되지 않아, 특정 부동점 함수(예:
cosf
,sinf
,expf
)를 사용하려고 할 때 Tegra2 기반 기기 및 기타 기기가 비정상 종료되었습니다.
- GNU STL armeabi-v7a 바이너리가 비 NEON 기기에서 비정상 종료되지 않도록 수정되었습니다. NDK r7b와 함께 제공된 파일이 제대로 컴파일되지 않아, 특정 부동점 함수(예:
- 중요 변경사항:
-
NDK_OUT
환경 변수를 통해 맞춤 출력 디렉터리 지원 기능이 추가되었습니다. 이 변수가 정의되면$PROJECT_PATH/obj
대신 중간 생성된 모든 파일을 저장하는 데 사용됩니다. 이 변수는ndk-gdb
에 의해서도 인식됩니다.Android.mk
에서LOCAL_SHORT_COMMANDS
를true
로 정의하여 소스 파일 수백 개, 심지어 수천 개로 모듈을 빌드할 수 있는 지원 기능이 추가되었습니다.이 변경사항으로 인해 NDK 빌드 시스템에서 명령줄 길이 제한에 대한 해결 방법으로 대부분의 링커 또는 보관기 옵션을 목록 파일에 넣습니다. 자세한 내용은
docs/ANDROID-MK.html
을 참조하세요.
- 기타 버그 수정:
-
android_getCpuCount()
도우미 라이브러리의cpufeatures
구현이 수정되었습니다. 시스템에 의해 코어가 동적으로 활성화되는 특정 기기의 경우 이전 구현에서는 실제로 사용 가능한 총 코어 수가 아니라 함수가 처음 호출될 때 총 활성 코어 수를 보고했습니다.
Android NDK r7b(2012년 2월)
이 NDK 버전에는 네이티브 Windows 빌드, Cygwin 및 여러 개선 기능에 관한 수정사항이 포함되어 있습니다.
- 중요한 버그 수정:
-
- 일부 멀티코어 ARM 기반 기기의 정확성 문제를 방지하기 위해
sys/atomics.h
가 업데이트되었습니다. 이 NDK 버전으로 수정되지 않은 소스를 다시 빌드하면 이 문제가 완전히 제거됩니다. 자세한 내용은docs/ANDROID-ATOMICS.html
을 참조하세요. - (
binutils
2.20.1로 전환된) NDK r7에서 발생한 디버깅 문제를 해결하기 위해binutils
2.19로 되돌렸습니다. - 32비트 Linux의
ndk-build
가 수정되었습니다. 패키징 오류로 인해awk
실행 파일의 64비트 버전이 NDK r7의prebuilt/linux-x86/bin
아래 배치됩니다. - 네이티브 Windows 빌드가 수정되었습니다(
ndk-build.cmd
). 다른 빌드 모드는 영향을 받지 않았습니다. 이 수정사항에는 다음이 포함됩니다.- 프로젝트 경로의 최상위 디렉터리가 아닌 디렉터리(예: 하위 디렉터리)에서
ndk-build.cmd
를 호출하려고 할 때 발생하는 무한 루프/스택 오버플로 버그가 수정되었습니다. - 자동 생성된 종속 항목 파일이 무시되는 문제가 해결되었습니다. 즉 헤더를 업데이트해도 헤더가 포함된 소스 파일이 다시 컴파일되지 않습니다.
- 공백 및 따옴표를 제외한 파일 또는 경로의 특수 문자가 올바르게 처리되지 않는 문제가 해결되었습니다.
- 프로젝트 경로의 최상위 디렉터리가 아닌 디렉터리(예: 하위 디렉터리)에서
- 독립 실행형 도구 모음이
-lstdc++
를 사용할(즉 GNUlibstdc++
C++ 런타임에 연결할) 때 올바른 바이너리를 생성하도록 수정되었습니다. 공유 라이브러리 버전에 연결하려면-lgnustl_shared
를 사용하고 정적 버전의 경우-lstdc++
를 사용해야 합니다.이 수정사항에 관한 자세한 내용은
docs/STANDALONE-TOOLCHAIN.html
을 참조하세요. - Cygwin의
gnustl_shared
가 수정되었습니다. 파일이 올바른 위치에 있어도 링커에서libsupc++.a
를 찾을 수 없었습니다. APP_STL
을 통해 특정 C++ 런타임을 사용하지 않는 경우 Cygwin C++ 링크가 수정되었습니다.
- 일부 멀티코어 ARM 기반 기기의 정확성 문제를 방지하기 위해
- 기타 변경사항:
-
- 애플리케이션에서 GNU
libstdc++
런타임을 사용할 때 컴파일러가 더 이상 예외 및 RTTI를 강제로 사용 설정하지 않습니다. 이 변경사항에 따라 코드가 작아집니다.이 기능이 필요하면 다음 중 하나를 해야 합니다.
- 모듈 또는
Application.mk
에서 모듈 및 RTTI를 명시적으로 사용 설정합니다.(권장됨) (권장) Application.mk
에서APP_GNUSTL_FORCE_CPP_FEATURES
를'exceptions'
,'rtti'
또는 둘 다로 정의합니다. 자세한 내용은docs/APPLICATION-MK.html
을 참조하세요.
- 모듈 또는
- 이제 독립 프로세스에서 실행되는 비공개 서비스가 있는 경우
ndk-gdb
가 제대로 작동합니다. 일반적으로 서비스 프로세스인ps
에 의해 나열되는 첫 번째 프로세스 대신 기본 애플리케이션을 디버깅합니다. - NDK r7이
LOCAL_ARM_MODE
값을 따르지 못하고 항상 (전부가 아니라) 특정 소스 파일을 32비트 명령으로 컴파일하지 못하는 드문 버그가 수정되었습니다. STLport
: 소스가 Android 플랫폼 버전과 일치하도록 새로고침되었습니다. 이 업데이트에 따라 사소한 버그 몇 개가 수정되었습니다.- 불완전한 유형의 인스턴스화가 수정되었습니다.
- 사소한 "==" 대 "=" 오타가 수정되었습니다.
string::assign
에memcpy
대신memmove
이 사용되었습니다.IsNANorINF
,IsINF
,IsNegNAN
등을 더 효율적으로 처리할 수 있는 기능이 추가되었습니다.
자세한 내용은 커밋 로그를 참고하세요.
STLport
: 라이브러리에서 필요하지 않은 정적 이니셜라이저 5개가 삭제되었습니다.- armeabi-v7a용 GNU libstdc++ 라이브러리가 대신 armeabi용으로 잘못 컴파일되었습니다. 이 변경사항은 정확성에 영향을 미치지 않지만 올바른 ABI를 사용하면 성능이 약간 향상됩니다.
cpu-features
도우미 라이브러리가 선택적 x86 CPU 기능 세 개(SSSE3
,MOVBE
,POPCNT
)를 보고하도록 업데이트되었습니다. 자세한 내용은docs/CPU-FEATURES.html
을 참고하세요.docs/NDK-BUILD.html
이 맞춤Application.mk
파일을 선택하기 위해NDK_APP_APPLICATION_MK
대신NDK_APPLICATION_MK
을 언급하도록 업데이트되었습니다.- Cygwin:
ndk-build
가 호출될 때 더 이상 현재 디렉터리에 빈 'NUL' 파일을 생성하지 않습니다. - Cygwin: 더 나은 자동 종속성 감지 기능이 추가되었습니다. 이전 버전에서는 다음과 같은 경우 제대로 작동하지 않았습니다.
- Cygwin 드라이브 접두사가
/cygdrive
가 아닌 경우 - 드라이브가 없는 마운트를 사용하는 경우, 예를 들어 Cygwin에서
/home
이C:\Some\Dir
대신\\server\subdir
로 변환되는 경우.
- Cygwin 드라이브 접두사가
- Cygwin:
ndk-build
가 특정 버전의 Cygwin 및 GNU Make에서$NDK/prebuilt/windows/bin
아래의 네이티브 Windows 도구를 사용하려고 하지 않습니다.
- 애플리케이션에서 GNU
Android NDK r7(2011년 11월)
이 NDK 버전에는 Android 4.0 플랫폼을 지원하기 위한 새로운 기능 및 기타 많은 추가사항 및 개선사항이 포함되어 있습니다.
- 새로운 기능
-
- Android 4.0(API 수준 14)용 공식 NDK API가 추가되어 다음과 같은 네이티브 기능이 플랫폼에 추가되었습니다.
- Khronos Group OpenMAX AL 1.0.1 표준에 기반한 네이티브 멀티미디어 API가 추가되었습니다. 새
<OMXAL/OpenMAXAL.h>
및<OMXAL/OpenMAXAL_Android.h>
헤더를 사용하면 API 레벨 14를 타겟팅하는 애플리케이션에서 새로운 Android 전용 버퍼 대기열 인터페이스를 사용하여 네이티브 코드에서 직접 멀티미디어를 출력할 수 있습니다. 자세한 내용은docs/openmaxal/index.html
및 http://www.khronos.org/openmax/를 참조하세요. - Khronos Group OpenSL ES 1.0.1 표준에 따라 네이티브 오디오 API를 업데이트했습니다. API 레벨 14를 사용하면 압축된 오디오(예: MP3, AAC, Vorbis)를 PCM으로 디코딩할 수 있습니다. 자세한 내용은
docs/opensles/index.html
및 http://www.khronos.org/opensles/를 참조하세요.
- Khronos Group OpenMAX AL 1.0.1 표준에 기반한 네이티브 멀티미디어 API가 추가되었습니다. 새
- CCache 지원 기능이 추가되었습니다. 대규모 재빌드의 속도를 높이려면
NDK_CCACHE
환경 변수를ccache
(또는ccache
바이너리의 경로)로 정의하세요. 선언된 경우 NDK 빌드 시스템이 소스 파일을 컴파일할 때 자동으로 CCache를 사용합니다. 예:export NDK_CCACHE=ccache
참고: CCache는 NDK 출시에 포함되지 않으므로 사용하기 전에 설치해야 합니다. CCache에 관한 자세한 내용은 http://ccache.samba.org를 참조하세요.
- 주어진 NDK 버전에서 지원되는 모든 ABI용 NDK 모듈을 빌드하려고 한다는 것을 나타내기 위해
APP_ABI
를all
로 설정할 수 있는 지원 기능이 추가되었습니다. 즉Application.mk
의 두 행 중 하나가 이 버전과 동일합니다.APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
프로젝트의
Application.mk file
을 변경하지 않고 지원되는 모든 ABI용 프로젝트 빌드를 신속하게 확인하기 위해 명령줄에서ndk-build
을 호출할 때APP_ABI
를 정의하는 경우에도 작동합니다. 예:ndk-build APP_ABI=all
- 모듈에서 사용하는 C++ 기능(RTTI 또는 예외)을 선언할 수 있는
LOCAL_CPP_FEATURES
변수가Android.mk
에 추가되었습니다. 이에 따라 이 기능에 종속된 사전 빌드된 모듈이 있는 경우 최종 연결이 올바로 작동합니다. 자세한 내용은docs/ANDROID-MK.html
및docs/CPLUSPLUS-SUPPORT.html
을 참조하세요. - 빌드 명령어에 사용되는 소스 및 객체 파일의 경로가 짧아졌습니다. 프로젝트 경로에서
$NDK/ndk-build
를 호출할 때 빌드 명령어에 전달되는 소스, 객체 및 바이너리 파일의 경로는 이제 현재 디렉터리에 상대적으로 전달되므로 상당히 더 짧습니다. 이 기능은 소스 파일이 많은 프로젝트를 빌드하는 경우에 호스트 운영체제가 지원하는 최대 명령줄 길이 제한을 피하는 데 유용합니다. 프로젝트 트리의 하위 디렉터리에서ndk-build
를 호출하거나NDK_PROJECT_PATH
를 특정 디렉터리를 가리키도록 정의하는 경우에는 그대로 유지됩니다.
- Android 4.0(API 수준 14)용 공식 NDK API가 추가되어 다음과 같은 네이티브 기능이 플랫폼에 추가되었습니다.
- 실험용 기능
-
이제 Windows에서 Cygwin 없이 프로젝트 경로의 명령줄에서
ndk-build.cmd
스크립트를 호출하여 NDK 소스 파일을 빌드할 수 있습니다. 이 스크립트는 원본ndk-build
스크립트와 정확히 같은 인수를 취합니다. Windows NDK 패키지에는 사전 빌드된 GNU Make용 자체 바이너리 및 기타 빌드에 필요한 도구가 함께 제공됩니다. 작동하는 빌드 시스템을 얻기 위해 다른 항목을 설치할 필요가 없습니다.중요:
ndk-gdb
는 Windows에서 작동하지 않으므로 디버깅하려면 여전히 Cygwin가 필요합니다.이 기능은 아직 실험적 기능이므로 사용해 보고 문제가 있으면 공개 버그 데이터베이스 또는 공개 포럼에 신고하세요. NDK와 함께 제공되는 모든 샘플 및 단위 테스트는 이 기능을 사용하여 성공적으로 컴파일됩니다.
- 중요한 버그 수정
-
- 이제
APP_MODULES
가Application.mk
에 정의되지 않은 경우 가져온 공유 라이브러리가 타겟 설치 위치(libs/<abi>
)에 기본적으로 설치됩니다. 예를 들어 최상위 수준foo
에서 모듈bar
를 가져오면libfoo.so
및libbar.so
가 설치 위치에 복사됩니다. 이전에는,APP_MODULES
에도bar
를 나열하지 않은 경우libfoo.so
만 복사되었습니다.APP_MODULES
를 명시적으로 정의하면 동작이 변경되지 않습니다. ndk-gdb
가 이제 MAIN 인텐트 필터에 여러 카테고리가 있는 활동에 대해 올바로 작동합니다.- 정적 라이브러리 가져오기가 올바로 전이됩니다. 예를 들어 최상위 수준 모듈
foo
에서 정적 라이브러리zoo
를 가져오는 정적 라이브러리bar
를 가져오면libfoo.so
가 이제libbar.a
및libzoo.a
모두에 연결됩니다.
- 이제
- 기타 변경사항
-
docs/NATIVE-ACTIVITY.HTML
: 오타가 수정되었습니다. 네이티브 액티비티에 대한 최소 API 레벨은 8이 아니라 9여야 합니다.docs/STABLE-APIS.html
: API 수준 9부터 EGL이 지원되는 안정적 API로 나열된 누락된 문서가 추가되었습니다.download-toolchain-sources.sh
: AOSP 서버에 대해 새로운 위치인 android.googlesource.com에서 도구 모음 소스를 다운로드하도록 업데이트되었습니다.gabi++
라는 이름의 새로운 C++ 지원 런타임이 추가되었습니다. 자세한 내용은 업데이트된docs/CPLUSPLUS-SUPPORT.html
을 참조하세요.- GNU libstdc++ v3(GPLv3 라이선스)의 공유 라이브러리 버전에 해당하는
gnustl_shared
라는 이름의 새로운 C++ 지원 런타임이 추가되었습니다. 자세한 내용은docs/CPLUSPLUS-SUPPORT.html
을 참조하세요. - STLport C++ 런타임에 RTTI 지원 기능이 추가되었습니다(예외에 대한 지원 기능 없음).
LOCAL_CPP_EXTENSION
에 여러 파일 확장자 지원 기능이 추가되었습니다. 예를 들어foo.cpp
와bar.cxx
를 둘 다 C++ 소스로 컴파일하려면 다음을 선언하세요.LOCAL_CPP_EXTENSION := .cpp .cxx
- NDK에서 제공하는 링크 타임 공유 시스템 라이브러리에서 내보낸 원치 않는 기호가 다수 삭제되었습니다. 이렇게 하면 독립 실행형 도구 모음을 사용하여 생성된 코드가 실수로 안정적이지 않은 ABI 기호(예: 플랫폼을 빌드하기 위해 사용되는 도구 모음이 변경될 때마다 변경되는 모든 libgcc.a 기호)에 종속될 위험이 없습니다.
- EGL 및 OpenGLES Khronos 헤더가 더 많은 확장 프로그램을 지원하도록 새로고침되었습니다. 각 확장 프로그램을 클라이언트 애플리케이션으로 런타임 시 검색해야 하므로 해당하는 라이브러리에 대한 NDK ABI는 변경되지 않습니다.
사용 가능한 확장 프로그램은 기기가 실행되는 플랫폼 버전이 아니라 실제 기기나 GPU 드라이버에 따라 다릅니다. 헤더 변경사항은
eglGetProcAddress()
또는glGetProcAddress()
로 검색된 확장 프로그램을 더 쉽게 사용할 수 있도록 새로운 상수와 유형만 추가합니다. 다음 목록에서는 새롭게 지원되는 확장 프로그램을 설명합니다.- GLES 1.x
-
GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_APPLE_texture_2D_limited_npot
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_lod_bias
GL_IMG_read_format
GL_IMG_texture_compression_pvrtc
GL_IMG_texture_env_enhanced_fixed_function
GL_IMG_user_clip_plane
GL_IMG_multisampled_render_to_texture
GL_NV_fence
GL_QCOM_driver_control
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_perfmon_global_mode
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
- GLES 2.0
-
GL_OES_element_index_uint
GL_OES_get_program_binary
GL_OES_mapbuffer
GL_OES_packed_depth_stencil
GL_OES_texture_3D
GL_OES_texture_float
GL_OES_texture_float_linear
GL_OES_texture_half_float_linear
GL_OES_texture_npot
GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_AMD_program_binary_Z400
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_compression_dxt1
GL_IMG_program_binary
GL_IMG_read_format
GL_IMG_shader_binary
GL_IMG_texture_compression_pvrtc
GL_IMG_multisampled_render_to_texture
GL_NV_coverage_sample
GL_NV_depth_nonlinear
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
- EGL
-
EGL_ANDROID_recordable
EGL_NV_system_time
Android NDK r6b(2011년 8월)
이 NDK 버전에는 r6과 다른 새로운 기능이 없습니다. r6b 릴리스에서는 다음과 같은 r6 릴리스의 문제가 해결되었습니다.
- 중요한 버그 수정
-
APP_ABI="armeabi x86"
이 다중 아키텍처에 사용될 때 빌드가 수정되었습니다.- NDK 버전 패키지에서 사전 빌드된 STLport 바이너리의 위치가 수정되었습니다. 패키징 스크립트의 버그로 인해 이 바이너리가 잘못된 위치에 배치되었습니다.
- x86 독립 실행형 도구 모음을 사용하는 공유 라이브러리에서
atexit()
사용법이 수정되었습니다. make-standalone-toolchain.sh --arch=x86
이 수정되었습니다. 이전에는 적절한 GNU libstdc++ 바이너리를 올바른 위치에 복사하지 못했습니다.__dso_handle
기호(ARM에만 해당)의 정의 및 크기가 누락된 데 대한 독립 실행형 도구 모음 링커 경고가 수정되었습니다.- x86 빌드에 대한
$(SYSROOT)/usr/include
의 포함 순서가 수정되었습니다. 자세한 내용은 버그를 참조하세요. - x86 독립 실행형 도구 모음과 함께 사용될 때 x86 전용 시스템의
ptrdiff_t
및size_t
정의가 수정되었습니다.
Android NDK r6(2011년 7월)
이 NDK 버전에는 x86 ABI 지원 기능 및 기타 사소한 변경사항이 포함되어 있습니다.
이 버전의 변경사항에 관한 자세한 내용은 NDK 패키지에 포함된 CHANGES.HTML
문서를 참조하세요.
- 일반 참고사항:
-
- 호환되는 x86 기반 Android 기기에서 실행되는 기계어 코드를 생성할 수 있는
x86 ABI 지원 기능이 추가되었습니다. x86의 주요 기능에는 x86 전용
도구 모음, 시스템 헤더, 라이브러리, 디버깅 지원이 포함됩니다. x86 지원에 관한 자세한 내용은 NDK 패키지의
docs/CPU-X86.html
을 참고하세요.기본적으로 ARM 기반 기기에 대해 코드가 생성되지만
Application.mk
파일의APP_ABI
정의에 x86을 추가하여 x86 플랫폼용으로 빌드할 수 있습니다. 예를 들어 다음 행에서는ndk-build
에 서로 다른 세 ABI에 대한 코드를 빌드하도록 지시합니다.APP_ABI := armeabi armeabi-v7a x86
ARM 기반 어셈블리 소스에 의존하지 않는 경우 x86 기계어 코드를 빌드하기 위해
Android.mk
파일을 수정할 필요가 없습니다. make-standalone-toolchain.sh
를 호출할 때--toolchain=x86-4.4.3
옵션을 사용하여 독립 실행형 x86 도구 모음을 빌드할 수 있습니다. 자세한 정보를 보려면docs/STANDALONE-TOOLCHAIN.html
을 참조하세요.- 새
ndk-stack
도구를 사용하면 네이티브 코드에 의해 생성된logcat
의 스택 추적을 변환할 수 있습니다. 이 도구는 명령 주소를 함수, 소스 파일, 각 스택에 해당하는 행 번호와 같은 항목이 포함된 읽을 수 있는 형식으로 변환합니다. 자세한 내용 및 용례는docs/NDK-STACK.html
을 참조하세요.
- 호환되는 x86 기반 Android 기기에서 실행되는 기계어 코드를 생성할 수 있는
x86 ABI 지원 기능이 추가되었습니다. x86의 주요 기능에는 x86 전용
도구 모음, 시스템 헤더, 라이브러리, 디버깅 지원이 포함됩니다. x86 지원에 관한 자세한 내용은 NDK 패키지의
- 기타 변경사항:
- NDK r5 이후 지원 중단된
arm-eabi-4.4.0
이 NDK 배포에서 삭제되었습니다.
Android NDK r5c(2011년 6월)
이 NDK 버전에는 r5b와 다른 새로운 기능이 없습니다. r5c 릴리스에서는 다음과 같은 r5b 릴리스의 문제가 해결되었습니다.
- 중요한 버그 수정:
-
ndk-build
: 디버깅 가능한 프로젝트를 병렬 빌드하려고 할 때 드물게 발생하는 버그가 수정되었습니다.LOCAL_WHOLE_STATIC_LIBRARIES
가 새 도구 모음과 함께 올바로 작동하지 못하게 하는 오타가 수정되고 이에 대한 문서가docs/ANDROID-MK.html
에 추가되었습니다.- API 레벨 8(Android 2.2) 이전이 플랫폼 버전에서 실행될 때
gnustl_static
에 연결된 코드가 비정상 종료되는 버그가 수정되었습니다. ndk-gdb
: Android 3.0 이상의 기기를 디버깅할 때 세분화 오류가 발생하는 버그가 수정되었습니다.<android/input.h>
: API 수준 9(Android 2.3)에 도입된 두 함수가 잘못되어 수정되었습니다. 이로 인해 소스 API가 중단되지만 시스템의 바이너리 인터페이스는 변경되지 않습니다. 잘못된 함수에는history_index
매개변수가 누락되었으며 올바른 정의는 아래에 표시되어 있습니다.float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event, size_t pointer_index, size_t history_index); float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event, size_t pointer_index, size_t history_index);
- API 수준 9(Android 2.3)용 C 라이브러리 ARM 바이너리가 연결 시 해당 API 수준(예:
pthread_rwlock_init
)에 추가된 새 함수를 올바로 노출하도록 업데이트되었습니다.
- 사소한 개선사항 및 수정사항:
-
- 이제 객체 파일이 항상
LOCAL_SRC_FILES
에 표시되는 순서로 연결됩니다. 이전에는 대신 파일이 소스 확장자별로 분류되므로 이렇지 않았습니다. import-module
이 실패하는 경우 이제 검색된 디렉터리의 목록이 출력됩니다. 이 기능은 빌드 시스템에 의해 사용되는NDK_MODULE_PATH
정의가 올바른지 확인하는 데 유용합니다.import-module
이 성공하는 경우 이제 모듈이 발견된 디렉터리가 로그에 출력됩니다(NDK_LOG=1
를 사용하여 볼 수 있음).- 프로젝트에 매우 많은 수의 include 디렉터리가 있을 때 디버깅 가능한 애플리케이션의 빌드 속도가 향상되었습니다.
ndk-gdb
:adb shell
오류를 더 효과적으로 감지하며 오류 메시지가 개선되었습니다.<pthread.h>
: API 수준 9(Android 2.3) 이상에 대한PTHREAD_RWLOCK_INITIALIZER
의 정의가 수정되었습니다.- 모듈이 자신을 가져와 GNU Make에 무한 루프가 발생하는 문제가 해결되었습니다.
LOCAL_ARM_NEON
이 true로 설정된 경우 빌드가 실패하는 버그가 수정되었습니다(build/core/build-binary.mk
의 오타)..s
어셈블리 파일의 컴파일을 방해하는 버그가 수정되었습니다(.S
파일은 괜찮았음).
- 이제 객체 파일이 항상
Android NDK r5b(2011년 1월)
이 NDK 버전에는 r5와 다른 새로운 기능이 없습니다. r5b 릴리스에서는 다음과 같은 r5 릴리스의 문제가 해결되었습니다.
- r5 바이너리에는 glibc 2.11이 필요했지만 r5b 바이너리는 glibc 2.7 이상을 타겟팅 하는 특수 도구 모음을 사용하여 생성됩니다. Linux 도구 모음 바이너리는 이제 Ubuntu 8.04 이상에서 실행됩니다.
- arm-linux-androideabi-4.4.3 도구 모음의 컴파일러 버그가 수정되었습니다. 이전 바이너리는 부호가 있는 char를 처리할 때 잘못된 thumb 명령 시퀀스를 생성했습니다.
- GNU libstdc++의 정적 라이브러리 버전에 연결할 수 있는 APP_STL의 "gnustl_static" 값에 대한 누락된 문서가 추가되었습니다. -
- 다음과 같은
ndk-build
문제가 해결되었습니다.- Windows에 컴파일 오류가 발생할 때 일관성 없는 종속 항목 파일이 생성되는 버그. 이 버그로 인해 소스 코드의 오류가 해결된 후에도 올바로 빌드되지 않았습니다.
- Android NDK 설치 또는 프로젝트 경로에 매우 짧은 경로를 사용할 경우 잘못된 종속성 파일이 생성되는 Cygwin 특유의 버그. 이로 인해 증분 빌드를 할 수 없었습니다.
- cpufeatures 라이브러리가 새 NDK 도구 모음에서 올바로 작동하지 못하게 하는 오타
- 소스 트리가 매우 큰 경우 모든 소스 또는 객체 파일의 GNU Make에서
cygpath -m
을 호출함으로써 발생하는 문제. 이 호출을 하지 않아 Cygwin에서 빌드가 더 빨라졌습니다. 이 방법이 제대로 작동하지 않으면 환경의NDK_USE_CYGPATH=1
을cygpath -m
을 다시 사용하도록 정의하세요. - 이제 Cygwin 설치에서 공백이 포함된 잘못된 설치 경로를 사용자에게 알립니다. 이전에는 잘못된 경로가 있는 경우 올바른 GNU Make 버전이 설치되었어도 잘못된 버전에 대한 오류가 발생했습니다.
NDK_MODULE_PATH
환경 변수에 쉼표로 구분된 여러 디렉터리가 포함된 경우 제대로 작동하지 못하도록 하는 오타가 수정되었습니다.prebuilt-common.sh
스크립트에 Snow Leopard에서 32비트 도구 모음을 제대로 다시 빌드할 수 있는 호스트 태그에 의존하는 대신 64비트로 생성된 기계어 코드용 컴파일러를 확인할 수 있는 수정사항이 포함됩니다. 이 도구 모음 재빌드 스크립트는 이제 32비트 호스트 도구 모음 사용도 지원합니다.INET_ADDRSTRLEN
에 대해 누락된 선언이<netinet/in.h>
에 추가되었습니다.IN6_IS_ADDR_MC_NODELOCAL
및IN6_IS_ADDR_MC_GLOBAL
에 대해 누락된 선언이<netinet/in6.h>
에 추가되었습니다.-std=c99
를 사용하여 컴파일할 수 있도록<asm/byteorder.h>
의 'asm'이 '__asm__'으로 대체되었습니다.
Android NDK r5(2010년 12월)
이 NDK 버전에는 네이티브 코드를 광범위하게 사용하는 게임 및 유사한 애플리케이션 개발을 지원하기 위해 도입된 여러 새로운 API가 포함되어 있습니다. 이 API를 사용하면 개발자가 이벤트, 오디오, 그래픽 및 창 관리, 애셋, 저장소에 직접 액세스할 수 있습니다. 개발자는 새로운 NativeActivity
클래스를 사용하여 네이티브 코드로 Android 앱 수명 주기를 구현할 수도 있습니다. 이 버전의 변경사항에 관한 자세한 내용은 NDK 패키지에 포함된 CHANGES.HTML
문서를 참조하세요.
- 일반 참고사항:
-
- Android 애플리케이션 수명 주기를 네이티브 코드로 구현할 수 있는 네이티브 액티비티에 관한 지원 기능이 추가되었습니다.
- 다음 항목에 대한 네이티브 지원 기능이 추가되었습니다.
- 입력 하위 시스템(예: 키보드, 터치스크린)
- 센서 데이터 액세스(예: 가속도계, 나침반, 자이로스코프)
- 입력 및 센서 이벤트 등을 기다리는 이벤트 루프 API
- Windows 및 표면 하위 시스템
- 재생 및 녹음을 지원하고 플랫폼 오디오 효과를 제어하는 OpenSL ES 표준 기반 오디오
.apk
파일에 패키징된 애셋에 대한 액세스.
./configure && make
를 사용하여 항목을 빌드하고자 하는 사용자를 위해 더 나은 코드를 생성하고 이제 독립 실행형 크로스 컴파일러로 사용할 수도 있는 새로운 (GCC 4.4.3 기반) 도구 모음이 포함됩니다. 자세한 내용은 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을 참조하세요.
- CPU 유형의 보고를 개선하는
cpufeatures
도우미 라이브러리의 개선사항이 포함되었습니다(일부 기기에서는 이전에 기기가 실제로 ARMv6일 때 ARMv7 CPU를 보고함). 이 라이브러리를 사용하는 개발자는 애플리케이션을 다시 빌드한 다음 Google Play에 업로드하여 개선사항을 활용하시기 바랍니다. - OpenGL ES 텍스처 및 서비스를 생성하고 관리할 수 있는 EGL 라이브러리가 추가되었습니다.
- 네이티브 액티비티를 작성하는 방법을 보여주기 위해 새로운 샘플 애플리케이션,
native-plasma
및native-activity
가 추가되었습니다. - 많은 버그 수정 및 기타 약간의 개선사항이 포함되었습니다. 자세한 변경사항 목록은 docs/CHANGES.html을 참고하세요.
Android NDK r4b(2010년 6월)
- NDK r4b 노트:
-
NDK 빌드 및 디버깅 스크립트의 여러 문제에 대한 수정사항이 포함됩니다. NDK r4를 사용하는 경우 NDK r4b 빌드를 다운로드하시기 바랍니다. 이 출시의 변경사항에 대한 자세한 내용은 NDK 패키지에 포함된 CHANGES.TXT 문서를 참고하세요.
- 일반 참고사항:
-
- 새로운
ndk-build
빌드 명령어를 통해 단순화된 빌드 시스템이 제공됩니다. - 새로운
ndk-gdb
명령어를 통해 프로덕션 기기에서 생성된 기계어 코드를 네이티브 디버깅할 수 있는 지원 기능이 추가되었습니다. - ARM 기반 CPU 아키텍처를 위한 새로운 Android 전용 ABI,
armeabi-v7a
가 추가되었습니다. 새 ABI는 이 CPU 명령 세트 확장 프로그램을 포함하도록 기존armeabi
ABI를 확장합니다.- Thumb-2 명령
- VFP 하드웨어 FPU 명령(VFPv3-D16)
- ARM Advanced SIMD(NEON) GCC 내부 기능 및 VFPv3-D32에 대한 선택적 지원. Motorola의 Verizon Droid, Google Nexus One 등의 기기에서 지원됩니다.
- 앱에서 런타임 시 호스트 기기의 CPU 기능을 감지할 수 있는 새로운
cpufeatures
정적 라이브러리가 (소스와 함께) 추가되었습니다. 구체적으로는 애플리케이션에서 ARMv7-A 지원 기능 및 VFPv3-D32와 NEON 지원 기능을 확인한 다음 필요에 따라 별도의 코드 경로를 제공할 수 있습니다. cpufeatures
라이브러리를 사용하여 CPU 기능을 확인한 다음, CPU에서 지원하는 경우 NEON 내부 기능을 사용하여 최적화된 코드 경로를 제공하는 방법을 보여주는 샘플 애플리케이션,hello-neon
이 추가되었습니다.- NDK에서 지원하는 명령 세트 하나 또는 둘 다에 대해 기계어 코드를 생성할 수 있습니다. 예를 들어 동시에 ARMv5 및 ARMv7-A 아키텍처 모두를 위해 빌드하고 애플리케이션의 최종
.apk
에 모든 것을 저장할 수 있습니다. - 사용자의 기기에서 실행할 수 있는 경우에만 사용자에게 애플리케이션이 제공될 수 있도록 Google Play에서는 이제 애플리케이션에 포함된 명령 세트 정보를 기반으로 애플리케이션을 필터링합니다. 필터링을 사용 설정하기 위해 사용자가 별도로 취해야 할 조치는 없습니다. 또한 Android 시스템 자체에서도 설치 시 애플리케이션을 확인하여 애플리케이션에서 기기의 CPU 아키텍처용으로 컴파일된 라이브러리를 제공하는 경우에만 설치를 계속할 수 있도록 허용합니다.
- 네이티브 코드에서
Bitmap
객체의 픽셀 버퍼에 액세스하기 위한 안정적인 새로운 API를 포함하여 Android 2.2 지원 기능이 추가되었습니다.
- 새로운
Android NDK r3(2010년 3월)
- 일반 사항:
-
- OpenGL ES 2.0 네이티브 라이브러리 지원 기능이 추가되었습니다.
- OpenGL ES 2.0 꼭짓점 및 조각 셰이더의 사용법을 보여주는 샘플 애플리케이션,
hello-gl2
가 추가되었습니다. - 이 도구 모음 바이너리는 GCC 4.4.0을 사용하여 이 버전용으로 새로고침되어 이전 버전(4.2.1)보다 약간 더 작고 효율적인 기계어 코드가 생성됩니다. NDK는 또한 기계어 코드를 빌드하기 위해 선택적으로 사용할 수 있는 4.2.1 바이너리도 제공합니다.
Android NDK r2(2009년 9월)
원래 'Android 1.6 NDK, 버전 1'로 출시되었습니다.
- 일반 참고사항:
-
- OpenGL ES 1.1 네이티브 라이브러리 지원 기능이 추가되었습니다.
- 네이티브 OpenGL ES API를 통해 3D 그래픽을 렌더링하고
GLSurfaceView
객체를 사용하여 활동 수명 주기를 관리하는 샘플 애플리케이션san-angeles
가 추가되었습니다.
Android NDK r1(2009년 6월)
원래 'Android 1.5 NDK, 버전 1'로 출시되었습니다.
- 일반 참고사항:
-
- Thumb-1 명령을 포함하여 ARMv5TE 명령에 대한 컴파일러 지원 기능(GCC)이 포함됩니다.
- 안정적인 네이티브 API, 문서, 샘플 애플리케이션을 위한 시스템 헤더가 포함됩니다.