如何让 Android Studio 构建原生库的调试版本?

How do I get Android Studio to build a debug version of my native library?

提问人:jcday 提问时间:7/26/2023 最后编辑:jcday 更新时间:7/27/2023 访问量:12

问:

我已将库从 Visual Studio 转换为 Android Studio,并将其从 Visual Studio 的解决方案文件移动到 CMake 的 CMakeLists.txt 文件。目前为止,一切都好。转换后的构建系统可以工作,但据我所知,它只构建了一个发布版本。

(当我在 C++ 代码中设置断点时,它会忽略它。当我在 Java 中设置断点时,代码会正确停止,但是当我到达 C++ 代码时,我只得到汇编,而不是 C++ 源代码。

当我选择在Android Studio中以调试模式运行程序时,我需要CMake构建库的调试版本,并为发布模式构建一个符号剥离版本。我相信它目前正在做后者(尽管如果有人能证实这一点会很棒),但我需要知道如何哄骗它也做前者。

在 StackOverflow 上提出了一个相关的问题,但这似乎是关于包含发布与调试库而不是构建一个。

以下是 CMakeLists.txt 的相关部分:

    set(ALL_FILES
            ${no_group_source_files}
            ${Header_Files__AppCommonsrc}
            ${Header_Files__commonsrc}
            ${Source_Files__AppCommonsrc}
            ${Source_Files__commonsrc}
    )

    add_library(
         NativeTools

         SHARED

         ${ALL_FILES} )

     find_library(
          log-lib

          log )

    set(MY_DEBUG_OPTIONS "-g2;-gdwarf-2;-O0;-fno-rtti;-fno-omit-frame-pointer;-mthumb;-fexceptions;-mfloat-abi=softfp;-fno-short-enums")
    set(MY_RELEASE_OPTIONS "-gline-tables-only;-O3;-fno-rtti;-fomit-frame-pointer;-fdata-sections;-mthumb;-fexceptions;-fno-short-enums")

    target_compile_options(${PROJECT_NAME} PUBLIC "$<$<CONFIG:DEBUG>:${MY_DEBUG_OPTIONS}>")
    target_compile_options(${PROJECT_NAME} PUBLIC "$<$<CONFIG:RELEASE>:${MY_RELEASE_OPTIONS}>")

    if("${ANDROID_ABI}" STREQUAL "armeabi-v7a")
        set(ADDITIONAL_LIBRARY_DEPENDENCIES
                "../common/openssl/Android/openssl/libcrypto.a;"
                "../common/openssl/Android/openssl/libssl.a"
                )
    elseif("${ANDROID_ABI}" STREQUAL "arm64-v8a")
        set(ADDITIONAL_LIBRARY_DEPENDENCIES
                "../common/openssl/Android64/openssl/libcrypto.a;"
                "../common/openssl/Android64/openssl/libssl.a"
                )
    elseif("${ANDROID_ABI}" STREQUAL "x86_64")
        set(ADDITIONAL_LIBRARY_DEPENDENCIES
                "../common/openssl/Androidx64/openssl/libcrypto.a;"
                "../common/openssl/Androidx64/openssl/libssl.a"
                )
    elseif("${ANDROID_ABI}" STREQUAL "x86")
        set(ADDITIONAL_LIBRARY_DEPENDENCIES
                "../common/openssl/Androidx86/openssl/libcrypto.a;"
                "../common/openssl/Androidx86/openssl/libssl.a"
                )
    endif()
    target_link_libraries(${PROJECT_NAME} PUBLIC "${ADDITIONAL_LIBRARY_DEPENDENCIES}" ${log-lib})
android-studio 调试 cmake

评论


答: 暂无答案