【Android】使用native开发遇到的bug---java.lang.UnsatisfiedLinkError: No implementation found for

今晚终于解决了一个困扰我三天的bug,就是这个java.lang.UnsatisfiedLinkError: No implementation found for,感觉人生达到了巅峰,特此记录下…

前几天老师给我一个项目,让我实现一个将视频下载到本地的功能,顺便给了我一个demo,让我先看看demo里的代码,打开demo的工程文件,费了好大劲才编译通过(AndroidStudio导入项目各种问题),在手机上一运行发现居然全是韩文,尝试着瞎点了几下发现没法运行,demo应该和实验室项目一样是一个播放监控录像的APP,但是没有摄像头的IP地址和账号密码没法使用,只好硬着头皮去看代码,结果那demo代码乱的不行,根本没有分类,所有的类、活动全在一个包里,打开主界面一看,5000+行代码…

无语。。。。。。。。。。。。。

只好挑重点的看,在所有类里发现一个Download类,这应该就是下载视频所用到的类,打开一看果然,把代码里的韩文翻译过来正是–视频下载吗?–确定–取消,心下一喜,顺着代码往下看,发现代码非常简单,就是去调用Java的native方法,传入要下载的开始时间和结束时间就可以了,于是开始在实验室项目里写,写完以后发现实验室的专门放所有native方法的类里并没有demo里下载视频的方法,觉得有点奇怪,这些native方法应该都是从demo里copy到实验室项目里来的,怎么会没有?想了想可能是因为之前写实验室项目的人用不到下载视频的方法,就给删除了,然后我就自己加上了下载视频和停止下载视频的方法,虽然知道希望不大,但还是尝试着运行了一下,果然,点击下载APP就崩溃了,查看logcat里的报错并没有什么有用的信息,应该是因为在真机上调试,崩溃后自动重启,新的错误将之前的覆盖了,只好转到模拟器上运行,点击下载崩溃以后,logcat提示了这个bug

java.lang.UnsatisfiedLinkError: No implementation found for......

去百度找原因,发现大家的原因全都是没有导入需要的so文件,或者导入方法不对,我把能试的方法都试过了但是并没有解决
https://blog.csdn.net/dreamme1/article/details/50351007
于是只好从底层找原因,但是native方法都是运行在linux上的,没法查看,去网上查了查native方法和so文件
so文件:https://www.jianshu.com/p/cb15ba69fa89
native:https://blog.csdn.net/dj673344908/article/details/82461418
实验室项目的so文件只有一个,但我又不知道如何打开so文件,百度后了解到,要使用linux查看so文件,刚好前几天在做操作系统实验,电脑上还有linux虚拟机,将so文件导入到linux虚拟机后
使用 nm -D ***.so查看so文件里的接口,并没有下载视频时用到的那个方法。
好吧,这下问题不怪我了,是客户给的so文件有问题,到时候只好和老师这么说,觉得这个功能可能没法实现了。但是又总是不甘心,翻来覆去的想,demo里既然有下载视频的代码,总不可能跟我遇到的情况一样,一下载就闪退,那这个demo也太不合格了,然后开始佛学起来,把所有的参数都改了一下,发现demo里居然还有bug,本来开始时间和结束时间只相差1分钟,demo里计算出来的时间差居然多了一个月,那有没有可能是因为时间太长没法下载导致闪退呢,我把demo里的bug解决后,设置成只下载一分钟长度的视频,结果还是那个bug,依旧闪退,心灰意冷,打算关电脑上床睡觉,打算关掉linux虚拟机的时候忽然想到,会不会是demo里的so文件和实验室项目的so文件不一样,我打开demo的文件夹,找到so文件,大小是1755KB,然后打开实验室项目,找到so文件,发现大小是1740KB,居然是个阉割版的!!!!!
于是赶紧将demo里的so文件导入到linux虚拟机,用命令行打开后发现了下载视频时用到的函数,激动的不能自己,然后用demo里的so文件替换掉实验室项目里的so文件,rebuild后运行,logcat里不停的打印downloading…,程序也没有闪退,没一会就提示视频已下载到本地,激动的到文件夹一看,果然已经下载下来了,开心到爆炸!!!

		( •̀ ω •́ )耶!

你可能感兴趣的:(Android)