<!--用于访问网络,网络定位需要上网--> <uses-permission android:name="android.permission.INTERNET" /> <!--用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!--用于访问系统接口提供的卫星定位信息--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <!--获取网络状态,用于在线算路与离线算路之间的切换 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--用于访问WIFI网络状态,用于判断网络状态 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!--写入扩展存储,向扩展卡写入数据,用于离线数据的写入 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 用于ugc事件上报拍照录像 --> <uses-permission android:name="android.permission.CAMERA" /> <!-- 用于ugc事件上报录音 --> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 用于导航中省电设置 --> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!-- 后台服务 --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- 诱导悬浮窗 --> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 对于Android6.0及以上系统,还需要动态申请READ_PHONE_STATE权限,用于百度导航SDK TTS播报和来电去电的互斥策略。
申请到百度开放平台应用Key后,为了能够百度导航SDK正常运行,将其配置在AndroidManifest.xml的application节点内部,如下所示:
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="申请的Key" />
方法一:
导航SDK核心已经打包为一个独立的aar,命名为onsdk_all.aar,可以将其以aar module引入集成APP project,引入后,即可引用导航SDK相关类进行开发。在4.8.0.0版本以上,导航SDK中的so从aar中分离出来,分别支持armeabi,armeabi-v7a,arm64-v8a三种架构,开发者可以下载产物后自行选择相应的架构添加至工程。
导航SDK依赖库集成
导航SDK目前依赖库主要包含两方面:第三方库和百度其他库。目前这些库在提供时都是以jar包提供,实际集成时,对于第三方库,也可以采用gradle自身的引用方式。下图中红圈标记的为第三方库,其他为百度其他库。
对于第三方库,在引入时可尽量引入比较新的版本,因为旧的版本可能会导致百度导航内部找不该api报错。 除了上图的库,百度导航SDK还需要引入2个库,分别是recyclerview-v7包和apache包,引入方式如下:
android { // apache包 useLibrary 'org.apache.http.legacy' …… } dependencies { …… // recyclerview-v7包 compile 'com.android.support:recyclerview-v7:27.0.2' implementation 'android.arch.lifecycle:extensions:1.1.1' …… }
注意:目前Gradle中集成SDK只支持国内版本如果需要Google 渠道版本SDK 请到官网下载一体化包 。
通过Gradle 集成sdk
1、在Project的build.gradle文件中配置repositories,添加mavenCentral仓库地址
配置如下:
allprojects { repositories { mavenCentral() } }
2、在主工程的build.gradle文件配置dependencies
SDK |
引入依赖 |
地图组件 |
implementation 'com.baidu.lbsyun:BaiduMapSDK_Map:7.5.4' |
检索组件 |
implementation 'com.baidu.lbsyun:BaiduMapSDK_Search:7.5.4' |
工具组件 |
implementation 'com.baidu.lbsyun:BaiduMapSDK_Util:7.5.4' |
步骑行组件 |
implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-BWNavi:7.5.4' |
基础定位组件 |
implementation 'com.baidu.lbsyun:BaiduMapSDK_Location:9.3.7' |
全量定位组件 |
implementation 'com.baidu.lbsyun:BaiduMapSDK_Location_All:9.3.7' |
驾车导航组件 |
implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-Navi:7.5.4' |
驾车导航+步骑行导航 |
implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-AllNavi:7.5.4' |
TTS组件 |
implementation 'com.baidu.lbsyun:NaviTts:3.2.8' |
全景组件 |
implementation 'com.baidu.lbsyun:BaiduMapSDK_Panorama:2.9.0' |
3、主工程的build.gradle文件在Project目录中位置:
以下是驾车导航组件相关依赖的示例, 配置如下:
android { defaultConfig { ndk { // 设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" } } } dependencies { implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-Navi:7.4.0' }
注意:在gradle依赖时如果同时使用多个组件时,部分组件会产生冲突,在使用时根据自己的项目需求去组合,以下是会产生冲突的组件。
组件 | 依赖 | 备注 |
基础定位组件 |
implementation 'com.baidu.lbsyun:BaiduMapSDK_Location:9.1.8' |
选其一 |
全量定位组件 |
implementation 'com.baidu.lbsyun:BaiduMapSDK_Location_All:9.1.8' | |
地图组件 |
implementation 'com.baidu.lbsyun:BaiduMapSDK_Map:7.4.0' |
这些组件中都包含了BaiduMapSDK_Map组件,根据需求选其一 |
步骑行组件 |
implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-BWNavi:7.4.0' | |
驾车导航组件 |
implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-Navi:7.4.0' | |
驾车导航+步骑行导航 |
implementation 'com.baidu.lbsyun:BaiduMapSDK_Map-AllNavi:7.4.0' |
导航SDK自带TTS能力已经打包为一个独立的aar,命名为NaviTts.aar,可以将其以aar module引入集成APP project,引入后,可以利用导航SDK提供的TTS接口进行初始化。
当不需要导航SDK自带TTS时,可以不进行集成,此时需要利用导航SDK支持外部TTS的方式进行TTS能力初始化。
这里包括SDK授权和TTS授权两部分,申请时先申请SDK授权,再申请TTS授权,具体授权申请方式如下。
1. 准备材料 1) apk包名
2) apk签名sh1
2. 登录http://lbsyun.baidu.com/apiconsole/key 申请 更详细的过程可参考说明:http://lbsyun.baidu.com/index.php?title=android-navsdk/guide/key
3. 记得将申请的key按照上述说明,在工程Manifest文件中进行配置,否则导航SDK将处于功能不可用状态
SDK授权申请后,可以继续申请TTS授权。
1. 以SDK授权申请时相同账号登录<https://yuyin.baidu.com/>,点击右上角的“控制台“,进入控制台界面,点击左侧导航栏“语音技术”,然后点击创建应用。
2. 按步骤填入应用名称、包名等信息。
3. 点击立即创建会生成App ID、API Key和Secret Key,就是在开发中初始化TTS能力时传入的参数
4. 在百度地图开放平台,点击控制台,左侧边栏点击"应用管理"-"我的应用",页面上找到"离线tts申请"点进去,然后点击"申请新语音key",选择相应的应用对应的ak填写资料提交申请,申请成功后生成audio_key,该值为tts初始化的authSn参数
至此,和导航SDK集成相关的授权申请就完成了。
在 main 目录下创建文件夹 jniLibs (如果有就不需要创建了),将下载文件的 armeabi 等相关文件夹复制到这个目录下,如果已经有这个目录,将下载的 so 库复制到这个目录即可。如图所示
1.由于百度导航不支持instant run,因此开发者使用的Android studio中如果有instant run功能选项请先关闭(较新版本的Android studio没有这个功能选项,可忽略),不然会造成编译失败,在设置中搜索instant run,关闭方式如下图。
2.为了避免Android "64K 引用限制"引起的异常,在app的build.gradle中需要引入multidex包,并进行相关配置,并且导航SDK内部使用了annotationProcessor,同样需要在build.gradle中配置,如下。
defaultConfig { …… // 避免"64K 引用限制" multiDexEnabled true // 导航SDK内部使用了annotationProcessor,需要添加下面代码,防止编译异常 javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } } }
# BaiduNavi SDK -dontoptimize -ignorewarnings -keeppackagenames com.baidu.** -keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod -dontwarn com.baidu.** -dontwarn com.baidu.navisdk.** -dontwarn com.baidu.navi.** -keep class com.baidu.** { *; } -keep interface com.baidu.** { *; } -keep class vi.com.gdi.** { *; } -dontwarn com.google.protobuf.** -keep class com.google.protobuf.** { *;} -keep interface com.google.protobuf.** { *;} -dontwarn com.google.android.support.v4.** -keep class com.google.android.support.v4.** { *; } -keep interface com.google.android.support.v4.app.** { *; } -keep public class * extends com.google.android.support.v4.** -keep public class * extends com.google.android.support.v4.app.Fragment