Google Maps Android API v2 を使ってAndroidアプリにマップを表示してみた


Google Maps Android API v2 を使ってAndroidアプリを作りたかったので、マップ表示するまでの備忘録を取る。Android Studio 1.0を使って、Getting Started - Google Maps Android API v2 — Google Developers に従って作業することにした。

概要

Google Maps Android API v2 を使ってAndroidアプリにマップに表示するまでには以下のステップがいる。

  1. Android SDK のインストール
  2. Google Play services SDK のダウンロードと設定
  3. フィンガープリントの発行
  4. Google Maps API key を取得
  5. マニフェストに設定を追加
  6. マップを表示

なお、Android SDK のインストールについては、Win版Mac版とも以前に記事にしたので今回は割愛する。

Google Play services SDK のダウンロードと設定

Google Maps Android API v2 は、Googleプレイサービスプラットフォームの一部とのこと。なので、Google Mapsを使うためには、Google Play services SDKをダウンロードして設定する必要がある。詳しい情報は、Setting Up Google Play Services | Android Developers に記載されているのでここも参考にした。

Google_Play_service_20150220

まずは、Google Play services SDK パッケージをインストールする。

SDKマネージャーを起動し、Extrasの Google Play service をインストール

このSDKは、実機だとGoogle Play 購入端末か Android 2.3以上の端末、エミュレータのAVDを使う場合は Google APIs プラットフォームが動作する Android 4.2.2 以上でないと使えないらしい。

android_studio_gradle_sync

build.gradleファイルのdependencies要素内に、プレイサービスの最新バージョンを追記する。
※build.gradleファイルは、プロジェクト直下のトップ階層と、appディレクトリ内の2か所にあるが、アプリケーションモジュールに対するappディレクトリ内の方に追記した。

compile 'com.google.android.gms:play-services:6.5.87'

Setting Up Google Play Services | Android Developers によると2015/03/10時点では最新は6.5.87らしい。
※2015/03/10時点では7.0.0になってました。

追記したら、ツールバーに「Sync Now」と同期しろ!みたいな警告がでてくるので、リンクをクリックして同期する。
※マニフェストの設定はこの後にまとめて記載する。

フィンガープリントの発行

GMA2_obtain_api_key_04

Google Maps API key を取得するときに、フィンガープリントというデジタル証明書などが改善されていないかチェックするためのデータが必要となる。このフィンガープリントは開発環境ごとに異なるためアプリケーション開発者を確認できるらしく、フィンガープリントを作りAPIに登録したPC以外でAVDで動作させてもマップ表示できなかった。
※フィンガープリントを作るにはdebug.keystore ファイルが必要で、このファイルをプロジェクトのメンバーで共有したりすることで1つのフィンガープリントでいけるらしい。

SHA1 デベロッパー証明書フィンガープリントは次のコマンドを使用して確認できる。

keytool -list -v -keystore mystore.keystore

keytoolは、キーおよび証明書管理ツール。-list でキーストア内のエントリをリストする。Androidアプリのデバッグ用フィンガープリントを作るには プロジェクト生成時に作られる debug.keystore というファイルが必要となる。OSによって保存されている場所が異なるが、デフォルとでは以下のところにファイルがあるとのこと。

  • OS X and Linux: ~/.android/
  • Windows Vista and Windows 7:C:\Users\your_user_name\.android\

キーおよび証明書管理ツール”keytool”は、jdkをインストールすればその中にある。自分は「C:\Program Files\Java\jdk1.8.0_31\bin\keytool.exe」にそのファイルがあった。パスを通せばファイル名だけでいけるが、今回は絶対パスで実行してみた。Windows7でコマンドプロンプト or powershellで次のコマンドをうった。

c:\>"C:\Program Files\Java\jdk1.8.0_31\bin\keytool.exe" -list -keystore C:\Users\hoge\.android\debug.keystore
キーストアのパスワードを入力してください:
***************** WARNING WARNING WARNING *****************
*キーストアに保存された情報の整合性は*
*検証されていません。整合性を検証するには*
*キーストアのパスワードを入力する必要があります。*
***************** WARNING WARNING WARNING *****************
キーストアのタイプ: JKS
キーストア・プロバイダ: SUNキーストアには1エントリが含まれますandroiddebugkey,2015/02/05, PrivateKeyEntry,
証明書のフィンガプリント(SHA1): 6E:02:XX:XX:XX:XX:XX:XX:X:XX:77:7D:F8c:\>

