몇년 전에 NDK r21을 바탕으로 CI 빌드를 구성해둔 것을 업데이트 할 필요가 생겼다. 요즘에는 Clang 컴파일러 몇 버전을 사용하는지, libc++ 관련해서 Compiler/Linker 옵션이 바뀐 부분이 있었는지 확인하려는 목적. (나중에 RTFM 안했다고 잔소리 듣고싶지 않으니까…)
역시 GitHub NDK 저장소의 Wiki 또는 Android Developers 페이지 중에 NDK Revision History를 참고한다. 둘의 내용은 같다…
git clone https://github.com/android/ndk.wiki
그동안 (사용하지는 않았어도) 추적하고 있던 버전들에 대해서.
// note: 개인적으로 사용하는 조합일 뿐, 반드시 이와 같이 사용할 필요는 없음
android {
compileSdk 29
ndkVersion "21.4.7075529"
defaultConfig {
minSdkVersion 23
ndk {
abiFilters "armeabi-v7a", "arm64-v8a", "x86_64"
}
}
}
arm64-v8a
)는 필수ANDROID_ARM_NEON
.cxx-stl
폴더)<stdatomic.h>
에서 C 언어 Type Qualifier _Atomic
를 계속 사용함. 이후 C++ 표준을 위해 지원하지 않을수도 있음libc++_shared
, libc++_static
)은 더이상 Neon을 사용하지 않음.arm64-v8a
)로 넘어가라는 의미였던 것 같다.<stdbool.h>
추가됨. C++에서 <cstdbool>
은 C++17에서 Deprecated. C++20에서 제거되었음.
계속 사용하려면 C 표준에서 사용하는 이름으로(<stdbool.h>
) 사용해야 한다.thread_local
변수가 dlclose
의 영향을 받지 않도록 주의c++_shared
가 필요함android {
compileSdk 30
ndkVersion "22.1.7171670"
defaultConfig {
minSdkVersion 24
ndk {
abiFilters "armeabi-v7a", "arm64-v8a", "x86_64"
}
}
}
이 시기에 AGP와 CMake 양쪽이 업데이트되면서 빌드환경에 맞는 AGP-CMake 조합이 조금씩 달랐던 것으로 기억한다. Windows 환경에서 빌드할때 맞는 옵션이 Linux 환경에서는 안맞다던가…
https://android.googlesource.com/platform/ndk/+/master/docs/BuildSystemMaintainers.md#STL
std::filesystem
정식 지원. 이전까지는 filesystem 관련 라이브러리 옵션이 추가로 필요했음std::filesystem::canonical
)native_app_glue
에서 전달받는 message 추가android {
compileSdk 30
ndkVersion "23.1.7779620"
defaultConfig {
minSdkVersion 26
ndk {
abiFilters "arm64-v8a", "x86_64"
}
}
}
armeabi-v7a
를 지원하는 마지막 버전RelWithDebInfo
를 사용android.toolchain.cmake
가 재작성되었고, 이전 버전을 사용하기 위해서는 ANDROID_USE_LEGACY_TOOLCHAIN_FILE
변수를 사용해야 함. Legacy를 사용할 때 Minimum 버전은 21.find_library
는 이제 lib{name}.so
파일을 더 선호함앞서 버전에서 발견된 이슈들이 그대로 유지.
중요한 문제는 thread_local
과 dlclose
관련 1개 뿐이라고 생각한다.
2022년 3Q 부터 프로젝트의 CI를 구성할 때 기준으로 사용하려는 버전들에 대해서.
android {
compileSdk 31
ndkVersion "24.0.8215888"
defaultConfig {
minSdkVersion 29
ndk {
abiFilters "arm64-v8a", "x86_64"
}
}
}
LOCAL_ALLOW_MISSING_PREBUILT
, PREBUILT_SHARED_LIBRARY
, PREBUILT_STATIC_LIBRARY
관련 옵션 추가.ANDROID_NATIVE_API_LEVEL
이 잘못 처리되는 문제를 수정CMAKE_ANDROID_EXCEPTIONS
옵션 수정.mbstowcs
, wcstombs
제거thread_local
, dl_close
관련 설명이 좀 더 상세해졌다.
Wiki문서 참고.