Android 应用程序在哪里搜索要加载的共享 .so 文件?

Where does an Android app search for shared .so files to load?

为了让这更复杂一些,我将使用 ndk 和 cmake 编译的本机库加载到 Unity 中,它将部署在 Android 上。这一切都很好,直到我想 link 另一个共享库到我正在构建的库。现在我的库无法加载,我相信这是因为它找不到新的共享库。我可以说新的共享库可以独立运行,因为我在另一个 NDK 项目中使用它。

我看到 Unity 将新的 .so 库复制到应用程序安装目录,并将其与我的原始库一起放在 /data/appname/lib/arm64 目录中。我也曾尝试在 /system/lib64 中安装该库,但没有成功。我在没有新共享库的情况下编译了我的库并且它可以工作,然后只修改了 cmake 以将其添加回去,我的库将不再加载。我还对它进行了 objdump 以确保它是 x64 以及导出符号以防它被损坏。所以我想知道,有没有办法找出我的库文件在哪里?

这就是我在 CmakeList.txt

中包含新共享库的方式
add_library(libusb SHARED IMPORTED)
set_target_properties(libusb PROPERTIES IMPORTED_LOCATION D:/projects/arm64-v8a/libusb1.0.so) 

其中 D:\projects\arm64-v8a 是库文件在我的构建机器上的位置。我想知道这是不是把事情搞砸了。但是我在我的 Android studio Cmake 项目中使用了相同的语法,我可以访问该库,但我确信这在某种程度上有所不同。任何帮助总是感激。

谢谢

它将在您应用的 lib/[platform-abi] 目录中查找。但是有一个使用预建库的步骤列表: https://developer.android.com/ndk/guides/prebuilts 你检查过那些了吗?

导入的库可能有自己的依赖项,也必须将其复制到您的 APK(或 AAR)中。 , 运行 objdump -p libusb1.so | findstr "NEEDED".