C++ Crashlytics NDK 在与 header 一起使用时崩溃

C++ Crashlytics NDK crashes when used with header

我遵循了此处列出的所有步骤:crashlytics NDK Android

我将此文件复制粘贴到我的项目中:crashlytics.h

我用以下方式调用它:

#include "Crashlytics.h"
    
void NDKCrashlytics::logToCrashlytics(char *result) {
    firebase::crashlytics::Initialize();
    firebase::crashlytics::Log(result);
}

我一调用该方法,我的应用程序就崩溃了,这是我得到的日志:

E/AndroidRuntime(20818): FATAL EXCEPTION: Thread-10 E/AndroidRuntime(20818): Process: com.insync.loopad, PID: 20818 E/AndroidRuntime(20818): java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.crashlytics.FirebaseCrashlytics" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/system/lib64, /system/lib64]] E/AndroidRuntime(20818): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196) E/AndroidRuntime(20818): at java.lang.ClassLoader.loadClass(ClassLoader.java:379) E/AndroidRuntime(20818): at java.lang.ClassLoader.loadClass(ClassLoader.java:312) 2 (greylist, linking, allowed) D/libcrashlytics(20818): Initializing libcrashlytics version 3.0.0

我也看到了这个问题here但是没有解决。我做错了什么?

在 C++ 方面(将 com_xxx_lib 替换为您的包 ID):

#include "Crashlytics.h"
extern "C"
{
    JNIEXPORT void JNICALL
    Java_com_xxx_lib_MyNativeActivity_jniCrashlyticsInit(JNIEnv * env ) {
        firebase::crashlytics::Initialize();
    }
}
void CrashlyticsLog(char const *msg)
{
    firebase::crashlytics::Log(msg);
}

Java 方面: 在 NativeActivity

的 onCreate() 中调用 jniCrashlyticsInit()
public class MyNativeActivity extends NativeActivity
{
    static {
        System.loadLibrary("XXX");//your c++ library
    }
    public native void jniCrashlyticsInit();

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        jniCrashlyticsInit();
    }
}

之后您可以在 C++ 代码中使用 firebase::crashlytics::Log(msg)。