从这个月十号起亚马逊关于车载语音的开源项目Alexa Auto SDK
<https://github.com/wangyongyao1989/aac-sdk>正式在Github推出,其中Alexa Auto
SDK引擎、 核心模块、Alexa模块、导航模块、手机控制模块五大模块几近涵盖了车载导航方面的所有功能示例。

一、整体模块的功能:

            Alexa Auto SDK包含将Alexa集成到汽车中所需的基本客户端软件。Alexa Auto
SDK提供了一个用于与Alexa服务通信的运行时引擎。它还提供允许开发人员实现平台特定行为的接口,例如音频输入,媒体播放,模板和状态渲染以及电话控制。它还包括一个示例应用程序,演示如何使用Alexa
Auto SDK界面。



   二、接入示例的演示:



 

三、接入Alexa Auto SDK的samples流程:

      1、注册产品:

           
 这一步就是在Amazon开发者平台上创建一些安全配置文件、产品ID、客户端ID及api_key.txt等必要的配置信息,然后填充到示例app或者自己的App当中去。这方面就不赘述在我的博客
亚马逊语言识别Alexa之AlexaAndroid的接入及AlexaAndroid的源码解析(一)
<https://blog.csdn.net/wangyongyao1989/article/details/80183020>中的前半部分的注册流程基本一致。

      2、Include Alexa Auto SDK dependencies(Alexa Auto SDK 的依赖编译):

              在这一步骤中特别要注意Alexa Auto SDK Builder的话有两种方式都可以实现依赖编译,Alexa Auto SDK
Builder <https://github.com/alexa/aac-sdk/blob/1.0/builder/README.md>
中的两种方式我选择的是第一种在Liunx按着上面步骤
<https://github.com/alexa/aac-sdk/blob/1.0/builder/BuildWithOE.md>
走的。编译成功之后在项目中acc-sdk ->builder :



      3.如上Alexa Auto SDK Builder编译成功之后拷贝出项目AAC-SDK,我是在自己开发的window平台中用Android
Studio去打开该项目。

   注:可能在window平台上会出现我所遇到过得问题,接下来是我解决这一问题思路,仅供大家参考少去踩重复的坑:

           1)、上面2中编译成功后的SDK,来到window平台下的Android Studio下会出现CMakeLists.txt编译不过
Error:A problem occurred configuring project ':aace'. > executing external
native build for cmake
E:\alexaauto\aac-sdk\platforms\android\aace\CMakeLists.txt
           在CMakeList.txt中报错的具体行为:
if (NOT ${PREP_RESULT} EQUAL 0) message(FATAL_ERROR "Script execution failed")
//这里报错说明prepare-native-dependencies.sh的脚本执行的不成功 endif()
          2)、从1)中找到源头说明是执行脚本prepare-native-dependencies.sh没有执行成功:
execute_process(
//${CMAKE_CURRENT_SOURCE_DIR}代表当前目录,执行.sh,${ANDROID_ABI}是传入.sh中参数${1},${ANDROID_PLATFORM}是参数${2}
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/prepare-native-dependencies.sh"
${ANDROID_ABI} ${ANDROID_PLATFORM} RESULT_VARIABLE PREP_RESULT )
               转到prepare-native-dependencies.sh的脚本文件进行分析:
#!/bin/bash set -e THIS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SDK_HOME=${THIS_DIR}/../../.. BUILDER_HOME=${SDK_HOME}/builder
DEPLOY_DIR=${THIS_DIR}/native-dependencies # Extra options ANDROID_ABI=${1}
//从CMakeLists.txt传入的${ANDROID_ABI} ANDROID_PLATFORM=${2}
//从CMakeLists.txt传入的${ANDROID_PLATFORM} if [ -z ${ANDROID_ABI} ] || [ -z
${ANDROID_PLATFORM} ]; then echo "Please specify ABI/API" exit 1 fi mkdir -p
${DEPLOY_DIR}
//找到builer/deploy/androidarm下的aac-image-minimal-armeabi-v7a-android-22.tar.gz
//aac-image-minimal-armeabi-v7a-android-22.tar.gz即是"aac-image-minimal-${ANDROID_ABI}-${ANDROID_PLATFORM}.tar.gz"
IMAGE_NAME="aac-image-minimal-${ANDROID_ABI}-${ANDROID_PLATFORM}.tar.gz" find
${BUILDER_HOME}/deploy \ -name ${IMAGE_NAME} \ -exec cp {} ${DEPLOY_DIR} \; if
[ ! -e ${DEPLOY_DIR}/${IMAGE_NAME} ]; then echo "AAC Build for
${ANDROID_ABI}/${ANDROID_PLATFORM} is not found!" exit 1 fi
SYSROOT="${DEPLOY_DIR}/sysroots/${ANDROID_ABI}" mkdir -p ${SYSROOT} && tar xf
${DEPLOY_DIR}/${IMAGE_NAME} -C ${SYSROOT}
JNI_DEPLOY="${DEPLOY_DIR}/jni/${ANDROID_ABI}" mkdir -p ${JNI_DEPLOY}
//创建一个/native-dependencies/jni/${ANDROID_ABI}的文件加 find ${SYSROOT}/opt/AAC/lib
-name "*.so" -exec cp {} ${JNI_DEPLOY} \;
       
