title: unity-接入百度地图定位-android篇(AndroidStudio)
categories: Unity3d
tags: [unity, android, jni, 交互, 百度地图定位]
date: 2018-11-22 17:39:18
comments: false
- 使用的是工具是 **unity2018.2.8f1,Android Studio 2.4(后面简称 AS)
- 之前写过一篇比较旧的 [unity-与Android交互(unity5、android studio)](unity-与Android交互(unity5、android studio))
- 测试工程地质: https://github.com/yangxuan0261/UnityAndroidPlugin
- 参考文章: https://blog.csdn.net/unity_http/article/details/79929454
前置物料
- 先准备好keystore的sha1值. 参考 [安卓提取 sha1](#安卓提取 sha1)
- 上百度开放平台申请 ak. 填入 开发版 和 发行版 的 sha1 及 应用的报名 (必须和unity中的一致)
使用 android studio 打包 unity 使用的插件jar
- 参考文章: android studio 打包.jar到unity调用 - https://blog.csdn.net/unity_http/article/details/79929454
接入百度地图
在上面打包jar插件的基础上, 增加几步就ok
-
将使用到的百度地图的相关 lib (jar, so动态库) 和 打包出的jar 都拷贝到 Unity 的 Assets\Plugins\Android\libs 目录下
-
修改一下 Assets\Plugins\Android 下的 AndroidManifest.xml 文件.
-
加入相关的权限. 可以参考官方demo 或者官方文档
-
填入申请好的 ak 值
<!-- AK鉴权 --> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="EHvsdfsdfsdfsdfsdfsdfsdfsdfsdfsdf" />
-
-
然后就可以打包测试了.
安卓提取 sha1
方法一 (推荐)
其实主要就是签名文件 keystore 文件里的信息, 可以直接找到 debug版本(在 %USER%.android 目录下) 和 release版本(自己生成) 的 keystore文件 拿出来查看一下就行.
>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 目录下) 打开,
> keytool -printcert -file ANDROIDD.RSA
参考: http://www.voidcn.com/article/p-gpujntey-ps.html
android studio 如何修改包名
参考: https://www.jianshu.com/p/557e1906db1a
查看 keystore 信息
-
命令:
>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
<!-- 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版本
dependencies { classpath 'com.android.tools.build:gradle:2.2.0'
-
aapt.exe 意外停止. 报错:
com.android.ide.common.process.ProcessException: Failed to execute aapt
原因:在build.gradle文件中,
compileSdkVersion 和buildToolsVersion 不匹配
-
报错:
Failed to resolve:com.android.support:appcompat-v7
把 build.gradle 文件中的这个值改成已有的
dependencies { ... compile 'com.android.support:appcompat-v7:26.+'
-
构建 gradle 报错:
Execution failed for task ':app:lint'
-
在所有模块的 build.gradle 文件中加入
android { lintOptions { abortOnError false } }
-
参考: https://stackoverflow.com/questions/36860021/gradle-build-execution-failed-for-task-applint
-
-
构建gradle报错:
Could not get unknown property 'jniLibs' for source set 'main' of type
字段 sourceSets 放错位置, 应该在 android 标签内
-
构建gradle报错:
Error converting bytecode to dex xxx
Edit First
Clean
and thenMake Project
also works.参考: https://stackoverflow.com/questions/34352591/android-error-converting-byte-to-dex