如何在Android中强制触发NDK崩溃以测试Firebase Crashlytics?
触发NDK崩溃以测试Crashlytics的方法
以下是几种可靠的触发NDK原生崩溃的方式,用于验证Crashlytics的NDK报告功能:
方法一:编写JNI代码触发原生崩溃
通过在C/C++层编写会导致崩溃的逻辑,再从Java层调用该方法:
- 在你的JNI源文件(如
native-lib.cpp)中添加触发崩溃的函数:
#include <jni.h> extern "C" JNIEXPORT void JNICALL Java_com_yourpackage_YourActivity_triggerNativeCrash(JNIEnv* env, jobject thiz) { // 方式1:访问空指针触发崩溃 int* nullPtr = nullptr; *nullPtr = 10; // 方式2:除以零触发崩溃(可替换上方代码) // int zero = 0; // int result = 10 / zero; }
- 在对应的Android Activity中声明并调用该Native方法:
public class YourActivity extends AppCompatActivity { // 声明Native方法 native void triggerNativeCrash(); static { // 加载你的Native库,替换为实际库名 System.loadLibrary("native-lib"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 添加按钮点击事件触发崩溃 findViewById(R.id.btn_trigger_crash).setOnClickListener(v -> triggerNativeCrash()); } }
- 编译运行应用,点击对应按钮即可触发NDK崩溃。
方法二:使用Crashlytics官方Native API触发崩溃
Crashlytics提供了原生API直接触发测试崩溃,步骤如下:
- 在JNI源文件中引入Crashlytics头文件并调用崩溃方法:
#include <jni.h> #include "firebase/crashlytics.h" extern "C" JNIEXPORT void JNICALL Java_com_yourpackage_YourActivity_triggerCrashlyticsNativeCrash(JNIEnv* env, jobject thiz) { // 调用Crashlytics官方API触发崩溃 firebase::crashlytics::Crash(); }
- 同样在Java层声明并通过点击事件调用该方法,运行后即可触发崩溃。
注意事项
- 崩溃触发后,需要重启应用才能让Crashlytics上传崩溃报告
- Crashlytics控制台可能需要1-5分钟才能显示新的崩溃记录
- 若使用release包测试,需确保已将Native符号文件正确上传到Firebase
内容的提问来源于stack exchange,提问作者hrishikesh rajwade
相关产品推荐
相关产品推荐

