Ответ 1
Вам нужно построить с помощью CrystaX пользовательский NDK. Он имеет полную поддержку libstdС++, RTTI и исключений. Как правило, это лучший инструмент для разработки Android, который я знаю.
Я пытаюсь создать собственный код APP для Android. Родной код находится в cplusplus. Всякий раз, когда я пытаюсь сделать, появляется следующая ошибка.
H236Plus.cpp: 135: ошибка: обработка исключений отключена, используйте -f -ключения для включения
Как использовать -fexceptions для включения обработки исключений и где я его использую?
Вам нужно построить с помощью CrystaX пользовательский NDK. Он имеет полную поддержку libstdС++, RTTI и исключений. Как правило, это лучший инструмент для разработки Android, который я знаю.
Это зависит от того, какое время работы вы используете. Если вы не используете время выполнения системы и строите с помощью ndk-build
, вы добавляете любой из них в свой файл Android.mk:
Кроме того, вы можете добавить следующую строку в файл Application.mk:
Более подробная информация в docs/CPLUSPLUS-SUPPORT.html
в папке NDK
-fexception - это компилятор. Как вы его используете, зависит от вашей настройки компилятора. Какой компилятор вы используете? IDE? построить инструмент?
В флагах компилятора добавьте -fexception в свой Makefile.
с последней версией Android Studio это то, что выглядит мой build.gradle:
model {
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
buildTypes {
release {
minifyEnabled false
shrinkResources false
proguardFiles.add(file("proguard-rules.txt"))
signingConfig = $("android.signingConfigs.release")
}
}
defaultConfig {
applicationId "my.android.app"
minSdkVersion.apiLevel 16
targetSdkVersion.apiLevel 23
versionCode 29
versionName "my.latest.version"
}
ndk {
moduleName "jni-utils"
ldLibs.add("log")
cppFlags.add("-std=c++11")
cppFlags.add("-fexceptions")
stl "gnustl_static"
}
}
android.signingConfigs {
create("release") {
storeFile "C:\\Android\\Git\\MyProject\\keystore\\keystoreCommon"
storePassword "put you password here"
keyAlias "put your alias here"
keyPassword "put your password here"
}
}
}
Я решил эту проблему, добавив cFlags "-fexceptions" в раздел ndk файла build.gradle script, например:
ndk {
...
cFlags "-fexceptions"
}
Обратитесь к this от @Tundebabzy, если вы используете систему сборки ndk-build
.
Для CMake система сборки
добавьте следующее к вашему файлу build.gradle
на уровне модуля:
android {
...
defaultConfig {
...
externalNativeBuild {
// For ndk-build, instead use ndkBuild {}
cmake {
// Enables exception-handling support.
cppFlags "-fexceptions"
}
}
}
}
...
Для получения дополнительной информации См. эта ссылка.