🐠

mapbox_glのAndroid対応

2021/09/05に公開

MapBoxのFlutter向け非公式ライブラリ mapbox_gl のmaster最新コミット (f90d54) をAndroidで動かしたときの設定メモです。

iOSでの設定つまづきポイントはこちら

ビルド時

gradleのバージョンを 6.3 に上げる

Could not initialize class org.codehaus.groovy.runtime.InvokerHelper みたいなエラーを潰す。

android/gradle/wrapper/gradle-wrapper.properties
  distributionBase=GRADLE_USER_HOME
  distributionPath=wrapper/dists
  zipStoreBase=GRADLE_USER_HOME
  zipStorePath=wrapper/dists
- distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
+ distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip

minSdkVersionを 20 に上げる

minSdkVersion 16 cannot be smaller than version 20 declared in library と言われるので従う。

android/app/build.gradle
  android {
      defaultConfig {
-         minSdkVersion 16
+         minSdkVersion 20
      }
  }

Registry tokenを設定する

SDK Registry token is null. See README.md for more information. と言われる。
Registry tokenとはおそらく、mapbox_gl が内部で使っているMapBox SDKのダウンロードに使うためのトークンのこと。これがないと403でアクセスできない現象をiOSで見た (それは ~/netrc にトークンを置いて解決したのにAndroidは無理なのか?)。

環境変数に SDK_REGISTRY_TOKEN を設定できればどんな手段でも良い。
VSCodeならワークスペース設定が便利そう。

.vscode/settings.json
{
  "dart.env": {
    "SDK_REGISTRY_TOKEN": "YOUR_TOKEN_HERE"
  }
}

実行時

アクセストークンを渡す

Failed to find an Access Token in the Application meta-data. と言われる。

これも MapboxMap Widgetのinitializerにトークンを渡すことができればどんな手段でも良いが、ソースコードにベタ書きしてコミットしてしまうのはトークンに設定した権限によっては問題かもしれないので、環境変数か何かを介して渡せるようにするのが良いと思う。
flutter_dotenv が便利そう。

GitHubで編集を提案

Discussion