2. flutter_naver_map 네이버 지도 연결

2025. 1. 30. 17:56현 프로젝트 준비단계

728x90

 

소요 시간

 

2025년 1월 25일 ~ 2025년 1월30일   

= 밥먹는 시간 제외하고 이거만해서 5일 소요

 

느낀점

 

빌드에서 나오는 오류, 의존성 관계에 대해서 플러터가 오류가 많더라는 걸 직접

경험해보니까 알겠다. 

 

일단 네이버 맵 api를 추가하려고 했던 짓

컴퓨터초기화 10번 이상, 안드로이드 버전 변경 4번 , 플러터 2.x ~3.x 다 다운, 환경변수 수십 번 변경

gradle 버전 맞추기 agp 버전 바꾸기 , 코틀린 버전 맞추기 등 다도전 해봐서 

결국 해냈다. 근데 사실 플러그인 자체에 이슈였는데

나는 플러터에 대한 지식이 없으니까 하나하나 뜯어보면서 내 실수인 줄 알고 

폴더 하나하나 수정해 가면서 빌드오류를 경험해 봤다. 

누가 보면 삽질이라고 할 수 있는데 나는 이 오류 덕분에 진짜 많이 성장했다.

하지만 시간낭비도 많이 했기 때문에

다른 분들은 한 번에 해결했으면 좋겠어서 글을 남긴다. 

 

 

 

 

안드로이드 스튜디오 버전

 

 

기본적으로 이거 이슈있으면 싹 다 오류나니까 무조건 확인해야됨

 

 

최신버전은 git부터 다 자동으로해주던데 구버전하니까 안해줌요..

 

 

 

중간에 hyper- v 같은 경우에는

이걸로 대체 

 

 

 

현 버전중 최신버전이용

flutter_naver_map: ^1.3.0+1

 

 

자바 버전 -  jdk17



 

gradle 버전 -

distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip

 

 

flutter 버전 -

Flutter 3.27.3 • channel stable 
Framework • revision c519 ee916 e (9 days ago) • 2025-01-21 10:32:23 -0800
Engine • revision e672 b006 cb
Tools • Dart 3.6.1 • DevTools 2.40.2

 

 

수정한 파일 

android build 파일 

buildscript {
    ext.kotlin_version = '1.9.0'  // Kotlin 버전 설정 (1.7.x 버전으로 설정)

    repositories {
        google()
        mavenCentral()

        // 네이버 지도 SDK Maven 저장소 추가
        maven {
            url 'https://repository.map.naver.com/archive/maven'
        }
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:8.1.0'  // 최신 안정 Gradle 플러그인
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"  // Kotlin 플러그인
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()

        // 네이버 지도 SDK Maven 저장소 추가
        maven {
            url 'https://repository.map.naver.com/archive/maven'
        }
    }
}

rootProject.buildDir = "../build"
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}

subprojects {
    project.evaluationDependsOn(":app")
}

tasks.register("clean", Delete) {
    delete rootProject.buildDir
}

 

 

app build gradle 파일

 

plugins {
    id "com.android.application"
    id "kotlin-android"
    // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
    id "dev.flutter.flutter-gradle-plugin"
}

android {
    namespace = "com.holy.untitled.untitled"
    compileSdk 34
    ndkVersion = flutter.ndkVersion

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8
    }

    defaultConfig {
        applicationId = "com.holy.untitled.untitled"
        minSdkVersion 23
        targetSdk = flutter.targetSdkVersion
        versionCode = flutter.versionCode
        versionName = flutter.versionName
    }

    buildTypes {
        release {
            signingConfig = signingConfigs.debug
        }
    }
}

flutter {
    source = "../.."
}

dependencies {
    implementation 'com.naver.maps:map-sdk:3.20.0'
}

 

 

gradle.properties

org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
android.useAndroidX=true
android.enableJetifier=true
android.nonTransitiveRClass=false <<< 추가

 

 

setting 파일

pluginManagement {
    def flutterSdkPath = {
        def properties = new Properties()
        file("local.properties").withInputStream { properties.load(it) }
        def flutterSdkPath = properties.getProperty("flutter.sdk")
        assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
        return flutterSdkPath
    }()

    includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")

    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}

plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
    id "com.android.application" version "8.1.0" apply false
    id "org.jetbrains.kotlin.android" version "1.8.22" apply false
}

include ":app"

 

 

main / src / main

<meta-data
    android:name="com.naver.maps.map.CLIENT_ID"
    android:value="인증코드" />

 

 

내 코드

import 'package:flutter/material.dart';
import 'package:flutter_naver_map/flutter_naver_map.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();  // Flutter 엔진 초기화
  await NaverMapSdk.instance.initialize(  // 네이버 지도 초기화
    clientId: '111111',
    onAuthFailed: (ex) {
      print("********* 네이버맵 인증오류 : $ex *********");
    },
  );
  runApp(MyApp());  // 앱 실행
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Naver Map Example')),
        body: NaverMap(),  // 네이버 지도 표시
      ),
    );
  }
}

 

 

 

대체 그럼 무슨 오류였나?

 

flutter_naver_map-1.3.0+1/android/src/main/kotlin/dev/note11/flutter_naver_map/flutter_naver_map/view/NaverMapView.kt:134:29 Unresolved reference: style

 

이거 나는 빌드에 대한 개념 자체가 없으니까 그냥 내문제 인줄 알았는데

플러그인에서 버전 문제로 style이 문제가 나는거다. 그래서 사실상 플러그인 자체에서 오류가 나는거였다.

고치기 위해서 github issue를 활용하여 해결하였다. 

 

 

 

 

참고사이트

https://github.com/note11g/flutter_naver_map/issues/279 

https://github.com/note11g/flutter_naver_map/issues/225 핵심적으로 도움된 두글 역시 이슈보는게 최고다

728x90