Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Google Breakpad for Android NDK?

Is anyone using Google Breakpad for Android native code (NDK) ?

If so, could you elaborate on how to get it up and running (the client side that is). The docs are very limited and don't mention Android at all. The build system contains android information though which make me think it shouldn't be a problem.

like image 293
olafure Avatar asked Mar 17 '12 18:03

olafure


2 Answers

Sorry about that, I did the initial port but I didn't really document anything. However, one of the Chrome engineers did some work on the port and wrote a really nice README: https://chromium.googlesource.com/breakpad/breakpad/+/master/README.ANDROID

There's also an NDK-compatible Android.mk file in there now, so if you're using the standard NDK build system it should be simple to incorporate Breakpad.

like image 118
Ted Mielczarek Avatar answered Nov 16 '22 16:11

Ted Mielczarek


I also found a good example project for that. As it is in the project you can set up Google Breakpad like:

extern "C" {
    void Java_com_pluusystem_breakpadjavacall_MainActivity_initNative(JNIEnv* env, jobject obj, jstring filepath)
    {
        const char *path = env->GetStringUTFChars(filepath, 0);
        google_breakpad::MinidumpDescriptor descriptor(path);
        exceptionHandler = new google_breakpad::ExceptionHandler(descriptor, NULL, DumpCallback, NULL, true, -1);
    }
}

in the cpp side and like:

    // Save Dump Path
    initNative(getExternalCacheDir().getAbsolutePath());

in the java side.

After that implementing the bool DumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* context, bool succeeded) function you will be able to do something before the app crashes.

I have experienced and also found this issue which confirms me, that in this function you can't do java callbacks under ART just under DVM (before android 5 - Lollipop).

like image 1
bendaf Avatar answered Nov 16 '22 18:11

bendaf