gpt4 book ai didi

android - 在 Android Studio 中调试动态加载的 native 库?

转载 作者:行者123 更新时间:2023-12-01 14:18:51 24 4
gpt4 key购买 nike

我有一个看起来像这样的项目:

- project
- app
- src.../cpp/
- src.../java/
- other modules...

cpp代码是在build.gradle中使用cmake构建的:

externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}

buildTypes {
...
debug {
debuggable true
jniDebuggable true
externalNativeBuild {
cmake {
arguments "-DCMAKE_BUILD_TYPE=Debug"
abiFilters "armeabi-v7a", "armeabi", "x86"
}
}
}
}

productFlavors {
...
experimental {
externalNativeBuild {
cmake {
targets "sqlite_gcd_func"
}
}
}
}

其中 CMakeLists.txt 是:

cmake_minimum_required(VERSION 3.6)

add_library( # Specifies the name of the library.
sqlite_gcd_func
# Sets the library as a shared library.
MODULE
# Provides a relative path to your source file(s).
src/Experimental/cpp/GreatCircleDistance.cpp )
# Specifies a path to native header files.
include_directories(src/Experimental/cpp/include/)

生成的 .so 库通过 SQL 作为扩展加载到 SQLite 中:

Select load_extension('libsqlite_gcd_func', null)

之后库中定义的函数可用于 SQL 查询。

一切正常。

调试不起作用; CPP 代码中设置的断点不会触发。

我假设这是因为代码是在运行时动态加载的;我还尝试通过以下方式直接使用 java 加载模块:

java.lang.System.loadLibrary("sqlite_gcd_func");

但是断点还是不行。

我对 lldb 的了解很少;我假设我需要告诉它加载的模块(通过 lldb 中的“图像列表”可见)是一个已知模块,但不知道该怎么做(如果这甚至是问题的话)。

如果您能协助我告诉 gradle/lldb/Android Studio 如何调试此代码,我们将不胜感激!

编辑:

我已经创建了一个具有类似设置的更简单的项目,并且它是可调试的。在不可调试的情况下,当我进入 lldb 并运行“图像列表”时,有问题的 .so 显示为:

C:\Users\ME\.lldb\module_cache\remote-android\.cache\8D1C60AA-E947-56CA-CBA5-0AA7A46B955E-73E37532\libname.so

(即看起来像是从 AVD 复制的版本)。

而在我可以调试的那个中,它显示在:

C:\...\project\app\build\intermediates\cmake\debug\obj\x86\libname.so

即。构建区域中的实际库。

出于某种原因,lldb 似乎没有使用本地应用程序版本。

知道是什么原因造成的吗?

最佳答案

事实证明这是由于 AS 中的一个旧错误。显然,在过去,IML 文件中“native-android-gradle”部分中的“SELECTED_BUILD_VARIANT”可能会与实际选择的风格不一致。这导致无法加载.so 文件。

更正后,该值似乎现在仍然是最新的,以下是(现已修复)错误讨论的链接:

https://issuetracker.google.com/issues/37114841

据我所知,项目同步可能也可以解决问题(对我来说不是)。

关于android - 在 Android Studio 中调试动态加载的 native 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43570825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com