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)。
我遵循了此处列出的所有步骤: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)。