Установка / обновление CMake из Android Studio SDK Manager
Проверьте свой CMake из корневого каталога SDK, если существует ниндзя.
Ниже это не хорошо.
cmake {
cppFlags "-std=c++11"
arguments "-DANDROID_ABI=armeabi-v7a",
"-DANDROID_PLATFORM=android-16",
"-DANDROID_STL=gnustl_static",
"-DANDROID_CPP_FEATURES=rtti exceptions",
"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=libs"
}
Поскольку ANDROID_PLATFORM
должно автоматически определяться внешней собственной системой сборки Android в соответствии с minSdkVersion
, см. Ниже официальный документ о том, как ANDROID_PLATFORM
работает :
Вместо непосредственного изменения этого флага вы должны установить свойство minSdkVersion
в блоках defaultConfig
или productFlavors
вашего файла build.gradle
уровня модуля.Это гарантирует, что ваша библиотека используется только приложениями, установленными на устройствах с адекватной версией Android.Затем набор инструментов CMake выбирает лучшую версию платформы для создаваемого ABI, используя следующую логику:
- Если существует версия платформы для ABI, равная
minSdkVersion
, CMake использует эту версию.В противном случае, - , если существуют версии платформы ниже, чем
minSdkVersion
для ABI, CMake использует самую высокую из этих версий платформы.Это разумный выбор, потому что отсутствующая версия платформы обычно означает, что с предыдущей доступной версии не было никаких изменений в API нативной платформы. - В противном случае, CMake использует следующую доступную версию платформы выше
minSdkVersion
.
И, -DANDROID_ABI=armeabi-v7a
тоже нехорошо.Вы не должны определять этот параметр здесь.CMake автоматически выполнит итерацию всех ваших ABI в соответствии с вашими abiFilters.Если вы просто хотите построить armeabi-v7a
, вы можете указать это, используя abiFilter
, например,
externalNativeBuild {
cmake {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
Кроме того, rtti
и exceptions
равны cppFlags
, ниже должен быть правильный способустановите эти два флага.
cppFlags "-std=c++11 -frtti -fexceptions"
Убедитесь, что вы правильно настроили ANDROID_NDK
путь, потому что в соответствии с вашим вопросом у вас есть TWO версия набора NDK, одна - -DANDROID_NDK=/Users/ssk/android-ndk-r17c/
, другая --DANDROID_NDK=/Users/ssk/Library/Android/sdk/ndk-bundle
.Конфигурация NDK path от local.properties
:
ndk.dir=/Users/ssk/Library/Android/sdk/ndk-bundle
sdk.dir=/Users/ssk/Library/Android/sdk
Что такое исправление для -Gandroid Gradle - Ninja?
Добавьте ниже arguments
в cmake
config:
externalNativeBuild {
cmake {
...
version "3.10.2"
arguments "-GAndroid Gradle - Ninja"
}
}