Unity 中使用百度语音识别发布Android程序(一)
2017-11-08 18:36
761 查看
最近开发的项目中需要使用语音识别的功能,国内有讯飞和百度两大平台,分别看了两家的文档后,决定使用百度语音识别功能。
百度语音没有Unity的sdk包,因此就需要使用百度的安卓sdk,在Android Studio中写好功能,导出jar包供Unity使用。
打开Android Studio,新建一个工程。
输入名称和包名后点击下一步,Minimun SDK 为最小支持的安卓sdk版本,选择后点击下一步,选择Empty Activity,点击下一步,名称默认就可以,然后点击Finish。
如果在控制台出现以下错误:
Error:Failed to open zip file.
Gradle’s dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
说明gradle依赖不能加载,你可以百度自行下载适合的gradle包,下载后解压。然后在Android Studio中点击File->Settings 如图,在Project-level settings 中选择use local gradle distribution然后选择下载好的gradle路径。
在项目名称上点击右键,选择新建一个Module,然后选择Android Library。
可以看到项目中多了一个文件夹baiduvoice,文件夹名为刚才创建Android Library时输入。下文中称这个新建的文件夹为Library。
要开发Unity可用的jar包,需要导入Unity提供的class.jar 文件。该文件在Unity安装路径下的Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes文件夹中,将该文件复制到baiduvoice/libs 文件夹中。
然后选择File->Project Structure,在Modules中选择刚才创建的Library,选择Dependencies,可以看到右边有加号,点击加号后选择第二个,然后找到刚才添加的class.jar。
在这个Library下新建一个class,这个class在src/main/java/…文件夹中,代码如下:
这个类为什么不继承UnityPlayerActivity,请参考这篇文章,这篇文章指出了在自己编写Unity中使用的安卓插件时,为什么不要继承UnityPlayerActivity。
接下来,修改Library文件夹下的build.gradle文件,将一下代码添加到文件后面。
点击界面右边的gradle,如图,选中Library点击右键,选择Refresh external project。然后点开下方的other,找到exportJar,双击,可以看到在Library下有了一个release文件夹,说明我们导出jar包成功了。
接下来,新建一个Unity工程,将刚才导出的jar包放到Unity工程中Plugins/Android文件夹下,此方法导出的jar包并不需要在Plugins/Android下添加AndroidManifest.xml文件,unity打包安卓时会自动添加。新建一个Test脚本,代码如下:
在场景中新建一个Canvas,并且添加一个Text, 将此脚本挂在Canvas上,为脚本的text赋值,发出安卓版本。如下图
如果在手机上显示出如下图片,则表示调用成功。
百度语音没有Unity的sdk包,因此就需要使用百度的安卓sdk,在Android Studio中写好功能,导出jar包供Unity使用。
第一步 在Android Studio中发布测试jar包
首先,由于是第一次自己使用Android Studio导出Unity jar包,因此先写一个测试jar包看Unity能否成功调用方法和收到回调。打开Android Studio,新建一个工程。
输入名称和包名后点击下一步,Minimun SDK 为最小支持的安卓sdk版本,选择后点击下一步,选择Empty Activity,点击下一步,名称默认就可以,然后点击Finish。
如果在控制台出现以下错误:
Error:Failed to open zip file.
Gradle’s dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
说明gradle依赖不能加载,你可以百度自行下载适合的gradle包,下载后解压。然后在Android Studio中点击File->Settings 如图,在Project-level settings 中选择use local gradle distribution然后选择下载好的gradle路径。
在项目名称上点击右键,选择新建一个Module,然后选择Android Library。
可以看到项目中多了一个文件夹baiduvoice,文件夹名为刚才创建Android Library时输入。下文中称这个新建的文件夹为Library。
要开发Unity可用的jar包,需要导入Unity提供的class.jar 文件。该文件在Unity安装路径下的Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes文件夹中,将该文件复制到baiduvoice/libs 文件夹中。
然后选择File->Project Structure,在Modules中选择刚才创建的Library,选择Dependencies,可以看到右边有加号,点击加号后选择第二个,然后找到刚才添加的class.jar。
在这个Library下新建一个class,这个class在src/main/java/…文件夹中,代码如下:
public class BaiduVoice extends Fragment{ public static BaiduVoice instance; public static void start(){ instance = new BaiduVoice(); UnityPlayer.currentActivity.getFragmentManager().beginTransaction().add(instance, "BaiduVoice").commit(); } /** * * @param _obj Unity中场景中的对象名称 * @param _fun 回调的Unity方法 * @param _val */ public void CallBack(String _obj, String _fun, String _val){ UnityPlayer.UnitySendMessage(_obj, _fun, "Android Callback " + _val); } }
这个类为什么不继承UnityPlayerActivity,请参考这篇文章,这篇文章指出了在自己编写Unity中使用的安卓插件时,为什么不要继承UnityPlayerActivity。
接下来,修改Library文件夹下的build.gradle文件,将一下代码添加到文件后面。
//task to delete the old jar task deleteOldJar(type: Delete) { delete 'release/AndroidPlugin.jar' } //task to export contents as jar task exportJar(type: Copy) { from('build/intermediates/bundles/default/') into('release/') include('classes.jar') ///Rename the jar rename('classes.jar', 'BaiduVoice.jar') } exportJar.dependsOn(deleteOldJar, build)
点击界面右边的gradle,如图,选中Library点击右键,选择Refresh external project。然后点开下方的other,找到exportJar,双击,可以看到在Library下有了一个release文件夹,说明我们导出jar包成功了。
接下来,新建一个Unity工程,将刚才导出的jar包放到Unity工程中Plugins/Android文件夹下,此方法导出的jar包并不需要在Plugins/Android下添加AndroidManifest.xml文件,unity打包安卓时会自动添加。新建一个Test脚本,代码如下:
public class Test : MonoBehaviour { public Text myText; public void SetText(string str){ this.myText.text = str; } // Use this for initialization void Start () { //包名为新建java类的包名 AndroidJavaClass ajc = new AndroidJavaClass("com.beefun.baiduvoice.BaiduVoice"); ajc.CallStatic("start"); AndroidJavaObject ajo = ajc.GetStatic<AndroidJavaObject>("instance"); ajo.Call("CallBack", "Canvas", "SetText", " Plugins"); } // Update is called once per frame void Update () { } }
在场景中新建一个Canvas,并且添加一个Text, 将此脚本挂在Canvas上,为脚本的text赋值,发出安卓版本。如下图
如果在手机上显示出如下图片,则表示调用成功。
相关文章推荐
- Unity 中使用百度语音识别发布Android程序(二)
- Unity 中使用百度语音识别发布Android程序(一)
- Windows平台下使用Jenkins自动发布Unity之Android程序与补丁
- Android-图像识别项目OpenCV(3):程序目标以及单独发布
- android语音识别方法一:使用intent调用语音识别程序
- [Unity]Android(安卓)代码安卓APK时,使用系统安装器安装的[最正确]办法(不弹出选择打开的程序)
- Unity打包安卓apk时或发布安卓程序时提示 Android Asset Packaging Tool Failed
- Android开发学习之使用百度语音识别SDK实现语音识别(下)
- Android-图像识别项目OpenCV(3):程序目标以及单独发布
- Android使用百度语音识别
- Unity-Android通信:AndroidJava 使用Unity c#编写Android程序调用任何方法
- android语音识别方法一:使用intent调用语音识别程序
- Unity 使用教程 之 Win 配置Android环境,打包发布Apk流程详解
- Unity发布android程序,报错Resource compilation failed!
- 如何用unity发布Android程序APK
- 微信小程序使用百度语音识别成功后,小程序端cancel了请求
- Android-图像识别项目OpenCV(3):程序目标以及单独发布
- Android开发学习之使用百度语音识别SDK实现语音识别(上)
- OSX平台下使用Jenkins自动发布Unity之iOS程序与补丁
- android语音识别方法一:使用intent调用语音识别程序