안녕하세요.
길찾기 SDK를 이용하여 경로 탐색 후 안내 화면에서 부산역을 목적지로 설정하고 경로 안내 시 하단 UI가 표시되지 않는 현상이 자주(대부분) 발생하고 있습니다.
비교적 짧은 경로(강남역) 그리고 중간 정도의 경로(경주역)을 목적지로 하였을 때는 하단 UI가 표시됩니다.
더불어 화면에는 보이지 않지만 화면 우하단을 클릭하면 메뉴가 선택됩니다.
[부산역 탐색 후 안내 화면]
[부산역 탐색 후 우하단 클릭시]
[강남역 탐색 후 안내 화면]
샘플 앱 소스를 보고 코드를 작성한 상태로 이와 같은 현상을 회피하거나 해결 할 수 있는 방안이 있는지 확인 요청 드립니다.
감사합니다.
안녕하세요, 카카오모빌리티 기술 제휴 담당자입니다.
해당 문제는 최신 SDK를 사용하시면 해결될 것으로 보입니다. GPS 신호를 정상적으로 받지 못한 상태에서 발생한 에러로 현재 최신 버전에서는 픽스되었습니다.
감사합니다.
1개의 좋아요
답변 주셔서 감사드립니다.
최신 SDK로 업데이트 하여 테스트 해 보도록 하겠습니다.
최신 SDK 버전이 몇 버전인지 확인해 주실 수 있으신가요?
오늘 발행된 1.10.0이 가장 최신 버전입니다만,
1.10.0에서 OS 버전 상향 등의 업데이트가 있기 때문에
바로 이전 버전인 1.9.4 버전을 사용하시면 좋을 것 같습니다.
감사합니다.
1개의 좋아요
안녕하세요.
1,9.4로 수정 진행 중 입니다.
수정 된 내용이 많아 수정이 오래 걸리고 있는데, 버전이 올라가는 것은 어떤 사이트를 참고하면 되는 것인지요?
버전이 올라갈 때, 수정 사항도 함께 볼 수 있는 사이트가 있다면 참고 할 수 있도록 답변 요청 드립니다.
버전이 올라가면 샘플 소스(다운로드 받을 수 있는 경로 포함)도 함께 업데이트 되는 것인지도 확인 요청 드립니다.
새 버전 적용 후 에러 나는 부분들을 주석 처리하고 실행해 보았으나, 앱이 정상 실행 되지 않아 문의 드립니다.
감사합니다.
버전 업데이트는 카카오모빌리티 디벨로퍼스 사이트의 문서 페이지에서 확인하실 수 있습니다.
버전에 따른 수정 사항은 각 SDK의 릴리스 노트를 참고해 주세요.
1.6.0 이후 버전부터는 gradle을 통한 다운로드만 지원하고 있기 때문에 여기를 참고하셔서 버전업 해주시면 됩니다.
1개의 좋아요
-
SDK 1.9.4 버전으로 설정 한 후 일부 FloatPoint를 DoublePoint로 수정
(1) mRouteCustomObjectList: DoublePoint로 변경
(2) reverseGeocodeWithPos: DoublePoint로 변경
-
isVisiblePOI 클래스 멤버 삭제
-
routeTheme: Access 안됨
-
기존 override 함수들 중 지원하지 않는 override 함수 제거
(1) onPOISelected → 기존 코드 다른 함수로 변경 필요한 것인지 확인 필요
(2) onRouteSelected → 기존 코드 다른 함수로 변경 필요한 것인지 확인 필요
(3) onUserLocationAnimationEnded
(4) onMarkerSelected → 기존 코드 다른 함수로 변경 필요한 것인지 확인 필요
(5) guidanceRouteChanged → 기존 코드 다른 함수로 변경 필요한 것인지 확인 필요
-
신규 override 함수 추가
(1) onDoubleTapped → 함수 호출되는 경우 확인 필요
(2) onLongPressed → 함수 호출되는 경우 확인 필요
(3) onSingleTapped → 함수 호출되는 경우 확인 필요
(4) naviViewDidUpdateCustomButton → 함수 호출되는 경우 확인 필요
(5) naviViewIsArrival → 함수 호출되는 경우 확인 필요
(6) naviViewPopupOpenCheck → 함수 호출되는 경우 확인 필요
(7) naviViewScreenState → 함수 호출되는 경우 확인 필요
(8) guidanceRouteChanged → 함수 호출되는 경우 확인 필요
-
KNRoute의 viaLocations 삭제됨 (일단 주석 처리 하였으나, 수정 필요한 것으로 보임)
위 1,2,3,4, 5, 6 처리 후 실행하였으나, toolbar 관련 소스에서 앱 비정상 종료 됨
소스 Revert하여 Log를 커멘트로 남기지는 못하였습니다. → Log 아래 추가하였습니다.
특히, 위 6번 항목은 수정 방법 가이드 요청 드립니다. (너무 막연하게 작성했네요. 수정하고자 하는 소스는 아래와 같습니다.)
fun setFullRouteData(trip: KNTrip, route: MutableList<KNRoute>) {
_fullRouteInfoData.value = FullRouteData().apply {
val endLocation = route[0].mainDirectionList().last().location
var tempLocation = route[0].mainDirectionList().first().location
if (route[0].viaLocations != null && route[0].viaLocations!!.isNotEmpty()) {
val list = route[0].viaLocations!!
for (i in list.indices) {
val point = WayPointInfos(
trip.vias!![i].name,
KNToTimeStr(tempLocation.timeToLocation(list[i])),
KNToDistStr(tempLocation.distToLocation(list[i]))
)
wayPoints.add(point)
tempLocation = list[i]
}
}
goalTime = KNToTimeStr(tempLocation.timeToLocation(endLocation))
goalDist = KNToDistStr(tempLocation.distToLocation(endLocation))
goalName = trip.goal.name
pri_totalDist = KNToDistStr(route[0].totalDist)
pri_totalTime = KNToTimeStr(route[0].totalTime)
if (route.size > 1) {
sec_totalDist = KNToDistStr(route[1].totalDist)
sec_totalTime = KNToTimeStr(route[1].totalTime)
}
}
}
비정상 종료 로그 추가 드립니다.
--------- beginning of crash
2024-02-29 15:31:15.466 5155-5284 AndroidRuntime com.ways1.ignomad E FATAL EXCEPTION: Thread-14
Process: com.ways1.ignomad, PID: 5155
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. Expected: main Calling: Thread-14
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:9994)
at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:2082)
at android.view.View.requestLayout(View.java:27043)
at android.view.View.requestLayout(View.java:27043)
at android.view.View.requestLayout(View.java:27043)
at android.view.View.requestLayout(View.java:27043)
at android.view.View.requestLayout(View.java:27043)
at android.view.View.requestLayout(View.java:27043)
at androidx.drawerlayout.widget.DrawerLayout.requestLayout(DrawerLayout.java:1353)
at android.view.View.requestLayout(View.java:27043)
at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:380)
at android.view.View.requestLayout(View.java:27043)
at android.view.ViewGroup.addView(ViewGroup.java:5102)
at android.view.ViewGroup.addView(ViewGroup.java:5076)
at androidx.appcompat.widget.Toolbar.addSystemView(Toolbar.java:1656)
at androidx.appcompat.widget.Toolbar.setTitle(Toolbar.java:851)
at androidx.appcompat.widget.ToolbarWidgetWrapper.setTitleInt(ToolbarWidgetWrapper.java:262)
at androidx.appcompat.widget.ToolbarWidgetWrapper.setWindowTitle(ToolbarWidgetWrapper.java:244)
at androidx.appcompat.app.ToolbarActionBar.(ToolbarActionBar.java:78)
at androidx.appcompat.app.AppCompatDelegateImpl.setSupportActionBar(AppCompatDelegateImpl.java:646)
at androidx.appcompat.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:185)
at com.ways1.ignomad.activity.MainActivity.initToolBar(MainActivity.kt:208)
at com.ways1.ignomad.activity.MainActivity.initAppSettings(MainActivity.kt:202)
at com.ways1.ignomad.activity.MainActivity.access$initAppSettings(MainActivity.kt:36)
at com.ways1.ignomad.activity.MainActivity$sdkInit$1$1$1.invoke(MainActivity.kt:194)
at com.ways1.ignomad.activity.MainActivity$sdkInit$1$1$1.invoke(MainActivity.kt:183)
at com.kakaomobility.knsdk.KNBaseSDK$e.a(KNBaseSDK.kt:26)
at com.kakaomobility.knsdk.KNBaseSDK$e.invoke(KNBaseSDK.kt:1)
at com.kakaomobility.knsdk.KNBaseSDK$c$a$b.invoke(KNBaseSDK.kt:18)
at com.kakaomobility.knsdk.m0.g$a$a.invoke(KNMapManager.kt:9)
at com.kakaomobility.knsdk.s0.v0.invoke(KNMapLoader2.kt:40)
at com.kakaomobility.knsdk.s0.c1$f.b(KNRealmLoader.kt:468)
at com.kakaomobility.knsdk.s0.w1.invokeSuspend(Unknown Source:12)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at com.kakaomobility.knsdk.z.b1.a(KNThreadPoolPriorityThreadFactory.kt:1)
at com.kakaomobility.knsdk.z.b1$$ExternalSyntheticLambda0.run(Unknown Source:2)
at java.lang.Thread.run(Thread.java:1012)
Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@629d232, java.util.concurrent.Executors$FinalizableDelegatedExecutorService@285eb83]
2024-02-29 15:31:15.488 5155-5284 Process com.ways1.ignomad I Sending signal. PID: 5155 SIG: 9
---------------------------- PROCESS ENDED (5155) for package com.ways1.ignomad ----------------------------
안녕하세요, 카카오모빌리티 기술 제휴 담당자입니다.
아래와 같이 답변드립니다.
- 좌표관련 코드는 DoublePoint로 변경하시면 됩니다
- deprecated 되었습니다
-
https://developers.kakaomobility.com/docs/android-ref-kotlin/class-KNComponentMapView/ 참고 부탁드립니다.
-
(1) onPOISelected → KNMapPOIEventListener 확인 부탁드립니다.
(2) onRouteSelected → KNMapRouteEventListener 확인 부탁드립니다.
(3) onUserLocationAnimationEnded - KNMapUserLocationEventListener 확인 부탁드립니다.
(4) onMarkerSelected → KNMarkerEventListener 확인 부탁드립니다.
(5) guidanceRouteChanged → KNGuidance_GuideStateDelegate와 동일하며 해당 함수만 parameter 추가가 되었습니다
5.
(1 ~ 3) https://developers.kakaomobility.com/docs/android-ref-kotlin/interface-KNMapViewEventListener/ 에서 확인하실 수 있습니다
(4 ~ 7) https://developers.kakaomobility.com/docs/android-ref-kotlin/interface-KNNaviView_StateDelegate/ 에서 확인하실 수 있습니다
(8) guidanceRouteChanged → 경로가 변경될 때 호출되며, 기존에 사용하시던 KNGuidance_GuideStateDelegate.guidanceRouteChanged에서 parameter가 추가되었습니다
6. KNRoute.locationOfPoi()를 사용하셔야 합니다
코드는 아래와 같이 수정하면 될 것 같습니다
fun setFullRouteData(trip: KNTrip, route: MutableList) {
_fullRouteInfoData.value = FullRouteData().apply {
val endLocation = route[0].mainDirectionList().last().location
var tempLocation = route[0].mainDirectionList().first().location
if (trip.vias != null && trip.vias!!.isNotEmpty()) {
for (via in trip.vias!!) {
val viaLocation = route[0].locationOfPoi(via)
if (viaLocation != null) {
val point = WayPointInfos(
via.name,
KNToTimeStr(tempLocation.timeToLocation(viaLocation)),
KNToDistStr(tempLocation.distToLocation(viaLocation))
)
wayPoints.add(point)
tempLocation = viaLocation
}
}
}
goalTime = KNToTimeStr(tempLocation.timeToLocation(endLocation))
goalDist = KNToDistStr(tempLocation.distToLocation(endLocation))
goalName = trip.goal.name
pri_totalDist = KNToDistStr(route[0].totalDist)
pri_totalTime = KNToTimeStr(route[0].totalTime)
if (route.size > 1) {
sec_totalDist = KNToDistStr(route[1].totalDist)
sec_totalTime = KNToTimeStr(route[1].totalTime)
}
}
}
아래 비정상로그 관련하여 확인해 본 결과,
메인스레드에서 수행이 되지 않아서 발생한 것으로 보이며,
해당 작업이 메인스레드에서 이루어지도록 수정이 되어야 할 것으로 보입니다.
감사합니다.
1개의 좋아요
안녕하세요.
우선 답변 감사 드립니다.
현재 길찾기 SDK를 두 버전으로 개발 진행하고 있어 커멘트 주신 내용 바로 진행하지 못하는 상태 입니다.
우선 동작하는 버전으로 두번째 버전을 개발하고 있는 상태로 차주에는 SDK 버전 업 진행하여 피드백 드리도록 하겠습니다.
감사합니다.
1개의 좋아요
안녕하세요.
상기 작성해 주신 내용 기준으로 SDK를 1.9.4로 업그레이드 진행하고 있습니다.
진행 중 2가지 문의 드릴 내용이 있습니다.
-
3번 문의 사항 routeTheme Access 관련하여 KNComponentMapView 처리를 어떻게 해야 하는지 문의 드립니다.
(현재는 테스트를 위하여 routeTheme 적용 부분만 주석 처리 한 상태입니다.)
private fun routeDraw(aRoute: MutableList<KNRoute>, fixScale: Boolean = false) {
with(mBinding.mapview) {
val isNight = mapTheme == KNMapTheme.driveNight()
//routeTheme = if (isNight) KNMapRouteTheme.trafficNight() else KNMapRouteTheme.trafficDay()
setRoutes(aRoute)
...
}
더불어 개발자 사이트에 "해당 함수는 KNNaviview.initWithGuidance
이전에 호출되어야 합니다."라는 내용이 있는데 동일한 클래스에서 호출하면 되는 것인지도 함께 문의 드립니다.
- 지난번과 마찬가지로 SDK 업그레이드 후 실행할 때 앱이 종료되는 현상이 발생하고 있습니다.
(1) 기존 코드로 실행 할 경우 이전과 동일한 로그로 앱이 종료됩니다.
E FATAL EXCEPTION: Thread-14
Process: com.ways1.ignomad, PID: 28202
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. Expected: main Calling: Thread-14
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:9994)
at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:2082)
at android.view.View.requestLayout(View.java:27043)
at android.view.View.requestLayout(View.java:27043)
at android.view.View.requestLayout(View.java:27043)
at android.view.View.requestLayout(View.java:27043)
at android.view.View.requestLayout(View.java:27043)
at android.view.View.requestLayout(View.java:27043)
at androidx.drawerlayout.widget.DrawerLayout.requestLayout(DrawerLayout.java:1353)
at android.view.View.requestLayout(View.java:27043)
at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:380)
at android.view.View.requestLayout(View.java:27043)
at android.view.ViewGroup.addView(ViewGroup.java:5102)
at android.view.ViewGroup.addView(ViewGroup.java:5076)
at androidx.appcompat.widget.Toolbar.addSystemView(Toolbar.java:1656)
at androidx.appcompat.widget.Toolbar.setTitle(Toolbar.java:851)
at androidx.appcompat.widget.ToolbarWidgetWrapper.setTitleInt(ToolbarWidgetWrapper.java:262)
at androidx.appcompat.widget.ToolbarWidgetWrapper.setWindowTitle(ToolbarWidgetWrapper.java:244)
at androidx.appcompat.app.ToolbarActionBar.(ToolbarActionBar.java:78)
at androidx.appcompat.app.AppCompatDelegateImpl.setSupportActionBar(AppCompatDelegateImpl.java:646)
at androidx.appcompat.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:185)
at com.ways1.ignomad.activity.MainActivity.initToolBar(MainActivity.kt:205)
at com.ways1.ignomad.activity.MainActivity.initAppSettings(MainActivity.kt:199)
at com.ways1.ignomad.activity.MainActivity.access$initAppSettings(MainActivity.kt:34)
at com.ways1.ignomad.activity.MainActivity$sdkInit$1$1$1.invoke(MainActivity.kt:191)
at com.ways1.ignomad.activity.MainActivity$sdkInit$1$1$1.invoke(MainActivity.kt:180)
at com.kakaomobility.knsdk.KNBaseSDK$e.a(KNBaseSDK.kt:26)
at com.kakaomobility.knsdk.KNBaseSDK$e.invoke(KNBaseSDK.kt:1)
at com.kakaomobility.knsdk.KNBaseSDK$c$a$b.invoke(KNBaseSDK.kt:18)
at com.kakaomobility.knsdk.m0.g$a$a.invoke(KNMapManager.kt:9)
at com.kakaomobility.knsdk.s0.v0.invoke(KNMapLoader2.kt:40)
at com.kakaomobility.knsdk.s0.c1$f.b(KNRealmLoader.kt:468)
at com.kakaomobility.knsdk.s0.w1.invokeSuspend(Unknown Source:12)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at com.kakaomobility.knsdk.z.b1.a(KNThreadPoolPriorityThreadFactory.kt:1)
at com.kakaomobility.knsdk.z.b1$$ExternalSyntheticLambda0.run(Unknown Source:2)
at java.lang.Thread.run(Thread.java:1012)
Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@dbe5017, java.util.concurrent.Executors$FinalizableDelegatedExecutorService@f394c04]
(2) 상기 로그에서 메인스레드에서 이루어지도록 수정(runOnUiThread 사용)한 결과도 앱이 종료되는 현상이 발생하고 있습니다. 로그 내용은 아래와 같습니다.
E FATAL EXCEPTION: main
Process: com.ways1.ignomad, PID: 28456
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/kakaomobility/knsdk/map/knmapview/idl/KNMapViewApi$DefaultImpls;
at com.ways1.ignomad.fragment.FragmentMap$initMapView$1.invoke(FragmentMap.kt:67)
at com.ways1.ignomad.fragment.FragmentMap$initMapView$1.invoke(FragmentMap.kt:57)
at com.kakaomobility.knsdk.map.knmapview.KNBaseMapView.initMapView(KNBaseMapView.kt:30)
at com.kakaomobility.knsdk.map.knmapview.KNMapView.initMapView(KNMapView.kt:1)
at com.kakaomobility.knsdk.KNBaseSDK.bindingMapView(KNBaseSDK.kt:1315)
at com.ways1.ignomad.fragment.FragmentMap.initMapView(FragmentMap.kt:57)
at com.ways1.ignomad.fragment.FragmentMap.onCreateView(FragmentMap.kt:52)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8177)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
Caused by: java.lang.ClassNotFoundException: Didn’t find class “com.kakaomobility.knsdk.map.knmapview.idl.KNMapViewApi$DefaultImpls” on path: DexPathList[[dex file “/data/data/com.ways1.ignomad/code_cache/.overlay/base.apk/classes5.dex”, zip file “/data/app/~~bTQ2-eCxNmeNMHP6yc5taQ==/com.ways1.ignomad-YSTK2VTYzgbVxJbpF4wl6Q==/base.apk”],nativeLibraryDirectories=[/data/app/~~bTQ2-eCxNmeNMHP6yc5taQ==/com.ways1.ignomad-YSTK2VTYzgbVxJbpF4wl6Q==/lib/arm64, /data/app/~~bTQ2-eCxNmeNMHP6yc5taQ==/com.ways1.ignomad-YSTK2VTYzgbVxJbpF4wl6Q==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.ways1.ignomad.fragment.FragmentMap$initMapView$1.invoke(FragmentMap.kt:67)
at com.ways1.ignomad.fragment.FragmentMap$initMapView$1.invoke(FragmentMap.kt:57)
at com.kakaomobility.knsdk.map.knmapview.KNBaseMapView.initMapView(KNBaseMapView.kt:30)
at com.kakaomobility.knsdk.map.knmapview.KNMapView.initMapView(KNMapView.kt:1)
at com.kakaomobility.knsdk.KNBaseSDK.bindingMapView(KNBaseSDK.kt:1315)
at com.ways1.ignomad.fragment.FragmentMap.initMapView(FragmentMap.kt:57)
at com.ways1.ignomad.fragment.FragmentMap.onCreateView(FragmentMap.kt:52)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8177)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
SDK 1.6.8-hotfix-01에서는 정상 실행되고 있습니다. 확인 요청 드립니다.
현재 다른 기능 개발 건으로 GIT에 임시 저장(stash)해 놓은 상태입니다.
감사합니다.
1 - routeTheme 부분을 아래와 같이 적용하시기 바랍니다
routeProperties = KNMapRouteProperties().apply {
theme = if (isNight) KNMapRouteTheme.trafficNight() else KNMapRouteTheme.trafficDay()
}
2 - 클래스를 찾지 못해 발생하는 오류로 보이며, 캐시가 손상된 것이 아닌지 의심이 됩니다.
AndroidStudio의 [File] > [Invalidate Caches] 을 이용하여 캐시를 한번 제거하신 후 다시 한번 확인 부탁드립니다.
1개의 좋아요
안녕하세요.
우선 답변 주셔서 감사드립니다.
캐쉬 제거 후 재실행 하여도 동일한 오류가 발생 합니다.
E FATAL EXCEPTION: main
Process: com.ways1.ignomad, PID: 30613
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/kakaomobility/knsdk/map/knmapview/idl/KNMapViewApi$DefaultImpls;
at com.ways1.ignomad.fragment.FragmentMap$initMapView$1.invoke(FragmentMap.kt:67)
at com.ways1.ignomad.fragment.FragmentMap$initMapView$1.invoke(FragmentMap.kt:57)
at com.kakaomobility.knsdk.map.knmapview.KNBaseMapView.initMapView(KNBaseMapView.kt:30)
at com.kakaomobility.knsdk.map.knmapview.KNMapView.initMapView(KNMapView.kt:1)
at com.kakaomobility.knsdk.KNBaseSDK.bindingMapView(KNBaseSDK.kt:1315)
at com.ways1.ignomad.fragment.FragmentMap.initMapView(FragmentMap.kt:57)
at com.ways1.ignomad.fragment.FragmentMap.onCreateView(FragmentMap.kt:52)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8177)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
Caused by: java.lang.ClassNotFoundException: Didn’t find class “com.kakaomobility.knsdk.map.knmapview.idl.KNMapViewApi$DefaultImpls” on path: DexPathList[[dex file “/data/data/com.ways1.ignomad/code_cache/.overlay/base.apk/classes5.dex”, zip file “/data/app/~~QjXAgQ7ppGRKiGriD5fz8g==/com.ways1.ignomad-q1HVMYukar5XeJahFPBbUQ==/base.apk”],nativeLibraryDirectories=[/data/app/~~QjXAgQ7ppGRKiGriD5fz8g==/com.ways1.ignomad-q1HVMYukar5XeJahFPBbUQ==/lib/arm64, /data/app/~~QjXAgQ7ppGRKiGriD5fz8g==/com.ways1.ignomad-q1HVMYukar5XeJahFPBbUQ==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.ways1.ignomad.fragment.FragmentMap$initMapView$1.invoke(FragmentMap.kt:67)
at com.ways1.ignomad.fragment.FragmentMap$initMapView$1.invoke(FragmentMap.kt:57)
at com.kakaomobility.knsdk.map.knmapview.KNBaseMapView.initMapView(KNBaseMapView.kt:30)
at com.kakaomobility.knsdk.map.knmapview.KNMapView.initMapView(KNMapView.kt:1)
at com.kakaomobility.knsdk.KNBaseSDK.bindingMapView(KNBaseSDK.kt:1315)
at com.ways1.ignomad.fragment.FragmentMap.initMapView(FragmentMap.kt:57)
at com.ways1.ignomad.fragment.FragmentMap.onCreateView(FragmentMap.kt:52)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8177)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
감사합니다.
현재 1.6.8 버전에서 사용했던 sample앱의 코드를 그대로 사용하시는 것으로 보입니다.
기존 코드와 달리 deprecated 또는 변경된 코드가 많기 때문에
해당 샘플코드를 그대로 사용 중이시라면 아래와 같이 변경한 뒤 사용하여 주시기 바랍니다.
class FragmentMap : FragmentBaseMap() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
val binding = FragmentMapBinding.inflate(inflater)
initMapView(binding.mapView)
return binding.root
}
private fun initMapView(mapView: KNMapView) {
KNSDK.bindingMapView(mapView, mapView.mapTheme) { error ->
if (error != null) {
Toast.makeText(context, "맵 초기화 작업이 실패하였습니다. \n[${error.code}] : ${error.msg}",Toast.LENGTH_LONG).show()
return@bindingMapView
}
val lastPos = KNSDK.sharedGpsManager()?.lastValidGpsData?.pos ?: DoublePoint(KN_DEFAULT_POS_X.toDouble(), KN_DEFAULT_POS_Y.toDouble())
this@FragmentMap.mapView = mapView
val center = WGS84ToKATEC(127.11019081347423,37.3941851228957)
mapView.moveCamera(KNMapCameraUpdate.targetTo(center.toFloatPoint()).zoomTo(2.5f).tiltTo(0f), false, false)
mapView.userLocation?.apply {
isVisible = true
isVisibleGuideLine = true
coordinate = lastPos.toFloatPoint()
}
}
}
}