# GaodeMapStudyOne1 **Repository Path**: justforgame/GaodeMapStudyOne1 ## Basic Information - **Project Name**: GaodeMapStudyOne1 - **Description**: No description available - **Primary Language**: Android - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-03-29 - **Last Updated**: 2020-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Android高德SDK 地图篇一:集成高德SDK 大家好,这是系列博文的第一篇: 系列博文会完成以下功能 - 一. 地图篇:利用高德SDK实现滴滴出行的效 - 二. 导航篇:利用高德SDK实现滴滴司机端的效果(自定义导航界面) ## 集成高德SDK 首先我们访问高德开发平台下载 SDK 下载地址 http://lbs.amap.com/api/android-sdk/download ![下载地址.png](https://upload-images.jianshu.io/upload_images/2442375-6f5b7736aaab109e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 因为我们以后要使用 地图,导航,定位,逆地理编码(搜索功能SDK) 请选择这些下载 上图已经选好了。 ### 建立工程集成SDK 配置build.gradle文件 我们新建一个Android工程。如下: ![建立工程.png](https://upload-images.jianshu.io/upload_images/2442375-2c391aaf24815974.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 建好以后 我们在这个工程上建立一个Module 请选择Android Library取名AmapLibrary ![建立工程1.png](https://upload-images.jianshu.io/upload_images/2442375-9306d1a922a475de.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![建立工程2.png](https://upload-images.jianshu.io/upload_images/2442375-694db91cc93dfab2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 请选择Android Library 我们把高德SDK放在这个Library中 是为了以后方便移植。还要很多有优点。等会我跟大家说 好了。 我们的app工程和Library都弄好了。 解压你刚下载的高德SDK 解压后文件夹如下: ![解压文件目录.png](https://upload-images.jianshu.io/upload_images/2442375-b425d63c80ee44ac.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 拷贝这两个文件到AmapLibrary中libs目录下 如下: ![拷贝库到libs中.png](https://upload-images.jianshu.io/upload_images/2442375-b44d37bb5442a02d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 然后需要在 AmapLibrary和app的build.gradle中都添加 添加在build.gradle文件下的 android标签下 如下: ``` sourceSets { main { jniLibs.srcDirs = ['libs'] } } ``` 添加这个是因为 我们把armeabi库放在libs下面 然后在defaultConfig标签下添加 ``` ndk { abiFilters 'armeabi' } ``` build.gradle如下: 请注意app下的build.gradle也要添加 ![修改gradle文件名称.png](https://upload-images.jianshu.io/upload_images/2442375-0f1c4ce6e1b8f601.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 然后请将AmapLibrary中build.gradle中的 ``` implementation fileTree(include: ['*.jar'], dir: 'libs') ``` 替换成 ``` compile fileTree(include: ['*.jar'], dir: 'libs') ``` 这样app才能使用AmapLibrary工程中的libs库(非常重要) 修改后的效果 ``` dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:26.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } ``` ## AndroidManifest的配置 在AmapLibrary工程下的AndroidManifest.xml文件 请注意我们只需要在AmapLibrary工程下的AndroidManifest.xml文件添加 不必在app工程下的AndroidManifest.xml文件下添加(因为打包的时候这些东西都会自动打包到一个AndroidManifest.xml文件中) AmapLibrary的AndroidManifest.xml如下 ```xml ``` ``` 这个东西需要到高德开放平台申请。接下我们完成这个工作就集成好的高德SDK了 ``` ## 申请高德SDK的apikey 申请高德SDK的apikey 需要两个关键的东西。 - 一个是应用的包名 - 一个是应用的打包签名文件的sh1 ### 应用的包名: 在这个工程中 请注意我们拿app的包名 而不是AmapLirary的包名(谨记) app的包名是:com.yisingle.study.map.one 如下图: ![app的包名.png](https://upload-images.jianshu.io/upload_images/2442375-e5ea690547f95cac.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ###签名文件的sh1 如下图: 在AndroidStudio中点击Build generate singed apk 生成签名 ![生成签名文件.png](https://upload-images.jianshu.io/upload_images/2442375-0c9a6e6c90a04929.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 然后点击下一步 出现如下图: ![签名信息填写.png](https://upload-images.jianshu.io/upload_images/2442375-3f255f818cd590af.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 点击ok 生成好了 在工程中建一个文件夹取名key 并把签名文件放到里面如下图: ![签名位置.png](https://upload-images.jianshu.io/upload_images/2442375-7ad8f11fac90b927.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 然后在app中的build.gradle中 配置打包使用生成的签名。 在app.的build.gradle文件下 android标签下 添加 ``` signingConfigs { signinfo { keyAlias 'key0' keyPassword '123456789' storeFile file('../key/studyone.jks') storePassword '123456789' } } ``` 在buildTypes标签下修改代码如下: ``` buildTypes { release { minifyEnabled false signingConfig signingConfigs.signinfo proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { minifyEnabled false signingConfig signingConfigs.signinfo } } ``` 注意请把signingConfigs 放在 buildTypes的前面。 这样我们就使用生成的签名打包debug文件了。就是换了电脑工程也不会出现签名不对的问题。 最后app工程下的build.gradle的文件如下: ``` apply plugin: 'com.android.application' android { compileSdkVersion 26 defaultConfig { applicationId "com.yisingle.study.map.one" minSdkVersion 18 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" ndk { abiFilters 'armeabi' } } signingConfigs { signinfo { keyAlias 'key0' keyPassword '123456789' storeFile file('../key/studyone.jks') storePassword '123456789' } } buildTypes { release { minifyEnabled false signingConfig signingConfigs.signinfo proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { minifyEnabled false signingConfig signingConfigs.signinfo } } sourceSets { main { jniLibs.srcDirs = ['libs'] } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } ``` 通过 命令 获取签名文件 命令在window下也可以用哈 ![获取签名文件的SH1.png](https://upload-images.jianshu.io/upload_images/2442375-10c548941ef272ed.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![签名获取sh1成功.png](https://upload-images.jianshu.io/upload_images/2442375-a5742cec3efe3d01.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 复制: 38:86:88:CF:78:05:5C:C4:F5:D5:B4:0A:3C:24:E9:11:3A:58:12:85 上面就是我的签名文件的SHA1 好了 ###注册高德开发平台账号 这里我就不详细介绍了 请大家自己看高德开发平台注册流程吧 很简单 进入应用管理界面 点击应用管理 点击创建新应用 ![创建新应用.png](https://upload-images.jianshu.io/upload_images/2442375-44bc68096b3a018d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 然后会弹出下面的界面 随便填写就可以了 ![创建界面.png](https://upload-images.jianshu.io/upload_images/2442375-577acc0de2ce8f3f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 创建好后点击添加新Key ![点击添加Key.png](https://upload-images.jianshu.io/upload_images/2442375-a0b47cf547413843.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 然后输入sha1 和包名 点击提交 ![输入包名和sha1的值.png](https://upload-images.jianshu.io/upload_images/2442375-b54247f5b671d76b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 然后我们会得到key ![高德签名显示位置.png](https://upload-images.jianshu.io/upload_images/2442375-a6c2e0768479bec1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 填写到AmapLirary工程下的 ``` ``` ### 验证 好了我们来验证一下是否配置成功了。 在app的MainActivity界面写如下的代码 ```java package com.yisingle.study.map.one; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.TextView; import com.amap.api.services.core.LatLonPoint; import com.amap.api.services.route.BusRouteResult; import com.amap.api.services.route.DriveRouteResult; import com.amap.api.services.route.RideRouteResult; import com.amap.api.services.route.RouteSearch; import com.amap.api.services.route.WalkRouteResult; import com.yisingle.amap.lib.GaoDeErrorUtils; public class MainActivity extends AppCompatActivity { private RouteSearch routeSearch; private TextView tvInfo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvInfo = findViewById(R.id.tvInfo); routeSearch = new RouteSearch(this); routeSearch.setRouteSearchListener(new RouteSearch.OnRouteSearchListener() { @Override public void onBusRouteSearched(BusRouteResult busRouteResult, int i) { } @Override public void onDriveRouteSearched(DriveRouteResult driveRouteResult, int i) { //验证是否成功 tvInfo.setText(GaoDeErrorUtils.getErrorInfo(i)); } @Override public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i) { } @Override public void onRideRouteSearched(RideRouteResult rideRouteResult, int i) { } }); startConfimGaode(); } public void startConfimGaode() { LatLonPoint from = new LatLonPoint(30.537107, 104.06951); LatLonPoint to = new LatLonPoint(30.657349, 104.065837); RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(from, to); RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fromAndTo, RouteSearch.DRIVING_SINGLE_SHORTEST, null, null, ""); routeSearch.calculateDriveRouteAsyn(query); tvInfo.setText("使用地图的路径规划中"); } @Override protected void onDestroy() { super.onDestroy(); } public void test(View view) { startConfimGaode(); } } ``` 好了 如果显示请求正常服务调用正常,有结果返回 code 为1000那么 就代表我们集成成功了。 [代码下载地址点我](https://gitee.com/justforgame/GaodeMapStudyOne1.git)