2012-03-17 43 views
16

是否有人對Android本機代碼(NDK)使用Google Breakpad使用適用於Android NDK的Google Breakpad?

如果是這樣,你可否詳細說明如何啓動並運行(即客戶端)。 文檔非常有限,完全沒有提及Android。構建系統包含android信息,雖然這使我認爲它不應該是一個問題。

+0

它可以在Android上工作,但它不支持C++異常處理?我會喜歡它,如果它的工作! – Cipi 2012-07-13 16:37:27

+0

它確實支持C++異常處理 – 2012-07-17 15:49:45

+0

我可以通過將android/google_breakpad/Android.mk複製到google breakpad源的根目錄下進行編譯,從.mk文件中刪除../ ..並將其放入它都在我的NDK_MODULES目錄中,但不能構建主機工具來真正理解迷你轉儲,至少不使用cygwin。 – 2012-07-19 20:39:05

回答

8

對不起,我做了初始端口,但我沒有真正記錄任何東西。但是,鉻的一位工程師做了一些移植工作,並寫了一個非常好的自述: https://chromium.googlesource.com/breakpad/breakpad/+/master/README.ANDROID

還有在那裏的NDK兼容Android.mk文件現在,如果你正在使用標準的NDK編譯系統,它應該很容易納入Breakpad。

1

我還發現一個很好的example project。 因爲它是你可以設置谷歌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)函數之後,您將能夠在應用程序崩潰之前執行某些操作。

我經歷過,也發現this問題,這證實了我,在這個函數中,你不能在ART下正好在DVM(在android 5 - Lollipop之前)下做java回調。