錯誤描述:1,集成了百度語音SDK的應用通過 install 命令安裝不報so動態庫錯誤;
2,通過 adb push apk路徑 system/app 安裝,報無法加載so動態庫的錯誤。
百度語音識別錯誤:RecogEventAdapter: name:asr.finish; params:{"origin_result":{"sn":"","error":3,"desc":"VAD is not available","sub_error":3100},"error":3,"desc":"VAD is not available","sub_error":3100}
原因:方式1,應用會從apk安裝包中讀取so動態庫,拷貝到 data/app/packagename-1/lib/arm 目錄中,應用也會從這個路徑下讀取so動態庫。
方式2,百度語音SDK應用 同樣會從apk安裝包中讀取so動態庫,拷貝到 system/lib/apkName/目錄下,并讀取。但是 system 目錄是只讀的,因此不存在system/lib/apkName/的路徑,自然也不會有so動態庫,應用是讀取不到so動態庫的。
解決問題的關鍵:獲取動態庫加載路徑:String getApplicationInfo().nativeLibraryDir
解決辦法:使用將必須動態庫手動拷貝到相應目錄。下面以intelligencerobot-release.apk為例:
adb root
adb remount
adb push E:\AndroidStudioProjects\RobotGene\intelligencerobot\libs\armeabi\libBaiduSpeechSDK.so system/lib/intelligencerobot-release/
.....(拷貝必須動態庫)
adb push E:\AndroidStudioProjects\RobotGene\apk\release\intelligencerobot-release.apk system/app/
adb reboot
另外附上其他相類似的問題解決方法,以供參考:
1,Android應用push到/system/app/后so庫不能加載:http://blog.csdn.net/feiniao8651/article/details/73387152
2,將第三方apk變成系統apk:http://blog.51cto.com/670176656/1608687
3,Android模擬器, push文件到system下文件夾權限,空間,SO文件沒有自動安裝的問題:https://www.mobibrw.com/2015/2370