如何在 Android NDK 中使用 try-catch 语法 C++代码

How to use try-catch syntax in Android NDK C++ code?

本文关键字:try-catch 语法 C++ 代码 Android NDK      更新时间:2023-10-16

我是Android NDK的初学者,不太了解C++。我使用C++编写了一些逻辑,然后将它们构建为 .so 文件,然后将其与 JNI 一起使用用于我的 Android 项目,但有时它会在 .so 文件中引发崩溃。

我想快速解决此问题,我想知道是否可以对我的C++代码使用 try-catch 语法?(我试过了,但它总是报告编译错误。如果是,我该怎么做?

C++代码:

JNIEXPORT void JNICALL Java_xxoo_com_xxoo_model_ARDrawModel_draw(JNIEnv * env, jobject obj) {
    try {
        if(controller)
        {
            controller->Update(/*float dt*/);
            controller->DrawGLScene();
        }
    } catch (int a) {
        LOGD("drawModel---exception");
    }
}

编译错误:错误:异常处理已禁用,使用 -fexceptions 启用

是的。 您可以在 C++ NDK 代码中使用 try catch,但它不会捕获所有本机崩溃。

正如您的错误所说,您需要在编译 NDK 代码时显式启用异常功能。为此,请添加

APP_CPPFLAGS += -fexceptions

以 Application.mk 文件。

如果您想捕获所有可能的 NDK 崩溃,请查看 https://github.com/xroche/coffeecatch 库。