帖子

[官方问题解答] 【官网】android 错误码21001, 21002, 20021, 创建单例返回 null

 关闭 [复制链接]

该用户从未签到

2855012  楼主| jlyan 发表于 2015-3-16 16:17:33 1#
21001,21002, 20021, 创建单例返回 null 原因:
1、没有使用SpeechUtility.createUtility()设置appid
2、没有将libmsc.so放到工程中
3、如果使用的是讯飞语音+的本地功能,没有安装讯飞语音+
4、是否工程的 lib 目录中,有多个 ABI 的文件夹,但部份文件夹中,没有 libmsc.so。(现象为,部份手机上正常运行,但在部份CPU不同的手机上,报21001) 在Android dvm 加载 so 时,将优先加载与设备的 ABI 最匹配(primary ABI) lib 目录下的 so 文件(如在64位的ARM的手机上,且APK中存在 /lib/arm64-v8a 文件夹,则将优先加载此目录下的 so,而不再加载 /lib/armeabi 下的 so ),如果没有最匹配的 lib 目录,则加载第二匹配(secondary-abi)的lib目录下的so文件(如在64位的 ARM 的手机上,若 APK 无 /lib/arm64-v8a 文件夹 ,将加载 lib/armeabi 目录下的 so 文件)。 不同 ABI 的下的 so 无法共同,即把 armeabi 的库,放在 arm64-v8a 下,是没有意义的。 关于 so 加载的更多细节,请参考 谷歌 关于 Android NDK 的《NDK Programmer's Guide》文档。  
5、SpeechUtility.createUtility()如在Application中调用,需要在Mainifest中注册该Applicaiton。此方法不是必须在Appcation中调用,可在需要使用语音能力之前,例如进入语音搜索页面调用。
6、使用Android Studio的开发者注意将so放在jniLibs目录下,或者在配置文件中指定so加载的路径。7、使用的 libmsc.so 并不包含对应的功能——下载的不是对应功能的SDK包。








评分

参与人数 2语点 +3 收起 理由
13687691587 -1 还是不管用啊
liumaoqiang + 4

查看全部评分

小西哥 发表于 2015-3-16 16:18:40
2#
非常给力,顶一个!
使用道具 举报 回复
fenghua__1314 发表于 2015-3-16 16:45:47
3#
大赞,石头哥
使用道具 举报 回复
栗子讲究 发表于 2015-3-17 11:06:38
4#
{:soso_e192:}{:soso_e192:}{:soso_e192:}{:soso_e192:}{:soso_e192:}
使用道具 举报 回复
eviluess@qq.com 发表于 2015-3-29 23:45:34
5#
眼神不好,没有看到libs里还有个so,所以就fail了^^
使用道具 举报 回复
JiangPQ 发表于 2015-4-2 17:39:23
6#
求助!
语音+已安装了,离线资源已下载了
在application的oncreat调用了createutility,传了appid
在lib里添加了so文件和msc.jar

可是复制demo里的代码自己写的demo就会报错21001?


还有,我自己写的bnf是指这样子的,可是替换到官方demo里就会提示20005,总是无法识别
#BNF+IAT 1.0 UTF-8;
!grammar control;
!start <controlStart>;
!slot <action>;
!slot <control>;
!slot <object>;

<action>:起飞|降落|上升|下降|向前|向后|向左|向右|停止;
<control>:开启|关闭;
<object>:视频|蓝牙|飞行;

<controlStart>:<action>|<control><object>;


使用道具 举报 回复
小西哥 发表于 2015-4-3 08:39:23
7#
请参照Demo中SpeechApp类进行初始化。
// 设置使用v5+
param.append(SpeechConstant.ENGINE_MODE+"="+SpeechConstant.MODE_MSC);
使用道具 举报 回复
280858862@qq.co 发表于 2015-4-3 20:30:19
8#
如果使用的android studio,则需要在 gradle里指明 libmsc.so文件,具体怎么指明请百度。我用android studio就是遇到了这个问题  ,感谢群里的一位大神给我指出了原因,特别在这里提出来,以方便使用Android studio IDE的后来人.
使用道具 举报 回复
JiangPQ 发表于 2015-4-3 22:53:59
9#
280858862@qq.co 发表于 2015-4-3 20:30
如果使用的android studio,则需要在 gradle里指明 libmsc.so文件,具体怎么指明请百度。我用android studi ...

感谢回复!我有加那个官方2群
也看到了您的提问和解决~
不过可惜我是Eclipse...
感谢您的分享精神
使用道具 举报 回复
JiangPQ 发表于 2015-4-3 23:08:00
10#
JiangPQ 发表于 2015-4-2 17:39
求助!
语音+已安装了,离线资源已下载了
在application的oncreat调用了createutility,传了appid

20005错误已解决,参见官方demo里的notice...
使用道具 举报 回复