Mapbox Migrate to v10

792 阅读2分钟

下载官方Demo

Download and Install 官方Demo:

github.com/mapbox/mapb…, 下载后。导入到AS中,选择mapbox-maps-android 根目录下的 build.ktp 文件, 中设置好 password

配置 developer-config下的 mapbox_access_token.

Register Token

Register MAPBOX_DOWNLOADS_TOKEN

docs.mapbox.com/android/map… 官方引导页

account.mapbox.com/access-toke… 创建 token, 用于 Project的 build.kt, 新版Project setting.kt的gradle配置文件中使用,注意勾选 DOWNLOADS:READ 选项。

Android Studio 低于 Arctic Fox (2020.3.1) 并且 gradle 版本低于V6.0时,配置build.gradle 文件

allprojects {
    repositories {
        maven {
              url 'https://api.mapbox.com/downloads/v2/releases/maven'
              authentication {
                  basic(BasicAuthentication)
              }
              credentials {
                // Do not change the username below.
                // This should always be `mapbox` (not your username).
                  username = "mapbox"
                  // Use the secret token you stored in gradle.properties as the password
                  password = project.properties['MAPBOX_DOWNLOADS_TOKEN'] ?: ""
              }
          }
    }
}

Android Studio Arctic Fox(2020.3.1) 并且gradle 版本高于V6.0时,配置setting.gradle文件

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven {
          url 'https://api.mapbox.com/downloads/v2/releases/maven'
          authentication {
            basic(BasicAuthentication)
          }
          credentials {
            // Do not change the username below.
            // This should always be `mapbox` (not your username).
            username = "mapbox"
            // Use the secret token you stored in gradle.properties as the password
            password = MAPBOX_DOWNLOADS_TOKEN
          }
        }
    }
}

项目module里引入Mapbox jar 包

api "com.mapbox.maps:android:10.3.0"

替换上以上注册的 MAPBOX_DOWNLOADS_TOKEN.

代码中注册使用 mapbox_access_token(我代码里沿用了10以前的key), V10.2及以上版本:

ResourceOptionsManager.getDefault(requireContext(), getString(R.string.mapbox_key)).update {
        tileStoreUsageMode(TileStoreUsageMode.READ_ONLY)
      }

以下是官网给出来的Version 10 跟 Pre 10之间的包的区别

Packagepre-v10v10
Maven group ID for mapcom.mapbox.mapboxsdkcom.mapbox.maps
Maven artifact ID for mapmapbox-android-sdkandroid
Maven group ID for pluginscom.mapbox.mapboxsdkcom.mapbox.plugin
Maven group ID for pluginscom.mapbox.mapboxsdkcom.mapbox.extension
Maven artifact ID for pluginsmapbox-android-plugin-PLUGINNAMEmaps-PLUGINNAME
Package name for mapscom.mapbox.mapboxsdk.mapscom.mapbox.maps
MapView class in the layoutcom.mapbox.mapboxsdk.maps.MapViewcom.mapbox.maps.MapView

Location相关的操作也不再需要单独引入 Plugin包了。

正常情况下MapView基本上可以用了。

MapView的生命周期方法缩减为 onStart(), onStop(), onLowMemory(), onDestory()

更多用法上的差异可参见官方的文档:

docs.mapbox.com/android/map…

正常情况下,就可以创建Fragment加载显示 MapView了。

这里我在项目里遇到一个阻碍我蛮久的问题,最终在github demo代码里的issues里有找到了解答。

github.com/mapbox/mapb…

返回以下这个error:

java.lang.UnsatisfiedLinkError: No implementation found for void com.mapbox.maps.assets.AssetManagerProvider.initialize(android.content.res.AssetManager) (tried Java_com_mapbox_maps_assets_AssetManagerProvider_initialize and Java_com_mapbox_maps_assets_AssetManagerProvider_initialize__Landroid_content_res_AssetManager_2)
        at com.mapbox.maps.assets.AssetManagerProvider.initialize(Native Method)
        at com.mapbox.maps.MapController.<init>(MapController.kt:65)
        at com.mapbox.maps.MapView.<init>(MapView.kt:101)
        at com.mapbox.maps.MapView.<init>(MapView.kt:52)
        at com.mapbox.maps.MapView.<init>(MapView.kt:52)

最后找到元音是我们的App的Manifest.xml 文件里有 加入了

 <!-- work manager -->
  <provider
     android:name="androidx.startup.InitializationProvider"
     android:authorities="${applicationId}.androidx-startup"
     tools:node="remove" />
<!-- work manager -->

Issues 中的给出的解决方案是在 自定义Application的 onCreate()方法里加入以下代码:

 AppInitializer.getInstance(this)
            .initializeComponent(MapboxMapsInitializer::class.java)

支持升级到 V10的工作初步完成。

\