我有一个项目,其中包括一个sample app
,以及一个我们称为我创建的sdk
的模块,当所有模块都包含在内时,我最终将其打包为.aar
文件完成。 sample app
告诉sdk
运行服务。此服务需要使用已打包为.jar
文件(包括.so
文件)的外部库。问题是,每次尝试加载库时,都会收到一个不满意的链接错误,指出.so
文件不存在,因此无法打开该库。我不太确定我是否将所有内容都放置在正确的位置,如错误所述。如果我错过了一步,我希望有人可以帮助我指出正确的方向。下面,我将显示项目的文件结构以及尝试打开库的操作。
文件结构
`- MY PROJECT
- My Sample App (com.mine.mysampleapp)
- build
- src...etc
- SDK (separate module) (com.mine.mysamplesdk)
- build
- libs
- my-lib.jar
- assets
- arm64-v8a
- my-lib.so
- armeabi-v7a
- my-lib.so
库加载代码
System.load(context.getFilesDir() + "/my-lib.so");
我不理解的是.so
文件位于sdk
内部,但错误消息:
dlopen failed: library "/data/user/0/com.mine.mysampleapp/files/my-lib.so" not found
表明它正在我的示例应用程序中寻找文件。
答案 0 :(得分:0)
如果您尝试打包为AAR,则它们已经内置了对JNI库的支持:https://www.codepool.biz/build-so-aar-android-studio.html
与其将库放置在资产目录中并尝试自行组装System.load
路径,不如将它们放置在该目录中,然后您可以System.loadLibrary("my-lib")
(请注意,System.loadLibrary
不会实际上不可以让您打开一个不带“ lib”前缀的库,因此您需要重命名该库才能使它起作用)。