Androidネイティブコード(NDK)用のGoogle Breakpadを使用している人はいますか?
もしそうなら、それを起動して実行する方法(つまりクライアント側)について詳しく説明していただけますか?ドキュメントは非常に限られており、Androidについてはまったく触れていません。ビルドシステムにはAndroidの情報が含まれていますが、問題はないと思います。
Androidネイティブコード(NDK)用のGoogle Breakpadを使用している人はいますか?
もしそうなら、それを起動して実行する方法(つまりクライアント側)について詳しく説明していただけますか?ドキュメントは非常に限られており、Androidについてはまったく触れていません。ビルドシステムにはAndroidの情報が含まれていますが、問題はないと思います。
申し訳ありませんが、最初の移植は行いましたが、実際には何も文書化していませんでした。ただし、Chrome のエンジニアの 1 人が移植についていくつかの作業を行い、非常に優れた README を作成しました: https://chromium.googlesource.com/breakpad/breakpad/+/master/README.ANDROID
現在、NDK 互換の Android.mk ファイルも含まれているため、標準の NDK ビルド システムを使用している場合は、Breakpad を簡単に組み込むことができます。
そのための良いサンプルプロジェクトも見つけました。プロジェクトにあるように、次のように 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 コールバックを実行できないことを確認しています。