이 페이지에서는 출시된 모든 안정적인 NDK 버전의 변경사항에 관한 정보를 제공합니다. 안정적인 최신 NDK 버전 또는 현재 사용 가능한 베타 버전을 다운로드하려면 NDK 다운로드 페이지를 참고하세요.
자세한 내용은 android-ndk-announce Google 그룹을 참고하고 출시 공지사항을 받아보려면 구독하세요.
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에서 직접 컴파일러를 호출하세요.$ $NDK/toolchains/llvm/prebuilt/
r19의 경우 도구 모음이 이전 경로에도 설치되어 빌드 시스템이 새 레이아웃에 적응할 수 있습니다. 이전 경로는 r20에서 삭제됩니다./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
- “Erratum 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
- 'Erratum 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에서 ARM에 관해 생성되었던 어레이-바운드 경고가 다시 사용 설정되었습니다. 이전에는 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)
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- 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
를 지정하세요. - 기타 버그 수정:
-
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
관련 문제가 해결되었습니다. 오류 메시지는 다음과 같습니다.
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
build-binary.mk.
의 오타가 수정되었습니다. (문제 76992) - 다음 명령 세트에 대한 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: 부호 있음.
- ARM: 부호 없음.
- 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
에 복사됩니다. make가 제대로 작동하기 위해서는armeabi-v7a
와armeabi-v7a-hard
를 둘 다 make타겟으로 (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)
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 이상의
- 모든 아키텍처에 대해
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)
- 사용자 정의
std::terminate()
핸들러가 실행될 수 있도록 gabi++std::unexpected()
가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_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
자세한 내용은 GCC 언어 독립 옵션을 참고하세요. - 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가 수정되었습니다. 오류 메시지는 다음과 같습니다.
internal compiler error: verify_flow_info failed
(문제 58916, GCC 문제) - GDB/ARM 빌드가 프롤로그 코드에서 해제를 위해
ARM.exidx
데이터를 건너뛰도록 수정되고 exidx 기반 스택 예제를 제어하기 위해 명령어(set arm exidx-unwinding
)가 추가되었습니다. (문제 55826) - HI 및 LO 레지스터가 잘못 재사용되는 Clang 3.3 MIPS 컴파일러의 문제가 해결되었습니다.
dbx_reg_number
의 MIPS 4.7 ICE 문제가 해결되었습니다. 오류 메시지는 다음과 같습니다.external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
(GCC 패치)
- 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픽셀 영역이 아니라 전체 화면에 그리도록 수정되었습니다.- symlink를 동일한 파일에 생성하여 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용 헤더와 라이브러리가 추가되었습니다.
- GNU 컴파일러 컬렉션(GCC) 4.8 컴파일러를 NDK에 추가했습니다. 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월)
- 중요 변경사항:
-
- GNU 컴파일러 컬렉션(GCC) 4.7 컴파일러를 NDK에 추가했습니다. 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 컴파일러에서 더 잘 작동합니다. 기능을 사용해 보고 모든 문제를 보고하세요.
- 더 이상
- x86이 이전 Android C 라이브러리 (bionic)와 호환되는 전역 기본 경로와 GCC 4.6 이상 컴파일러를 사용하는
-fstack-protector
,-fstack-protector-all
,-fstack-protector-strong
의 새로운 tls 경로 (%gs:20) 중에서 선택할 수 있도록-mstack-protector-guard=
옵션을 추가했습니다.참고:
-mstack-protector-guard
설정 자체는 어떤-fstack-protector*
옵션도 사용 설정하지 않습니다. - Android 4.1 이상에서
/proc
을 통해 자동으로 감지할 수 없을 때 사용하기 위해android_setCpu()
함수가sources/android/cpufeatures/cpu-features.c
에 추가되었습니다. (Chromium 문제 164154)
- GNU 컴파일러 컬렉션(GCC) 4.7 컴파일러를 NDK에 추가했습니다. GCC 4.6 컴파일러가
여전히 기본값이므로 다음과 같이 명시적으로 새 버전을 사용 설정해야 합니다.
- 중요한 버그 수정:
-
ndk-build
스크립트를 사용할 때 객체 파일이 불필요하게 다시 빌드되는 문제가 해결되었습니다. (문제 39810)-
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월)
- 중요 변경사항:
-
- Clang 3.1 컴파일러를 NDK에 추가했습니다. 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
에 추가되었습니다.
- 이 빌드 유형이 링커에
- Clang 3.1 컴파일러를 NDK에 추가했습니다. 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 디버거 관련 수정사항:
- 빌드 시 gdb-7.x에서 Python 지원 기능이 사용 중지되었습니다. 그렇지 않은 경우 gdb-7.x 구성 함수에서 호스트에서 사용 가능한 Python 버전을 선택하고 특정 Python 버전에서 하드웨어에 내장된 종속 항목을 사용하여
gdb
를 빌드할 수도 있습니다. (문제 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, 문서, 샘플 애플리케이션을 위한 시스템 헤더가 포함됩니다.