科大訊飛語音引擎錯誤20021或者21001

科大訊飛在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以及上線,但是離線功能的還要過一段時間才能上線。

    QQ圖片20151****50331.png (3.73 KB, 下載次數: 17)

    下載附件

    2015-10-12 15:04 上傳

  • 如果開發環境是Android Studio,那麼你需要將so放在jniLibs目錄下,或者在配置文件中指定so加載的路徑。因爲AS默認是從jniLibs目錄加載so庫的,這裏有想詳細瞭解的,可以自行百度一下。
             如果你的目錄不是jniLibs,那麼需要在gradle中指定so加載的路徑如下:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章