ドキュメント / セットアップ / Android / Mapbox

Mapbox セットアップ

Mapbox Maps SDK for Android を MapConductor から使う手順です。Mapbox は専用の Maven リポジトリからの配信で、アクセストークンをマニフェスト経由で渡します。

MODULE
com.mapconductor:for-mapbox
API KEY
アクセストークン
VIEW
MapboxMapView
TIME
15 分
ほかのプラットフォームiOSReact

前提

Android 開発環境(Android Studio)
Mapbox アカウント
パブリックアクセストークン(pk. で始まるもの)
STEP 01

アクセストークンを取得する

  1. Mapbox アカウントを作成します。
  2. Account Dashboard の Access tokens を開きます。
  3. デフォルトのパブリックトークンを使うか、新しく作成します。
注意
シークレットトークン(sk. で始まる)はアプリに埋め込まないでください。アプリで使うのはパブリックトークンです。
STEP 02

Mapbox の Maven リポジトリを足す

Mapbox Maps SDK は Maven Central にはなく、Mapbox 自身のリポジトリから取得します。

settings.gradle.ktsKotlin
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()

        // Mapbox Maven repository
        maven {
            url = uri("https://api.mapbox.com/downloads/v2/releases/maven")
        }
    }
}
STEP 03

Secrets Gradle Plugin を入れる

キーをソース管理に置かないための仕組みです。プラグインが secrets.properties を読み、ビルド時に AndroidManifest.xml のプレースホルダーへ値を差し込みます。

(root)/build.gradle.ktsKotlin
plugins {
    id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") version "2.0.1" apply false
}
STEP 04

依存関係を追加する

MapConductor は NDK27 バリアントに対してビルドしています。

app/build.gradle.ktsKotlin
plugins {
    // ... other plugins
    id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
}

dependencies {
    // Mapbox Maps SDK (NDK27 variant)
    implementation("com.mapbox.maps:android-ndk27:11.24.3")

    // MapConductor BOM pins every module below
    implementation(platform("com.mapconductor:mapconductor-bom:1.2.0"))

    implementation("com.mapconductor:core")
    implementation("com.mapconductor:for-mapbox")
}
STEP 05

マニフェストとトークンを設定する

AndroidManifest.xmlXML
<manifest>
    <!-- Add internet and location permissions -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <application>
        <!-- Mapbox Access Token -->
        <meta-data
            android:name="MAPBOX_ACCESS_TOKEN"
            android:value="${MAPBOX_ACCESS_TOKEN}" />
    </application>
</manifest>
secrets.propertiesProperties
MAPBOX_ACCESS_TOKEN=your_actual_access_token
注意
secrets.properties はバージョン管理にコミットしないでください。.gitignore に追加しておくと事故を防げます。CI では環境変数など別の安全な経路で渡します。

動作確認

ここまで動けば完了

Mapbox のスタイルで地図が出て、ズーム・パン・回転が効けば完了です。

TestMapbox.ktJetpack Compose
@Composable
fun TestMapbox(modifier: Modifier = Modifier) {
    val mapState = rememberMapboxMapViewState(
        cameraPosition = MapCameraPosition(
            position = GeoPoint(35.6762, 139.6503),
            zoom = 12.0,
        ),
    )

    // If the map appears, the setup is correct.
    MapboxMapView(modifier = modifier, state = mapState)
}

うまくいかないとき

地図が真っ白のまま

  • secrets.properties のトークンが正しいか、失効していないか確認します。
  • トークンが pk. で始まるパブリックトークンか確認します。
  • トークンのスコープに maps:read が含まれているか確認します。

依存が解決できない

  • settings.gradle.kts に Mapbox の Maven リポジトリがあるか確認します。
  • NDK27 バリアント(com.mapbox.maps:android-ndk27)を指定しているか確認します。

ビルドが通らない

  • 地図 SDK の座標とバージョンがバージョンカタログの指定と一致しているか確認します。
  • リポジトリ定義が settings.gradle.kts にあるか確認します(repositoriesMode が FAIL_ON_PROJECT_REPOS だと、モジュール側の repositories は無視されます)。
  • 複数の地図 SDK を同時に入れている場合は、依存の衝突がないか ./gradlew :app:dependencies で確認します。

次に

MapboxMapView が出たら、他のプロバイダと同じ書き方でオーバーレイを重ねられます。Mapbox ホスト以外のスタイルも指定できます。