Используете Google Breakpad для Android NDK? - PullRequest
17 голосов
/ 17 марта 2012

Кто-нибудь использует Google Breakpad для собственного кода Android (NDK)?

Если это так, не могли бы вы рассказать, как его запустить и запустить (на стороне клиента).Документы очень ограничены и вообще не упоминают Android.Система сборки содержит информацию об Android, что заставляет меня думать, что это не должно быть проблемой.

Ответы [ 2 ]

8 голосов
/ 25 сентября 2012

Извините, я сделал начальный порт, но ничего не задокументировал.Однако один из инженеров Chrome немного поработал над портом и написал действительно хороший README: https://chromium.googlesource.com/breakpad/breakpad/+/master/README.ANDROID

Там также есть файл Android.mk, совместимый с NDK, так что если вы используетеСтандартная система сборки NDK должна включать в себя Breakpad.

1 голос
/ 04 марта 2016

Я также нашел хороший пример проекта для этого.Как и в проекте, вы можете настроить Google Breakpad, например:

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);
    }
}

на стороне cpp и как:

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

на стороне java.

После этого, реализовав функцию bool DumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* context, bool succeeded), вы сможете что-то сделать до сбоя приложения.

Я испытал и также обнаружил эту проблему, которая подтверждает мне, что в этой функции вы не можете выполнять обратные вызовы Java под ART только под DVM (до android 5 - Lollipop).

...