네이버 클라우드 플랫폼에서 클라이언트 ID를 발급받아야 한다.
https://console.ncloud.com/dashboard
가이드에는 아래처럼 나와있다.
allprojects {
repositories {
google()
mavenCentral()
maven {
url 'https://naver.jfrog.io/artifactory/maven/'
}
}
}
하지만, 안드로이드 스튜디오 Arctic Fox버전 이후에 만든 프로젝트는 build.gradle 이 아니라 settings.gradle에 아래와 같이 레포지토리 정보를 추가해야 한다.
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
// 추가
maven {
url 'https://naver.jfrog.io/artifactory/maven/'
}
}
}
rootProject.name = "Promise"
include ':app'
// naver map
implementation 'com.naver.maps:map-sdk:3.15.0'
했더니?
Your project has set
android.useAndroidX=true
but configurationdebugRuntimeClasspath
still contains legacy support libraries
이런 오류가 떴다..
Jetifier를 사용하기 위해서는 gradle.properties 파일에 다음 코드를 추가한다.
android.useAndroidX=true
android.enableJetifier=true // 추가
해줬더니 해결이 되었다.
android.useAndroidX=true
Android 플러그인은 지원 라이브러리 대신 적절한 AndroidX 라이브러리를 사용합니다.
android.enableJetifier=true
Android 플러그인은 바이너리를 다시 작성해 기존 타사 라이브러리를 자동으로 이전하여 AndroidX를 사용합니다.
Support Library에 종속적인 라이브러리를 비슷한 AndroidX로 마이그레이션할 때 사용한다.
즉, 과거 안드로이드에서 자주 사용된 support library를 사용하는 써드 파티 라이브러리를 우리가 개발하는 AndroidX 프로젝트와 호환되도록 돕는 툴이다.
<manifest>
<application>
<meta-data
android:name="com.naver.maps.map.CLIENT_ID"
android:value="YOUR_CLIENT_ID_HERE" />
</application>
</manifest>
<androidx.fragment.app.FragmentContainerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/map"
android:name="com.naver.maps.map.MapFragment" />
MapFragment 및 MapView는 지도에 대한 뷰 역할만을 담당하므로 API를 호출하려면 인터페이스 역할을 하는 NaverMap 객체가 필요하다. MapFragment 또는 MapView의 getMapAsync() 메서드로 OnMapReadyCallback을 등록하면 비동기로 NaverMap 객체를 얻을 수 있다. NaverMap 객체가 준비되면 onMapReady() 콜백 메서드가 호출된다.
class MapFragmentActivity : FragmentActivity(), OnMapReadyCallback {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.map_fragment_activity)
val fm = supportFragmentManager
val mapFragment = fm.findFragmentById(R.id.map) as MapFragment?
?: MapFragment.newInstance().also {
fm.beginTransaction().add(R.id.map, it).commit()
}
mapFragment.getMapAsync(this)
}
@UiThread
override fun onMapReady(naverMap: NaverMap) {
// ...
}
}
@UiThread
override fun onMapReady(naverMap: NaverMap) {
val coord = LatLng(37.5154133, 126.9071288) // 영등포역 위도, 경도
val locationOverlay = naverMap.locationOverlay
locationOverlay.isVisible = true
locationOverlay.position = coord
val cameraUpdate = CameraUpdate.scrollTo(coord)
naverMap.moveCamera(cameraUpdate)
val marker = Marker()
marker.position = coord
marker.map = naverMap
}
주석이 달린 메서드 또는 생성자는 UI 스레드에서만 호출되어야 함을 나타냅니다. 주석이 달린 요소가 클래스인 경우 클래스의 모든 메서드를 UI 스레드에서 호출해야 합니다.
https://navermaps.github.io/android-map-sdk/guide-ko/2-1.html
https://stackoverflow.com/questions/71044526/your-project-has-set-android-useandroidx-true-but-configuration-debugruntimec
https://youngest-programming.tistory.com/659
https://bb-library.tistory.com/276