Использование Google Breakpad для Android NDK? - программирование
Подтвердить что ты не робот

Использование Google Breakpad для Android NDK?

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Я также нашел хороший примерный проект. Как и в проекте, вы можете настроить 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).