Android Studio 用の Google マップ テンプレートを使用して、地図を表示する Android アプリを作成します。既存の Android Studio プロジェクトを設定する場合は、プロジェクトの設定をご覧ください。
このクイックスタートは、Java または Kotlin を使用する基本的な Android 開発に精通しているデベロッパーを対象としています。
開発環境を設定する
- Arctic Fox 以降の Android Studio が必要です。お持ちでない場合は、ダウンロードしてインストールしてください。
- Android Studio で Android Gradle プラグイン バージョン 7.0 以降を使用していることを確認してください。
Android デバイスを設定する
Maps SDK for Android を使用するアプリを実行するには、Android 4.0 以降をベースとし Google API を含む Android デバイスまたは Android Emulator にアプリをデプロイする必要があります。
- Android デバイスを使用する場合は、ハードウェア デバイス上でのアプリの実行の手順を行ってください。
- Android Emulator を使用する場合は、Android Studio に付属している Android Virtual Device(AVD)Manager を使用して仮想デバイスを作成し、エミュレータをインストールしてください。
Android Studio で Google マップ プロジェクトを作成する
Android Studio を開き、[Welcome to Android Studio] ウィンドウで [Create New Project] をクリックします。
[New Project] ウィンドウで、[Phone and Tablet] カテゴリの [Google Maps Activity] を選択し、[Next] をクリックします。
以下のように [Google Maps Activity] フォームに入力します。
[Language] を Java または Kotlin に設定します。Maps SDK for Android では、どちらの言語も完全にサポートされています。Kotlin について詳しくは、Kotlin で Android アプリを開発するをご覧ください。
[Minimum SDK] は、テストするデバイスと互換性がある SDK のバージョンに設定します。Maps SDK for Android 18.0.x の要件を満たすバージョンを選択してください。現在は Android API レベル 19(Android 4.4 KitKat)以上が必要です。SDK バージョン要件についての最新情報はリリースノートでご確認ください。
[Finish] をクリックします。
Android Studio により Gradle が開始され、プロジェクトがビルドされます。この処理には、しばらく時間がかかることがあります。
ビルドが完了すると、Android Studio が
AndroidManifest.xml
ファイルとMapsActivity
ファイルを開きます。アクティビティの名前が異なる場合がありますが、これはセットアップ時に設定した名前になります。AndroidManifest.xml
ファイルには、Google Maps API キーを取得して local.properties ファイルに追加する手順が記載されていますが、実際にはAndroidManifest.xml
ファイルに API キーを保存しないように注意してください。この保存方法では、後述の方法ほど安全に API キーを保存できません。代わりに、後続のセクションの説明に従って Cloud プロジェクトを作成し、API キーの設定を行います。
Google Cloud プロジェクトをセットアップする
以下の各タブをクリックして、Cloud Console の設定を完了してください。
ステップ 1
コンソール
-
Google Cloud Console の [プロジェクトの選択] ページで [新しいプロジェクト] をクリックし、新しい Cloud プロジェクトの作成を開始します。
-
Cloud プロジェクトで お支払いが有効になっていることを確認します。
Google Cloud では、無料トライアルを提供しています。トライアルは、90 日が経過するか、アカウントの費用が 300 ドルに達した時点のいずれか早い方の時点で終了します。解約はいつでも可能です。Google Maps Platform では、クレジット(毎月 200 ドル分)が付与されます。詳しくは、請求先アカウントのクレジットおよび Google Maps Platform の料金をご覧ください。
Cloud SDK
gcloud projects create "PROJECT"
詳しくは、Google Cloud SDK、Cloud SDK のインストール、および以下のコマンドをご覧ください。
ステップ 2
Google Maps Platform を使用するには、プロジェクトで使用する API または SDK を有効にする必要があります。
コンソール
Cloud SDK
gcloud services enable \ --project "PROJECT" \ "maps-android-backend.googleapis.com"
詳しくは、Google Cloud SDK、Cloud SDK のインストール、および以下のコマンドをご覧ください。
ステップ 3
このステップでは API キーを作成します。本番環境で API キーを使用する場合は、API キーを制限することを強くおすすめします。詳しくは、各サービスの API キーの使用ページをご覧ください。
API キーは、使用量を正確に集計して課金するため、プロジェクトに関連付けられたリクエストであることを認証する一意の識別子です。少なくとも 1 つの API キーをプロジェクトに関連付ける必要があります。
API キーを作成するには:
コンソール
-
[Google Maps Platform] > [認証情報] ページに移動します。
-
[認証情報] ページで、[認証情報を作成] > [API キー] をクリックします。
[API キーを作成しました] ダイアログで、新しく作成された API キーが表示されます。 -
[閉じる] をクリックします。
新しい API キーは、[認証情報] ページの [API キー] に一覧で表示されます。
(本番環境で使用する前に必ず API キーを制限するようにしてください)
Cloud SDK
gcloud alpha services api-keys create \ --project "PROJECT" \ --display-name "DISPLAY_NAME"
詳しくは、Google Cloud SDK、Cloud SDK のインストール、および以下のコマンドをご覧ください。
アプリに API キーを追加する
このセクションでは、アプリで安全に参照されるように API キーを保存する方法を説明します。API キーは、バージョン管理システムにはチェックインせず、プロジェクトのルート ディレクトリにある local.properties
ファイルに保存することをおすすめします。local.properties
ファイルについて詳しくは、Gradle プロパティ ファイルをご覧ください。
このタスクを効率化するには、Android 用 Secrets Gradle プラグインを使用します。プラグインをインストールして API キーを保存するには:
- Android Studio でプロジェクト レベルの
build.gradle
ファイルを開き、buildscript
の配下にあるdependencies
要素に次のコードを追加します。plugins { // ... id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.1' apply false }
- 次に、モジュール レベルの
build.gradle
ファイルを開き、次のコードをplugins
要素に追加します。id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
- ファイルを保存して、プロジェクトを Gradle と同期します。
- プロジェクト レベルのディレクトリで
local.properties
を開き、次のコードを追加します。YOUR_API_KEY
は実際の API キーに置き換えてください。MAPS_API_KEY=YOUR_API_KEY
- ファイルを保存します。
AndroidManifest.xml
ファイルでcom.google.android.geo.API_KEY
に移動し、android:value attribute
を次のように更新します。<meta-data android:name="com.google.android.geo.API_KEY" android:value="${MAPS_API_KEY}" />
注: 上記のように、com.google.android.geo.API_KEY
は、API キーとして推奨されるメタデータ名です。この名前のキーは、Android プラットフォームで Google マップベースの複数の API(Maps SDK for Android など)の認証に使用できます。下位互換性を確保するため、API では com.google.android.maps.v2.API_KEY
という名前もサポートされています。この従来の名前は、Android Maps API v2 の認証にのみ使用できます。アプリでは、API キーのメタデータ名を 1 つのみ指定できます。両方を指定すると、API から例外がスローされます。
コードを確認する
テンプレートで提供されるコードを確認します。特に、Android Studio プロジェクト内の以下のファイルを確認してください。
マップ アクティビティ ファイル
マップ アクティビティ ファイルは、アプリのメイン アクティビティです。このファイルには、地図を管理し表示するためのコードが格納されます。アクティビティを定義するファイルのデフォルトの名前は MapsActivity.java
です(アプリの言語として Kotlin を設定した場合は MapsActivity.kt
)。
マップ アクティビティの主な要素は次のとおりです。
SupportMapFragment
オブジェクトは、アプリの UI の親要素であり、地図のライフサイクルを管理します。GoogleMap
オブジェクトは、地図のデータおよびビューへのアクセスを提供します。これは、Maps SDK for Android のメインクラスです。SupportMapFragment
オブジェクトとGoogleMap
オブジェクトについて詳しくは、地図オブジェクトのガイドをご覧ください。moveCamera
関数は、オーストラリアのシドニーのLatLng
座標に地図の中心を合わせます。通常、地図を追加する際に最初に設定するのは、地図の場所とカメラの設定(表示角度、地図の向き、ズームレベルなど)です。詳しくは、カメラとビューのガイドをご覧ください。
マップ アクティビティ ファイルには、以下のコードが含まれています。
Java
import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback { private GoogleMap mMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } /** * Manipulates the map once available. * This callback is triggered when the map is ready to be used. * This is where we can add markers or lines, add listeners or move the camera. In this case, * we just add a marker near Sydney, Australia. * * If Google Play services is not installed on the device, the user will be prompted to install * it inside the SupportMapFragment. This method will only be triggered once the user has * installed Google Play services and returned to the app. */ @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; // Add a marker in Sydney and move the camera LatLng sydney = new LatLng(-34, 151); mMap.addMarker(new MarkerOptions() .position(sydney) .title("Marker in Sydney")); mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); } }
Kotlin
import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import com.google.android.gms.maps.CameraUpdateFactory import com.google.android.gms.maps.GoogleMap import com.google.android.gms.maps.OnMapReadyCallback import com.google.android.gms.maps.SupportMapFragment import com.google.android.gms.maps.model.LatLng import com.google.android.gms.maps.model.MarkerOptions internal class MapsActivity : AppCompatActivity(), OnMapReadyCallback { private lateinit var mMap: GoogleMap override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_maps) // Obtain the SupportMapFragment and get notified when the map is ready to be used. val mapFragment = supportFragmentManager .findFragmentById(R.id.map) as SupportMapFragment mapFragment.getMapAsync(this) } /** * Manipulates the map once available. * This callback is triggered when the map is ready to be used. * This is where we can add markers or lines, add listeners or move the camera. In this case, * we just add a marker near Sydney, Australia. * If Google Play services is not installed on the device, the user will be prompted to install * it inside the SupportMapFragment. This method will only be triggered once the user has * installed Google Play services and returned to the app. */ override fun onMapReady(googleMap: GoogleMap) { mMap = googleMap // Add a marker in Sydney and move the camera val sydney = LatLng(-34.0, 151.0) mMap.addMarker(MarkerOptions() .position(sydney) .title("Marker in Sydney")) mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)) } }
モジュールの Gradle ファイル
モジュールの build.gradle
ファイルには、Maps SDK for Android で必要とされる以下のマップの依存関係が含まれています。
dependencies { implementation 'com.google.android.gms:play-services-maps:18.1.0' // ... }
マップの依存関係の管理については、バージョニングをご覧ください。
XML レイアウト ファイル
activity_maps.xml
ファイルは、アプリの UI の構造を定義する XML レイアウト ファイルです。このファイルは res/layout
ディレクトリにあります。activity_maps.xml
ファイルは、以下の要素を含むフラグメントを宣言します。
tools:context
は、フラグメントのデフォルト アクティビティをMapsActivity
に設定します。このアクティビティは、マップ アクティビティ ファイルで定義されています。android:name
は、フラグメントのクラス名をSupportMapFragment
に設定します。これは、マップ アクティビティ ファイルで使用されているフラグメントのタイプです。
XML レイアウト ファイルには、以下のコードが含まれています。
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/map"
tools:context=".MapsActivity"
android:name="com.google.android.gms.maps.SupportMapFragment" />
アプリをデプロイして実行する
アプリが正常に実行されると、次のスクリーンショットのように、オーストラリアのシドニーを中心とする地図が表示され、シドニーにマーカーが配置されます。
アプリをデプロイして実行するには:
- Android Studio で [Run] メニュー オプション(またはプレイボタンのアイコン)をクリックして、アプリを実行します。
- デバイスを選択するよう求めるプロンプトが表示されたら、以下のいずれかのオプションを選択します。
- コンピュータに接続されている Android デバイスを選択します。
- または、[Launch emulator] ラジオボタンをオンにして、以前に設定した仮想デバイスを選択します。
- [OK] をクリックします。Android Studio によって Gradle が起動され、アプリのビルドが完了すると、デバイスまたはエミュレータに結果が表示されます。アプリが起動するまで、数分かかることがあります。
次のステップ
地図を設定する: このトピックでは、カメラの位置、地図のタイプ、UI コンポーネント、操作など、地図の初期設定およびランタイム設定を行う方法について説明します。
地図を Android アプリに追加する(Kotlin): この Codelab では、Maps SDK for Android の主な機能のいくつかを実際にアプリで使用する方法について説明します。
Maps Android KTX ライブラリを使用する: この Kotlin 拡張機能(KTX)ライブラリを使用すると、Maps SDK for Android の使用中に Kotlin 言語機能の一部を利用できるようになります。