이전 가이드

v2용 Navigation SDK의 가장 큰 변경사항은 여러 Navigation SDK 클래스Android용 Maps SDK의 상응 클래스로 대체한 것입니다.

버전 2.2부터 Navigation SDK는 Google Play Services Maps API를 거의 드롭인 대체하게 됩니다. 모든 API를 com.google.android.library.maps로 재구성하는 대신 Google Play 서비스와 마찬가지로 com.google.android.gms.maps로 패키징되었습니다. 이렇게 하면 Google Play 서비스 버전과 Navigation SDK 간 전환이 훨씬 간단해집니다.

이점

  • 메모리 사용량이 개선됩니다. 이제 Navigation SDK Android용 Maps SDK를 모두 사용할 때보다 메모리와 대역폭이 적게 사용됩니다.
  • 이제 지도뷰 모드에서 탐색 모드로의 전환이 더 원활해지고 작업이 더 쉬워집니다.
  • 이제 카메라를 더 세밀하게 제어할 수 있습니다.
  • 이제 다중선과 오버레이를 그리고, 지도에 맞춤 스타일을 추가하는 등의 작업을 할 수 있습니다.

그러나 스트리트 뷰 및 라이트 모드와 같은 기능은 지원되지 않습니다.

기본 요건

  • Navigation SDK 버전 2에서는 고품질 앱을 더 쉽게 작성할 수 있도록 하는 라이브러리, 도구, 안내 모음인 Android Jetpack을 사용합니다. 즉, AndroidX를 사용하려면 지원 라이브러리를 사용하지 않도록 앱을 이전해야 합니다. 자세한 내용은 AndroidX로 이전을 참고하세요.

1단계: Android용 Maps SDK에서 이전

Android용 Maps SDK의 기능 대부분이 이제 Navigation SDK 버전 2에 포함되었습니다. 탐색 컨텍스트에서 필요하지 않은 몇 가지 기능이 삭제되었습니다.

중요한 차이점

Android용 Maps SDK는 Google Play 서비스에 포함되어 있었습니다.
Navigation SDK v2에 번들로 제공되는 Android용 Maps SDK 기능은 새 버전의 Android용 Maps SDK를 기반으로 하며 Google Play 서비스에 포함되지 않습니다. 이러한 새로운 기능은 Google Play 서비스의 엔진보다 최신 엔진에서 실행되며 몇 가지 개선사항이 있습니다. 또한 지도가 Google Play 서비스 프로세스가 아닌 앱의 프로세스에서 실행된다는 의미이기도 합니다.
일부 수업의 이름이 변경되었습니다.
다음 표에는 이름이 변경된 클래스가 나와 있습니다. 이는 Android용 Maps SDK와 차별화하기 위한 것입니다.
Android용 Maps SDK 클래스 이름Navigation SDK 클래스 이름
MapView.java NavigationView.java
MapFragment.java SupportNavigationFragment.java
이러한 클래스에는 이전 NavigationView 클래스와 현재 MapView 클래스에서 사용할 수 있는 메서드가 혼합되어 있습니다. 탐색 지원이 있지만 MapViewMapFragment 클래스와 같다고 생각하면 됩니다.
삭제된 기능
일부 지도 기능은 내비게이션 맥락에서 적절하지 않거나 기술적 비호환성이 있어 삭제되었습니다. 삭제된 기능은 다음과 같습니다.
  • 스트리트 뷰
  • 라이트 모드(탐색에 충분하지 않음)
  • 카메라가 팔로우 모드일 때는 LocationProvider을 설정할 수 없습니다. 이는 탐색이 RoadSnappedLocationProvider에 의존하며 이 제공자로 전환하면 탐색 시 문제가 발생할 수 있기 때문입니다.
  • 카메라가 따라가기 모드일 때는 최소/최대 확대/축소 및 LatLng 범위를 적용해도 효과가 없습니다.
  • 누락된 기능으로 인해 문제가 발생하는 경우 고객 담당자에게 문의하세요.

이전 단계

  1. 빌드 (예: Gradle)에서 Android용 Maps SDK 통합을 삭제합니다. 두 SDK를 모두 사용하면 컴파일 오류가 발생합니다.
  2. MapView의 인스턴스를 NavigationView의 인스턴스로 바꿉니다.
  3. MapFragment의 인스턴스를 NavigationSupportFragment의 인스턴스로 바꿉니다.

애플리케이션에서 이전에 Navigation SDK를 사용하지 않았다면 이전이 완료됩니다.

2단계: Navigation SDK v1.x에서 이전

Navigation SDK의 v1.x 통합을 v2로 이전하려면 다음 단계를 따르세요.

1. 새 메서드를 사용하여 지도 가져오기

지도를 가져오는 방법이 변경되었습니다. v2 이전에는 동기식 호출을 사용하여 지도를 가져왔습니다. 이제 비동기 호출을 사용합니다. 다음 표에는 지도를 가져오기 위한 새 메서드와 이전 메서드가 나와 있습니다.

이전 방법새 방법
NavigationView.getMap() NavigationView.getMapAsync()
SupportNavigationFragment.getMap() SupportNavigationFragment.getMapAsync()

2. 라이브러리 이전

Navigation SDK의 v1.x에는 여러 Android용 Maps SDK 클래스의 자체 구현이 포함되어 있습니다. 이러한 클래스는 com.google.android.libraries.navigation 패키지에 속했습니다.

