2012-03-17 18 views
16

¿Alguien está usando Google Breakpad para el código nativo de Android (NDK)?Usando Google Breakpad para Android NDK?

Si es así, ¿podría detallar cómo ponerlo en funcionamiento (el lado del cliente). Los documentos son muy limitados y no mencionan a Android en absoluto. El sistema de compilación contiene información de Android que me hace pensar que no debería ser un problema.

+0

¿Puede funcionar en Android, ya que no admite el manejo de excepciones C++? ¡Me encantaría si funciona! – Cipi

+0

Soporta el manejo de Excepción de C++ también –

+0

Puedo construir el cliente copiando el android/google_breakpad/Android.mk en la raíz del código fuente del código fuente de google, editando para eliminar el ../ .. del archivo .mk y poniendo todo en mi directorio NDK_MODULES, pero no puedo construir las herramientas de host para realmente darle sentido al mini volcado, al menos no usando cygwin. –

Respuesta

8

Lo siento, hice el puerto inicial pero realmente no documenté nada. Sin embargo, uno de los ingenieros Chrome hizo algunos trabajos en el puerto y escribió un muy buen README: https://chromium.googlesource.com/breakpad/breakpad/+/master/README.ANDROID

También hay un archivo Android.mk compatible con NDK allí ahora, por lo que si usted está utilizando el estándar NDK construir sistema debería ser simple incorporar Breakpad.

1

También encontré una buena example project para eso. Como lo es en el proyecto puede configurar Google Breakpad gustan:

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

en el lado CPP y al igual que:

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

en el lado de Java.

Después de eso la implementación de la función bool DumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* context, bool succeeded) podrá hacer algo antes de que la aplicación falle.

He experimentado y también encontré this problema que me confirma, que en esta función no se pueden hacer devoluciones de llamada de java bajo ART justo debajo de DVM (antes de Android 5 - Lollipop).