天天看點

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那麼 就代表我們內建成功了。