From 820158e65067169632091b53d9eda61b551a9caa Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 10 Apr 2025 14:23:11 +0800 Subject: [PATCH] =?UTF-8?q?breakpad=E7=9A=84=E9=9B=86=E6=88=90=E5=87=86?= =?UTF-8?q?=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/CMakeLists.txt | 55 +++------------------------------ app/src/main/cpp/MicroPhoto.cpp | 25 ++++++++++++--- 2 files changed, 25 insertions(+), 55 deletions(-) diff --git a/app/src/main/cpp/CMakeLists.txt b/app/src/main/cpp/CMakeLists.txt index f1f42fb9..bea448c5 100644 --- a/app/src/main/cpp/CMakeLists.txt +++ b/app/src/main/cpp/CMakeLists.txt @@ -28,7 +28,7 @@ endif() add_definitions(-DOUTPUT_DBG_INFO) # OUTPUT_SOCKET_DBG_INFO Depends ON OUTPUT_DBG_INFO # TerminalService.cpp -add_definitions(-DOUTPUT_SOCKET_DBG_INFO) +# add_definitions(-DOUTPUT_SOCKET_DBG_INFO) # OUTPUT_DB_DBG_INFO Depends ON OUTPUT_DBG_INFO # Database.cpp # add_definitions(-DOUTPUT_DB_DBG_INFO) @@ -95,6 +95,8 @@ set(ncnn_DIR ${NCNN_ROOT}/${ANDROID_ABI}/lib/cmake/ncnn) find_package(ncnn REQUIRED) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/breakpad) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/libcutils/include) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/libutils/include) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/img_utils/include) @@ -187,8 +189,6 @@ SET(YAMC_INC_DIR ${CMAKE_SOURCE_DIR}) SET(JSONCPP_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/jsoncpp) SET(JSONCPP_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/jsoncpp/include) -SET(BREAKPAD_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/breakpad) - SET(CAMERA2_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/camera2) SET(FREETYPE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/freetype) @@ -196,7 +196,6 @@ SET(FREETYPE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/freetype) # SET(EVPP_SRC_DIR ${EVPP_ROOT}/evpp) include_directories(${YAMC_INC_DIR}) -include_directories(${BREAKPAD_ROOT} ${BREAKPAD_ROOT}/common/android/include) include_directories(${ASIO_ROOT}/include) # SET(SQLITE_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sqlite) @@ -204,52 +203,6 @@ include_directories(${ASIO_ROOT}/include) # add_library(sqlite3 STATIC ${SQLITE_SRC_DIR}/sqlite3.c ) # INCLUDE_DIRECTORIES(${SQLITE_INCLUDE_DIR}) -file(GLOB BREAKPAD_SOURCES_COMMON - native-lib.cpp - ${BREAKPAD_ROOT}/client/linux/crash_generation/crash_generation_client.cc - ${BREAKPAD_ROOT}/client/linux/dump_writer_common/thread_info.cc - ${BREAKPAD_ROOT}/client/linux/dump_writer_common/ucontext_reader.cc - ${BREAKPAD_ROOT}/client/linux/handler/exception_handler.cc - ${BREAKPAD_ROOT}/client/linux/handler/minidump_descriptor.cc - ${BREAKPAD_ROOT}/client/linux/log/log.cc - ${BREAKPAD_ROOT}/client/linux/microdump_writer/microdump_writer.cc - ${BREAKPAD_ROOT}/client/linux/minidump_writer/linux_dumper.cc - ${BREAKPAD_ROOT}/client/linux/minidump_writer/linux_ptrace_dumper.cc - ${BREAKPAD_ROOT}/client/linux/minidump_writer/minidump_writer.cc - ${BREAKPAD_ROOT}/client/linux/minidump_writer/pe_file.cc - ${BREAKPAD_ROOT}/client/minidump_file_writer.cc - ${BREAKPAD_ROOT}/common/convert_UTF.cc - ${BREAKPAD_ROOT}/common/md5.cc - ${BREAKPAD_ROOT}/common/string_conversion.cc - ${BREAKPAD_ROOT}/common/linux/elfutils.cc - ${BREAKPAD_ROOT}/common/linux/file_id.cc - ${BREAKPAD_ROOT}/common/linux/guid_creator.cc - ${BREAKPAD_ROOT}/common/linux/linux_libc_support.cc - ${BREAKPAD_ROOT}/common/linux/memory_mapped_file.cc - ${BREAKPAD_ROOT}/common/linux/safe_readlink.cc - ) - -file(GLOB BREAKPAD_ASM_SOURCE ${BREAKPAD_ROOT}/common/linux/breakpad_getcontext.S) -set_property(SOURCE ${BREAKPAD_ROOT}/common/linux/breakpad_getcontext.S PROPERTY LANGUAGE C) -# set_source_files_properties(${BREAKPAD_ASM_SOURCE} PROPERTIES LANGUAGE C) - -# Creates and names a library, sets it as either STATIC -# or SHARED, and provides the relative paths to its source code. -# You can define multiple libraries, and CMake builds them for you. -# Gradle automatically packages shared libraries with your APK. - -add_library( # Sets the name of the library. - breakpad - - # Sets the library as a shared library. - STATIC - - # Provides a relative path to your source file(s). - ${BREAKPAD_SOURCES_COMMON} - ${BREAKPAD_ASM_SOURCE} - ) - - INCLUDE_DIRECTORIES(${JSONCPP_INCLUDE_DIR}) SET(PUBLIC_HEADERS @@ -477,7 +430,7 @@ target_link_libraries( # Specifies the target library. ${PROJECT_NAME} jsoncpp freetype - # breakpad + breakpad # Links the target library to the log library # included in the NDK. avcodec avfilter avformat avutil swresample swscale x264 diff --git a/app/src/main/cpp/MicroPhoto.cpp b/app/src/main/cpp/MicroPhoto.cpp index ab2e7ae8..e16d8bb2 100644 --- a/app/src/main/cpp/MicroPhoto.cpp +++ b/app/src/main/cpp/MicroPhoto.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include "PhoneDevice.h" @@ -19,8 +20,8 @@ #endif #ifdef USING_BREAK_PAD -#include "client/linux/handler/exception_handler.h" -#include "client/linux/handler/minidump_descriptor.h" +#include +#include #endif #ifdef USING_MQTT @@ -40,6 +41,7 @@ extern "C" { #include "GPIOControl.h" #ifdef USING_BREAK_PAD +static google_breakpad::ExceptionHandler* g_breakpad_handler = nullptr; bool DumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* context, bool succeeded) { @@ -217,8 +219,15 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved) } #ifdef USING_BREAK_PAD - google_breakpad::MinidumpDescriptor descriptor("/sdcard/Android/data/com.xypower.mpapp/files/logs/"); - google_breakpad::ExceptionHandler eh(descriptor, NULL, DumpCallback, NULL, true, -1); + google_breakpad::MinidumpDescriptor descriptor("/sdcard/com.xypower.mpapp/logs/"); + g_breakpad_handler = new google_breakpad::ExceptionHandler( + descriptor, + nullptr, // Filter callback + DumpCallback, // Minidump callback + nullptr, // Context + true, // Install handlers + -1 // Server FD (not used) + ); #endif #if 0 @@ -277,6 +286,14 @@ JNIEXPORT void JNICALL JNI_OnUnload(JavaVM* vm, void* reserved) // av_register_all(); avformat_network_deinit(); #endif + +#ifdef USING_BREAKPAD + // Clean up breakpad handler + if (g_breakpad_handler) { + delete g_breakpad_handler; + g_breakpad_handler = nullptr; + } +#endif } bool GetJniEnv(JavaVM *vm, JNIEnv **env, bool& didAttachThread)