对比了下native 函数传参返回值 ,看起来没错,但就是报没找到native函数,但是用历史遗留已经Build出来的apk就没有这个问题。
所以问题应该出现在apk的mk 文件里面。
后来搜索E/dalvikvm( 2456): ERROR: couldn’t find native method的关键字找到了解决方法:
在mk文件里面加入这一行:LOCAL_PROGUARD_ENABLED := disabled
如果没加的话就会混淆代码进行优化,可能导致native文件找不到而出现问题。
2016_12_26_14_43_37:I/ ( 345): Mic: loading JNI
2016_12_26_14_43_37:E/dalvikvm( 345): ERROR: couldn't find native method
2016_12_26_14_43_37:E/dalvikvm( 345): Requested: Lcom/autochips/mic/Mic;.nativeMicSet3GSimDet:(I)Z
2016_12_26_14_43_37:E/JNIHelp ( 345): RegisterNatives failed for 'com/autochips/mic/Mic', aborting
LOCAL_PROGUARD_ENABLED
默认是打开的,不特别指定的话,就是起作用的,就可能做优化。这个功能让我想起来了,很早以前做很底层寄存器操作的时候,要加上volitate 来防止编译器做优化一样。
参考博客文章:http://blog.youkuaiyun.com/edsam49/article/details/36466197?utm_source=tuicool&utm_medium=referral