之前将以前使用Eclipse的项目移植到Android Studio上(这个项目使用了JNI,也就会用到so库,Java调用C代码),之后使用三星5.1系统的手机进行测试,一切都正常,但是今年又做了一个相关的SDK,这就免不了在各种手机上进行测试,当我使用魅蓝5.0系统的手机进行测试时,直接就闪退。脑子里不禁发出困惑What are you 弄啥嘞?
遇到问题第一时间肯定是打开控制台看一下log,控制台的log显示java.lang.UnsatisfiedLinkError: No implementation found for int XXXXXXXXXX......,从字面的意思就能看出这是有的方法没有实现导致的啊,直接找到XXXXXXXX所代表的方法,一看这是用Java定义的方法,映射调用底层C代码。一看这几个Java方法下边有红色的波浪线,鼠标放在上边显示找不到方法(记不清了 反正是error),直接在百度上搜索一下找到解决方法settings--Plugins--Android NDK Support取消勾选,gradle一下马上就不报错了,乐呵呵的运行了程序跑到手机上,眼前一闪屏幕上显示,程序已崩溃....,一看log还是这个问题,马上上网搜索相应的解决方式,找到几种解决方式,比如cpp文件加extern "C"{};c++中的方法Java_xxx_xxx 中的Java 首字母一定要大写啊;什么c++中的定义的方法的路径一定和Java中所映射的方法路径一致啊等等等,都相应的试了一下,然而并没有什么用。
就这样整整弄了几个小时都没有解决这个问题,以至于午餐时间都没有好好的享用,最后我就在考虑在三星的5.1系统上可以正常使用,为什么在魅蓝5.0系统就不行呢?不同的厂商对安卓原生系统都进行了深度定制,那是不是魅族5.0系统将底层文件进行了阉割呢?带着这个疑问我将魅蓝5.0系统进行在线升级,就这样等啊等啊等...终于升级完成,马上跑了一下,正常运行。嘴角不禁上扬哈哈哈....
在这个bug中,也找到了一下相应的解决办法,可能解决你遇到的问题就在这些方式中,下面我把对应的连接给大家。
完全利用上班的时间一个字一个字敲的,希望对大家有帮助。