Google Maps Android API v2 のサンプルを動かしてみたら…

Google Maps Android API v2 が12月3日にリリースされたらしい。

主な機能として、2Dと3Dに対応したベクターベースのマップを利用したり、簡単な動作で地図を傾けたり回転させたりできるほか、主要空港やショッピングセンターといった建物のインドアマップを自分のアプリに取り入れることも可能。デベロッパから要望が多かったMap Fragmentsもサポートし、広い画面を備えたタブレット端末では、複数のパーツを組み合わせて複雑なユーザーインターフェイスを構成できる。

ということらしい。


というわけで、Google Maps Android API v2 を早速トライしてみたのでメモ。

Eclipse に Google Play services SDK をインストールする

Google Maps Android API v2 は Google Play services SDK の一部として提供されているので、まだ EclipseGoogle Play services SDK がインストールされていない場合はまずこれをインストールする。


手順は下記のページの通り。

1.Eclipse を起動して [Window]-[Android SDK Manager] で Android SDK Manager を開く


2.画面下の方にある [Extra]-[Google Play services] をチェックして [Install packages...] をクリックしてインストール

[Install packages...] をクリック後は画面の指示に従ってインストールを終了する。


以上で、Google Play services SDKandroid-sdk のフォルダにダウンロードされる。

Google Maps API Key を入手する

既に Google Maps Android v1 を使っている場合、API Key は入手しているけれどもそれは v2 では使えないので、再度取得しなければならない。


手順は下記のページの通り。

1.Google APIs Console にアクセス


2.[Create project...] をクリック
既に Google APIs Console にアクセスしたことのある人はこの手順は必要なし。


3.左のナビゲーションから [Services] を選択
多分最初は [Services] が表示されてる。


4.[Google Maps Android API v2] を見つけてスイッチをクリックして [ON] にする
[OFF] のスイッチをクリックすると [Review Terms of Service] 画面になるので、[Google Maps/Google Earth APIs Terms of Service] を読んで、OK なら [I agree to these terms.] をチェックして [Accept] をクリック。



5.左のナビゲーションから [API Access] を選択


6.[Create new Android key...]をクリックして Certificate fingerprint を入力


Certificate fingerprint は、今まで v1 を使っていた場合は既に Certificate fingerprint を作ったはずなので、ターミナルを開いて .android フォルダに移動して

keytool -list -v -keystore KEY_STORE_NAME.keystore

とすれば確認できる。(KEY_STORE_NAME は各人のキーファイルの名前)
MD5 でなく SHA-1 なので注意!)


まだの場合は作成する。

入力する値は、SHA1 の certificate fingerprint に続けてセミコロン、そしてアプリケーションのパッケージ名
例えば、certificate fingerprint が [45:B5:E4:6F:36:AD:0A:98:94:B4:02:66:2B:12:17:F2:56:26:A0:E0] で、アプリケーションのパッケージ名が [com.example.mapdemo] の場合はこんな感じ。

45:B5:E4:6F:36:AD:0A:98:94:B4:02:66:2B:12:17:F2:56:26:A0:E0;com.example.mapdemo


7.[Key for Android apps (with certificates)] が加わる
この中の [API key] が Google Maps Android API v2 を使うのに必要な API key。

Google Maps Android API v2 のサンプルアプリケーションを読み込む

とりあえず、サンプルをビルドして遊んでみる。
1.Eclipse の [File]-[Import...] で Import ダイアログを表示


2.[Android]-[Existing Android Code Into Workspace] でライブラリを Workspace に読み込む
読み込むのは
/extras/google/google_play_services/libproject/google-play-services_lib


3.Eclipse の [File]-[Import...] で Import ダイアログを表示


4.[Android]-[Existing Android Code Into Workspace] でサンプルを Workspace に読み込む
読み込むのは
/extras/google/google_play_services/samples/maps]


ワークスペースのプロジェクトはこんな感じになる。


5.読み込んだ com.example.mapdemo.MainActivity のプロパティから [Java Build Path] の [Libraries] タブを表示
プロパティは、プロジェクトを選択して右クリックメニューの一番下に [Properties] がある。


6.[Add Extrenal JARs...] をクリックして android-support-v4.jar を読み込む


7.次に左のリストから [Android] を選択
下の [Library] のリストに赤い×が付いてる。


8.[Add...] をクリックして [google-play-services_lib] を加える


以上で mapdemo サンプルがエラーなく読み込めた。

(@Override 云々のエラーが残っている時は、プロジェクトのプロパティで Java Compiler のバージョンを 1.5 にして 1.6 に戻すと大抵は消えます。)

Google Maps Android API v2 のサンプルアプリケーションを起動してみる

読み込んだサンプルアプリケーションに次は先ほど取得した API key を組み込む。


AndroidManifest.xml ファイルを開くとこんな感じになってる。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.mapdemo"
  android:versionCode="1"
  android:versionName="1.0">
  <permission
    android:name="com.example.mapdemo.permission.MAPS_RECEIVE"
    android:protectionLevel="signature"/>
  <uses-permission android:name="com.example.mapdemo.permission.MAPS_RECEIVE"/>
  <!-- Copied from Google Maps Library/AndroidManifest.xml. -->
  <uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16"/>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
  <!-- External storage for caching. -->
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  <!-- My Location -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  <!-- Maps API needs OpenGL ES 2.0. -->
  <uses-feature
    android:glEsVersion="0x00020000"
    android:required="true"/>
  <!-- End of copy. -->
  <application
    android:icon="@drawable/ic_launcher"
    android:label="@string/demo_title"
    android:hardwareAccelerated="true">
<!-- You must insert your own Google Maps for Android API v2 key in here. -->
    <meta-data
      android:name="com.google.android.maps.v2.API_KEY"
      android:value=""/>

親切に「You must insert your own Google Maps for Android API v2 key in here.」と書いてあるので、ここの meta-data に API key を入れる。
こんな感じになる。

    <meta-data
      android:name="com.google.android.maps.v2.API_KEY"
      android:value="AIzaSyBdVl-cTICSwYKrZ95SuvNw7dbMuDt1KG0"/>

上記 API key(AIzaSyBdVl-cTICSwYKrZ95SuvNw7dbMuDt1KG0)はサンプルのページに載っていたものなので、ここは各人のアプリケーション用に準備したものに変更する。


以上で準備は完了!


エミュレータで起動してみると…


ちゃんと起動した!
で、[Basic Map] をクリッくしてみると…

なにやらアラートが…
「This app won't run without Google Play services, which are missing from your phone.(via Bazaar)」だそうだ。
Google Play services がこの電話にはないから動かないってことらしい。
で、調べてみると

こんなん発見。
どうやら、今のところエミュレータじゃ Google Play services が必要なアプリは動かないみたいだ…。
残念。


今、手元にある実機は i'm Watch だけで、これは Android OS 1.6 なので、2.2 以上が必要な Google Maps Android API v2 は動かないし…。
というわけで、当分は Google Maps Android API v2 で遊べないということがわかったのでした、残念。


Kindle Fire HD が来るのは 12月の終わりだっけ?
ん? Google Play 対応しない Kindle Fire HD で、Google Play servicesって動くのか?


[2013/02/21 Update]
というわけで、エミュレータじゃダメだったけど、実機ではこの手順のままでちゃんと動いてます!