亚马逊Alexa Auto SDK示例SampleApp的集成开发

      从这个月十号起亚马逊关于车载语音的开源项目Alexa Auto 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的源码解析(一)中的前半部分的注册流程基本一致。

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

              在这一步骤中特别要注意Alexa Auto SDK Builder的话有两种方式都可以实现依赖编译,Alexa Auto SDK Builder中的两种方式我选择的是第一种在Liunx按着上面步骤走的。编译成功之后在项目中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的基础上去深入的开发自己车载相关的产品咯。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值