今回はパスワードは空にした。証明書のフィンガプリント(SHA1)の値をメモっておく。
Macの場合は、JDKインストール時に自動的にパスが通っているらしく、debug.keystoreのあるフォルダをカレントにして「 keytool -list -keystore debug.keystore 」コマンドでいけた。

デベロッパーコンソールでGoogle Maps API 用プロジェクト作成

GMA2_create_api_project_02
Google APIs Console にアクセスし、ログインする。

Start_using_the _Google_APIs _console
コンソールにはじめての場合は、新規プロジェクト作成のボタンが表示される。
※既に他のプロジェクトがある場合は、コンソール画面に入ってから新規プロジェクト作成かプロジェクト編集をする。
GMA2_Google_Maps_APIs
プロジェクトを選択し、左サイドバーの ”APIと認証>>API” をクリックする。今回必要なAPIは、”Google Maps Android API” なのでこれをクリックする。
GMA2_Google_Maps_APIs_02
APIを有効にする。

GMA2_Google_Maps_APIs_03
Enabled APIs タブで 有効API一覧にGoogle Maps Android API v2があるか確認。

Google Maps API key を取得

GMA2_Google_Maps_APIs_04
プロジェクトを選択し、左サイドバーの ”APIと認証>>認証情報” をクリックする。そして、公開 API へのアクセス>>新しいキーを作成 ボタンをクリックする。
GMA2_Google_Maps_APIs_05
Androidキーを選択する。
GMA2_Google_Maps_APIs_06
テキストエリアに上記で作成したフィンガープリントとアプリのパッケージ名をセミコロンで区切って入力する。そして作成ボタンをクリック。
GMA2_Google_Maps_APIs_07
APIキーが生成されるのでメモをしておく。

マニフェスト (AndroidManifest.xml) の設定

Add the Google Play services version to your app's manifest

Google Play services を使うために、<application>要素の子要素として以下のコードを追加する。

<!-- Add the Google Play services version -->
<meta-data
    android:name="com.google.android.gms.version" 
    android:value="@integer/google_play_services_version" />

@integer/google_play_service_version に対して、「Cannot resolve symbol '@integer/google_play_version' more...」のようなエラーが出ている場合は、Google Play Services SDKの設定がうまくできてない可能性があるので見直す。

Add the API key to your application

Google Maps Android API v2 を使うために、<application>要素の子要素として以下のコードを追加する。

<!-- Add the API key -->
 <meta-data
 android:name="com.google.android.maps.v2.API_KEY"
 android:value="取得したGoogle Maps API key"/>

Specify permissions

【必須】
Google Maps Android API を使うためには必要

android.permission.INTERNET Google Maps サーバからマップタイルをダウンロードするためAPIによって使われる。
android.permission.ACCESS_NETWORK_STATE データがダウンロード可能かどうか決定するのに接続状況をチェックするためAPIに許可する。
android.permission.WRITE_EXTERNAL_STORAGE デバイスの外部ストレージ領域にマップタイルをキャッシュするためAPIに許可する。

【任意】
プログラミングやMy Location レイヤーで現在地にアクセスしないならば、次のパーミションは推奨だが無視できる。

android.permission.ACCESS_COARSE_LOCATION デバイスの位置を決定するのにWiFiやモバイルセルラーデータを使うためにAPIに許可する。
android.permission.ACCESS_FINE_LOCATION とても狭いエリア内にデバイス位置を決定するのにGPSを使うためにAPIに許可する。

<manifest>要素の子要素として以下のコードを追加する。

  <!-- Add uses-permisson:Google Maps Android API required -->
 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 <!-- Add uses-permisson:Google Maps Android API recommended -->
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Specify requirement for OpenGL ES version 2

Google Maps Android APIは、OpenGL ESのバージョン2を使ってマップを描写するので、OpenGL ESのバージョン2がインストールされていない場合はマップが表示されない。<manifest>の子要素として 次の要素を追加することを推奨する。

<uses-feature
        android:glEsVersion="0x00020000" 
        android:required="true"/>

これで外部サービスの要件として通知する。特に、OpenGL ESのバージョン2をサポートしていないデバイス上でアプリを表示するのをGoogle Playストアで予防できる効果がある。

マップを表示する

今回は、メインアクティビティをMainActivity.javaとしてレイアウトはres/layout/activity-main.xml を読み込む。
※参考:Getting Started - Google Maps Android API v2 >> Add a map

[MainActivity.java]

 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
 }

[res/layout/activity-main.xml]

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/map"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:name="com.google.android.gms.maps.MapFragment"/>

googlemap_android_api2_demo
これで一応、ビルドしてマップが表示された。表示されない場合は、APIキー不正など何か設定がおかしいかもしれない。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です