科大讯飞在5.0手机系统上报:本地语音引擎错误(20021,和科大论坛上的21001很类似),解决思路如下:
- 工程中压根就没有放so库。这种情况怎么解决就不多说了
- 混淆时没有-keep class com.iflytek.**{*;}。这种情况下有可能程序直接崩溃,而不会抛出21001,但是原理是类似的。就是SDK代码的混淆导致jni层中native方法名的混乱,从而导致在so库中找不到对应的方法,和so库没有找到(加载)的效果是一样的。
- 虽然工程中放了so库,但是如下图所示,部分文件夹下没有放置,从而导致部分手机上面可以运行,部分手机上面运行出现21001的情况。这个和Android的so库加载机制有关,不同的平台会使用不同平台对应的文件夹下的so库,如果某平台对应的文件夹里没有libmsc.so就会报错,如果某平台对应的文件夹不存在,系统会到armeabi文件夹中去找。注意:32位so和64位so是不能通用的目前,64位在线功能的的so以及上线,但是离线功能的还要过一段时间才能上线。
- 如果开发环境是Android Studio,那么你需要将so放在jniLibs目录下,或者在配置文件中指定so加载的路径。因为AS默认是从jniLibs目录加载so库的,这里有想详细了解的,可以自行百度一下。