如果有遇到
In instantiation of template class 'std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >' failed requirement '__is_allocator<std::__ndk1::allocator<char>, void, void>::value'; 'enable_if' cannot be used to disable this declaration
這可能是引用的.a檔或者是build出來的.a裡面的某個型態是使用不同的STL_TYPE
譬如gnustl_shared或是c++_shared
gnustl是std::basic_string
libc++是std::__ndk1::basic_string
libbase是std::__1::basic_string (android)
其中有人提到再build.gradle的arguments當中增加 (後來是發現這個方法才會有效)
externalNativeBuild.cmake{
arguments “-DANDROID_STL=c++_shared”
}
或是再cppFlags
externalNativeBuild {
cmake {
cppFlags "-DANDROID_STL=c++_shared"
abiFilters "armeabi-v7a","arm64-v8a"
}
}
也有人提到再CMakeList中增加(不過實際測試這不會自己產生再android aar中)
set(CMAKE_ANDROID_STL_TYPE "c++_shared")
官網-關於Cmake怎麼運作
https://developer.android.com/ndk/guides/cmake#android_stl
而這邊也有官方文件講到STL比較詳細的部分
https://developer.android.com/ndk/guides/cpp-support.html
以上,後來雖然發現問題不是stl的問題,不過還是隨手整理一下這次查到的資料,也許以後有機會參考