v2에서는 이러한 클래스가 com.google.android.gms.maps.model 패키지에 있는 Android용 Maps SDK 구현으로 대체되었습니다. 찾기 및 바꾸기를 실행하여 앱을 이전하여 새 클래스를 통합할 수 있습니다.

다음 표에는 이전 클래스와 새 클래스가 나와 있습니다.

이전 클래스새 수업
com.google.android.libraries.navigation.LatLng com.google.android.gms.maps.model.LatLng
com.google.android.libraries.navigation.LatLngBounds com.google.android.gms.maps.model.LatLngBounds
com.google.android.libraries.navigation.Marker com.google.android.gms.maps.model.Marker
com.google.android.libraries.navigation.MarkerOptions com.google.android.gms.maps.model.MarkerOptions
com.google.android.libraries.navigation.VisibleRegion com.google.android.gms.maps.model.VisibleRegion

3. 기존 API 변경사항 수용

다음 표에는 Google에서 Navigation SDK v2에 적용한 주요 변경사항이 나와 있습니다.

메서드변경
NavigationApi.cleanup() 삭제되었습니다. 이 메서드는 정상 작동에 사용되지 않았으며 예측할 수 없는 동작을 유발할 수 있습니다. 이 메서드에 대한 호출을 삭제해야 합니다.
RoadSnappedLocationProvider.requestLocationUpdates() 삭제되었습니다. 대신 addLocationListener()를 사용하세요.
RoadSnappedLocationProvider.stopRequestingLocationUpdates() 삭제되었습니다. 대신 removeLocationListener()를 사용하세요.

4. 새로운 Marker 클래스로 변경

이제 Navigation SDK v2에서는 Android용 Maps SDK와 동일한 Marker 클래스 구현을 사용합니다. 이로 인해 다음과 같은 변경사항이 적용됩니다.

메서드변경
addMarker(MarkerOptions markerOptions) 이제 com.google.android.gms.maps.model.MarkerOptions 클래스를 사용합니다.
removeMarker(Marker marker) 이 메서드는 더 이상 존재하지 않습니다. 대신 이제 Marker 클래스에 marker.remove() 메서드가 있습니다.
removeAllMarkers() 이 메서드는 더 이상 존재하지 않지만 지도에서 모든 마커, 다중선, 다각형, 오버레이를 삭제하는 clear() 메서드가 있습니다.

MarkerOptions 차이점

  • Navigation SDK v2에는 describeContents() 메서드가 존재하지 않습니다. onSaveInstanceState()를 호출하여 뷰 데이터를 저장할 수 있었습니다. 이제 구성 변경이 있을 때 뷰를 재구성할 수 있도록 뷰 세부정보를 직접 추적해야 합니다.
  • navMarker#icon(BitMap) 메서드가 mapMarker#icon(BitmapDescriptor)로 변경되었습니다. 이 변경사항을 적용하려면 BitMap에서 BitmapDescriptor를 사용하도록 이전해야 합니다.

마커 메서드

이제 com.google.android.gms.maps.model 패키지의 Marker 클래스를 사용합니다. 다음 표는 이 새로운 Marker 클래스를 사용할 때의 차이점을 보여줍니다.

메서드변경
getAnchorU() 더 이상 존재하지 않습니다.
getAnchorV() 더 이상 존재하지 않습니다.
getIcon() 더 이상 존재하지 않습니다.
구성 변경 후 지도 상태를 다시 만들어야 할 때 사용할 수 있도록 아이콘에 대한 참조를 직접 유지해야 합니다.
getPosition() 아직 존재합니다.
getTitle() 아직 존재합니다.

5. 카메라 제어

Navigation SDK v1.x에서 제공되는 카메라 컨트롤은 상대적으로 제한되었습니다. Navigation SDK의 버전 2는 이제 Android용 Maps SDK에서 사용하는 것과 동일한 카메라 모델을 사용합니다. 단, Navigation SDK v1.x의 팔로우 모드와 유사한 모델도 가져옵니다.

주요 차이점

  • com.google.android.libraries.navigation.Camera 클래스는 v2에서 삭제되었습니다.
    • Camera.showRouteOverview()NavigationViewSupportNavigationFragment로 이동했습니다.
    • Camera.followMyLocation() 메서드를 GoogleMap로 이동했습니다.
  • Camera.setLocation() 호출을 GoogleMap.moveCamera() 또는 GoogleMap.animateCamera()로 대체할 수 있습니다.
  • 팔로우 모드에 대한 자세한 정보를 제공하기 위해 setOnFollowMyLocationCallback()isCameraFollowingMyLocation()GoogleMap에 추가되었습니다.

3단계: 활동 흐름 병합

이전에 Navigation SDK V1을 사용하고 위의 안내를 따랐다면 NavigationView 클래스를 사용하도록 지도 사용 사례를 이전하고 GoogleMap를 사용하도록 탐색 사용 사례를 이전했습니다. 하지만 GoogleMap의 인스턴스 두 개와 NavigationView의 인스턴스 두 개가 있습니다. 즉, 여전히 필요한 것보다 더 많은 메모리를 사용하게 되며 두 인스턴스 간에 전환하면 사용자 인터페이스의 원활한 렌더링에서 눈에 띄는 일시중지가 발생할 수 있습니다. 이 문제를 해결하려면 활동/프래그먼트 흐름을 병합하여 단일 인스턴스를 공유할 수 있도록 해야 합니다. 이렇게 하면 더 매끄러운 사용자 환경을 제공하고 애플리케이션을 간소화할 수 있습니다.