18

Androidネイティブコード(NDK)用のGoogle Breakpadを使用している人はいますか?

もしそうなら、それを起動して実行する方法(つまりクライアント側)について詳しく説明していただけますか?ドキュメントは非常に限られており、Androidについてはまったく触れていません。ビルドシステムにはAndroidの情報が含まれていますが、問題はないと思います。

4

3 に答える 3

9

申し訳ありませんが、最初の移植は行いましたが、実際には何も文書化していませんでした。ただし、Chrome のエンジニアの 1 人が移植についていくつかの作業を行い、非常に優れた README を作成しました: https://chromium.googlesource.com/breakpad/breakpad/+/master/README.ANDROID

現在、NDK 互換の Android.mk ファイルも含まれているため、標準の NDK ビルド システムを使用している場合は、Breakpad を簡単に組み込むことができます。

于 2012-09-25T00:46:54.967 に答える
1

そのための良いサンプルプロジェクトも見つけました。プロジェクトにあるように、次のように 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)関数を実装すると、アプリがクラッシュする前に何かを実行できるようになります。

私はこの問題を経験し、発見しました。これは、この関数では、DVM のすぐ下 (Android 5 - Lollipop より前) の ART で Java コールバックを実行できないことを確認しています。

于 2016-03-04T08:53:29.267 に答える