unity-接入百度地图定位-android篇(AndroidStudio)


前置物料

  1. 先准备好keystore的sha1值. 参考 [安卓提取 sha1](#安卓提取 sha1)
  2. 上百度开放平台申请 ak. 填入 开发版 和 发行版 的 sha1 及 应用的报名 (必须和unity中的一致)

使用 android studio 打包 unity 使用的插件jar


接入百度地图

在上面打包jar插件的基础上, 增加几步就ok

  1. 将使用到的百度地图的相关 lib (jar, so动态库) 和 打包出的jar 都拷贝到 Unity 的 Assets\Plugins\Android\libs 目录下

  2. 修改一下 Assets\Plugins\Android 下的 AndroidManifest.xml 文件.

    1. 加入相关的权限. 可以参考官方demo 或者官方文档

    2. 填入申请好的 ak 值

      1
      2
      3
      4
      <!-- AK鉴权 -->
      <meta-data
      android:name="com.baidu.lbsapi.API_KEY"
      android:value="EHvsdfsdfsdfsdfsdfsdfsdfsdfsdfsdf" />
  3. 然后就可以打包测试了.


安卓提取 sha1

方法一 (推荐)

其实主要就是签名文件 keystore 文件里的信息, 可以直接找到 debug版本(在 %USER%.android 目录下) 和 release版本(自己生成) 的 keystore文件 拿出来查看一下就行.

1
2
3
4
>keytool -list -v -keystore debug.keystore
证书指纹:
MD5: 20:06:20aaaaaaaaaaaaaaaaaaaaa
SHA1: 11:E3:F8:aaaaaaaaaaaaaaaaaaa

方法二

安卓apk 包用 压缩工具打开, 找到 META-INF/ANDROIDD.RSA 文件, 提取出来, 然后使用java工具 keytool.exe (在%JDK%/bin 目录下) 打开,

1
> keytool -printcert -file ANDROIDD.RSA

参考: http://www.voidcn.com/article/p-gpujntey-ps.html


android studio 如何修改包名

参考: https://www.jianshu.com/p/557e1906db1a


查看 keystore 信息

  • 命令:

    1
    2
    3
    4
    >keytool -list -v -keystore aaa.keystore
    证书指纹:
    MD5: 08:D2:FA:87:aaaaaaaaaaaaaaaaaaaaaa
    SHA1: D8:18:67:Caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

百度定位踩坑

  • 报错: NetWork location failed because baidu location service check the key is unlegal, please check the key in AndroidManifest.xml

    • 包名不对. android studio 修改包名 (refactor -> rename) 后还得修改 build.gradle(Module) 中的包名 applicationId "com.its.ares"AndroidManifest.xml 中的包名 package="com.its.ares"

    • ak 不对. 必须是百度开放平台申请的

      然后配到 AndroidManifest.xml

      1
      2
      3
      4
      <!-- AK鉴权 -->
      <meta-data
      android:name="com.baidu.lbsapi.API_KEY"
      android:value="EHvasdasdasdasdasdasdasd" />
    • 相关参考: https://alphagao.com/2017/02/23/get-location-in-service-with-baidu-map/


jar构建踩坑

  • android studio 报错: The ANDROID_DAILY_OVERRIDE value is outdated. Please set the ANDROID_DAILY_OVERRIDE environment variable to "21c0aef24ab2b18140facf573fe8f4f258301e2a"

    将 project 的 gradle 的工具改成其他版本, 不要用 alpha版本

    1
    2
    dependencies {
    classpath 'com.android.tools.build:gradle:2.2.0'
  • aapt.exe 意外停止. 报错: com.android.ide.common.process.ProcessException: Failed to execute aapt

    原因:在build.gradle文件中,

    1
    compileSdkVersion 和 buildToolsVersion 不匹配
  • 报错: Failed to resolve:com.android.support:appcompat-v7

    build.gradle 文件中的这个值改成已有的

    1
    2
    3
    dependencies {
    ...
    compile 'com.android.support:appcompat-v7:26.+'
  • 构建 gradle 报错: Execution failed for task ':app:lint'

  • 构建gradle报错: Could not get unknown property 'jniLibs' for source set 'main' of type

    字段 sourceSets 放错位置, 应该在 android 标签内

    参考: https://blog.csdn.net/changcsw/article/details/80020851

  • 构建gradle报错: Error converting bytecode to dex xxx

    Edit First Clean and then Make Project also works.

    参考: https://stackoverflow.com/questions/34352591/android-error-converting-byte-to-dex