3)、把prepare-native-dependencies.sh脚本信息修改为在Ubuntu下编成的项目下的builder->deploy->androidarm->aac-image-minimal-armeabi-v7a-android-22.tar.gz:



         
 把prepare-native-dependencies.sh中的${1}、${2}改为对应的armabi-v7a、android-22:
DEPLOY_DIR=${THIS_DIR}/native-dependencies # Extra options
ANDROID_ABI=armeabi-v7a ANDROID_PLATFORM=android-22
 

           
4)、回到报错的CMakeLists.txt中其实2)的执行cmake的exectue_process就是为了执行prepare-native-dependencies.sh脚本从而实现脚本里的创建和生成native-dependencies文件和里面的so库。如现在手动点击3)所修改的prepare-native-dependencies.sh就会对应生成native-dependencies。



           
5)、有了native-dependencies文件,接下来就可以把2)中的执行语句exectue_process和1)判断语句删除,可以把CMakeLists.txt改为如下:
cmake_minimum_required(VERSION 3.4.1) set(CMAKE_CXX_STANDARD 11)
message(${CMAKE_CURRENT_SOURCE_DIR}) //打印出${CMAKE_CURRENT_SOURCE_DIR}的值
message(${ANDROID_ABI}) //打印出(${ANDROID_ABI})的值 message(${ANDROID_PLATFORM})
set(MAKE_CMD "${CMAKE_CURRENT_SOURCE_DIR}/prepare-native-dependencies-bake.sh")
message("COMMAND: ${MAKE_CMD}") set(AAC_HOME
${CMAKE_CURRENT_SOURCE_DIR}/native-dependencies/sysroots/${ANDROID_ABI}/opt/AAC)
if(NOT EXISTS ${AAC_HOME}) message("AAC build for
${ANDROID_ABI}/${ANDROID_PLATFORM} is not exists!") endif()
message("AAC_HOME的地址为:") message(${AAC_HOME})
include(${AAC_HOME}/share/cmake/AACECore.cmake)
include(${AAC_HOME}/share/cmake/AACEAlexa.cmake)
include(${AAC_HOME}/share/cmake/AACENavigation.cmake)
include(${AAC_HOME}/share/cmake/AACEPhoneControl.cmake) add_library(aace-lib
SHARED //执行cmake后会生成以aace-lib为名字的so库
src/main/cpp/src/aace/alexa/AlertsBinder.cpp
src/main/cpp/src/aace/alexa/AlexaClientBinder.cpp
src/main/cpp/src/aace/alexa/AudioPlayerBinder.cpp
src/main/cpp/src/aace/alexa/AuthProviderBinder.cpp
src/main/cpp/src/aace/alexa/MediaPlayerBinder.cpp
src/main/cpp/src/aace/alexa/NotificationsBinder.cpp
src/main/cpp/src/aace/alexa/PlaybackControllerBinder.cpp
src/main/cpp/src/aace/alexa/SpeakerBinder.cpp
src/main/cpp/src/aace/alexa/SpeechRecognizerBinder.cpp
src/main/cpp/src/aace/alexa/SpeechSynthesizerBinder.cpp
src/main/cpp/src/aace/alexa/TemplateRuntimeBinder.cpp
src/main/cpp/src/aace/core/EngineBinder.cpp
src/main/cpp/src/aace/core/PlatformInterfaceBinder.cpp
src/main/cpp/src/aace/location/LocationProviderBinder.cpp
src/main/cpp/src/aace/logger/LoggerBinder.cpp
src/main/cpp/src/aace/navigation/NavigationBinder.cpp
src/main/cpp/src/aace/phonecontrol/PhoneCallControllerBinder.cpp
src/main/cpp/src/aace/network/NetworkInfoProviderBinder.cpp
src/main/cpp/src/NativeLib.cpp ) target_include_directories(aace-lib PUBLIC
src/main/cpp/include) find_library(android-lib android) find_library(log-lib
log) target_link_libraries(aace-lib AACEPhoneControlPlatform
AACEPhoneControlEngine AACENavigationPlatform AACENavigationEngine
AACEAlexaPlatform AACEAlexaEngine AACECorePlatform AACECoreEngine
${android-lib} ${log-lib} )
              6)、以上就是分析整个过程、要能运行Alexa Auto
SDK的sampleApp还需最后一步在acce.gradle下把delete ‘native-depenencies’注释掉:
//clean.doFirst { // delete 'native-dependencies' //}
            确保AS Rebuild 
Project项目中的native-dependencie文件在手动运行修改后的prepare-native-dependencies.sh是存在的。这样就能打包手机上运行。

 

上面示例完成运行之后,接下里就是在Alexa Auto SDK的基础上去深入的开发自己车载相关的产品咯。

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信