安卓JNI 调用第三方库的时候 不能加载so文件
so文件已经编译完成,好像就是不能调用,然后再app上也是闪退。
错误代码
08-20 10:50:26.094 32261-32261/com.jour.st.use_dsf E/AndroidRuntime﹕
FATAL EXCEPTION: main
Process: com.jour.st.use_dsf, PID: 32261
java.lang.UnsatisfiedLinkError: Couldn't load test from loader
dalvik.system.PathClassLoader[DexPathList[[zip file
"/data/app/com.jour.st.use_dsf-2.apk"],nativeLibraryDirectories=
findLibrary returned null
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
解决了,MD,困扰了一天一夜!! @jk_v1 还有几个问题可以帮忙解决吗
我把so文件放在src/main/jinLibs 里面了,找了好多网页,尽然可以用!!!
还有就是那么libs文件,我都搞混了,
红色是自己生成的,蓝色是ndk-build生成的,黄色是最后加的,到底什么和什么关系啊
第一个问题:
从错误信息看,是.so文件找不到,load失败,还没到jni调用那一步。所以,确保你的.so文件已经放在libs目录下,并编译进了apk。你可以用压缩软件打开apk文件,看看里面是不是已经包含了.so文件。
把apk改名为zip打开也可以,不改直接unzip它或用图形压缩软件打开也可以,看里面的libs里有没有你说的libeigen.so。
另外,你的出错信息中说:
Couldn't load test from loader
貌似是Load一个叫libtest.so的库,而不是你说的eigen,请检查一下java中是不是这样的:
static {
这才是指定要加载libeigen.so,如果这个文件也在apk/libs下,应该是没问题的。
第二个问题:
使用Android studio的话,你直接把libxxxx.so放入jniLibs/armxxxxx/下就可以了,编译后就会自动帮你打包在apk里面,另外我看你app下有jni这个目录,应该是你自己创建的,这样在jni里执行了ndk-build后,会在app目录下产生两个临时文件夹libs和obj,这两个文件夹在Android Studio里面没用,因为Android studio不像eclipse那样把libs里的so打包到apk,而是默认使用了jniLibs目录。如果你非要让Android studio把app/libs的库打包到apk里,也是可以做到的,要自己编辑build.gradle文件来完成,怎么写build.gradle?这个已经超出本问题的范围了。