天天看点

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

Android高德SDK 地图篇一:集成高德SDK

大家好,这是系列博文的第一篇: 系列博文会完成以下功能

一. 地图篇:利用高德SDK实现滴滴出行的效

二. 导航篇:利用高德SDK实现滴滴司机端的效果(自定义导航界面)

集成高德SDK

首先我们访问高德开发平台下载 SDK

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

下载地址.png

因为我们以后要使用

地图,导航,定位,逆地理编码(搜索功能SDK) 请选择这些下载 上图已经选好了。

建立工程集成SDK 配置build.gradle文件

我们新建一个Android工程。如下:

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

建立工程.png

建好以后 我们在这个工程上建立一个Module 请选择Android Library取名AmapLibrary

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

建立工程1.png

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

建立工程2.png

请选择Android Library 我们把高德SDK放在这个Library中

是为了以后方便移植。还要很多有优点。等会我跟大家说

好了。 我们的app工程和Library都弄好了。

解压你刚下载的高德SDK 解压后文件夹如下:

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

解压文件目录.png

拷贝这两个文件到AmapLibrary中libs目录下

如下:

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

拷贝库到libs中.png

然后需要在 AmapLibrary和app的build.gradle中都添加 添加在build.gradle文件下的

android标签下 如下:

sourceSets {

main {

jniLibs.srcDirs = ['libs']

}

}

添加这个是因为 我们把armeabi库放在libs下面

然后在defaultConfig标签下添加

ndk {

abiFilters 'armeabi'

}

build.gradle如下:

请注意app下的build.gradle也要添加

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

修改gradle文件名称.png

然后请将AmapLibrary中build.gradle中的

implementation fileTree(include: ['*.jar'], dir: 'libs')

替换成

api fileTree(include: ['*.jar'], dir: 'libs')

这样app才能使用AmapLibrary工程中的libs库(非常重要)

修改后的效果

dependencies {

api 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如下

package="com.yisingle.amap.lib" >

android:name="com.amap.api.v2.apikey"

android:value="需要在高德开放平台上申请" />

android:name="com.amap.api.v2.apikey"

android:value="需要在高德开放平台上申请" />

这个东西需要到高德开放平台申请。接下我们完成这个工作就集成好的高德SDK了

申请高德SDK的apikey

申请高德SDK的apikey 需要两个关键的东西。

一个是应用的包名

一个是应用的打包签名文件的sh1

应用的包名:

在这个工程中 请注意我们拿app的包名 而不是AmapLirary的包名(谨记)

app的包名是:com.yisingle.study.map.one

如下图:

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

app的包名.png

签名文件的sh1

如下图:

在AndroidStudio中点击Build generate singed apk 生成签名

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

生成签名文件.png

然后点击下一步 出现如下图:

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

签名信息填写.png

点击ok

生成好了

在工程中建一个文件夹取名key 并把签名文件放到里面如下图:

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

签名位置.png

然后在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下也可以用哈

keytool -v -list -keystore studyone.jks

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

获取签名文件的SH1.png

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

签名获取sh1成功.png

复制:

38:86:88:CF:78:05:5C:C4:F5:D5:B4:0A:3C:24:E9:11:3A:58:12:85

上面就是我的签名文件的SHA1

好了

注册高德开发平台账号

这里我就不详细介绍了 请大家自己看高德开发平台注册流程吧 很简单

进入应用管理界面 点击应用管理 点击创建新应用

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

创建新应用.png

然后会弹出下面的界面 随便填写就可以了

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

创建界面.png

创建好后点击添加新Key

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

点击添加Key.png

然后输入sha1 和包名 点击提交

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

输入包名和sha1的值.png

然后我们会得到key

Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

高德签名显示位置.png

填写到AmapLirary工程下的

android:name="com.amap.api.v2.apikey"

android:value="7a91a3b1ccdf395223bcf4f511d5697c" />

验证

好了我们来验证一下是否配置成功了。

在app的MainActivity界面写如下的代码

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那么 就代表我们集成成功了。