[flutter] Namespace not specified. Specify a namespace in the module's build file. 에러 해결 방법

쥬라기·2025년 4월 27일

flutter

목록 보기
4/8

들어가며

큐알코드 인식 카메라 기능을 구현하려고 라이브러리를 추가하고 그에 맞게 AGP 버전을 올렸더니, 빌드가 안되기 시작했다. 해결했지만, 다음에도 발생할 가능성이 높은 문제라, 정리해놓는다!

문제 상황

큐알코드 인식 카메라 기능을 넣고 (qr_code_scanner 라이브러리)
실제 폰에서 앱을 작동시켰을때, 카메라가 정상 작동하는지 보고싶어서 build를 하려는데 "Namespace not specified. Specify a namespace in the module's build file." 이런 에러가 발생하며 빌드가 실패했다.

관련 개념

nameSpace란?

먼저 nameSpace는 Android 프로젝트에서 "앱이나 라이브러리 고유한 경로"를 의미한다.
기존에는 AndroidManifest.xml파일 내에


위 사진과 같이 manifest package = " " ~ 이런식으로 package로 경로를 구분해줬었다.

그런데, Android Gradle Plugin(AGP) 8.0 이상부터는 "manifest말고 build.gradle에 명시적으로 namespace를 선언해라" 라고 정책이 바뀌었다고 한다.

왜 문제가 발생했나?

위와 같이 8.0 이상부터 정책이 변경되었지만, qr_code_scanner과 같은 예전 플러그인들은 여전히 Manifest에만 package = "" ~ 를 정의해놓고 build.gradle은 건드리지않았다.
따라서, AGP 8.0 이상 버전을 쓰면서, 이전 플러그인들을 사용하려면 위 정책에 따라 namespace를 선언해서 사용해야한다는 것이다.

해결방법

1. 로컬로 라이브러리를 가져와서 직접 namespace를 정의한다.

우선 내가 pub.dev에서 가져온 라이브러리라면, 내 소유가 아니므로 직접 원본코드를 고칠 수는 없다...
즉, pub.dev에서 가져온 qr_code_scanner라이브러리는 "읽기 전용"으로 수정불가다.

그럼 방법은 해당 라이브러리를 내 로컬에 따로 만들어서 수정 가능하게 하여, 수정하는 방법뿐이다.

내가 복사한 방법은
(1) 프로젝트 루트 경로에 packages 폴더를 만들고, 하위에 qr_code_scanner 폴더를 생성한다.
(2) 프로젝트 루트경로에서 터미널을 열고,

 cp -r ~/.pub-cache/hosted/pub.dev/qr_code_scanner-1.0.1/* packages/qr_code_scanner;   

위 명령어로 내 컴퓨터에 flutter가 다운 받아놓은 pub.dev 패키지의 qr_code_scanner 1.0.1 버전 파일들을 내 프로젝트의 packages/qr_code_scanner로 옮긴다.

(3) packages/qr_code_scanner 내의 build.gradle로 이동하여 namespace 지정

위와 같이 namespace를 지정해주면 끝!
추가로 namespace를 지정해주면서, 기존에 AndroidManifest.xml 에 있던 project 정의 부분은 지워줘야지 오류 나지 않고 잘 작동한다.

<manifest
    xmlns:tools="http://schemas.android.com/tools">
  <uses-sdk tools:overrideLibrary="com.google.zxing.client.android" />
</manifest>

즉 이런식으로 바꿔줘야함.

2. AGP버전을 낮춘다

사실 해결방법 1로 해결했지만, 생각해보니 걍 agp버전을 낮추면 되는일 아닐까? 싶어서 찾아봤는데 맞다.
/android/settings.gradle 파일을 보니

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
}

위와 같이 적혀있었고, 여기서 AGP 8.1.0 버전을 사용한다는 걸 알게됐다.
그럼 굳이 해결방법1처럼 복잡하게 안하고 agp 버전을 낮추면 되지 않나? 했다.
그래서 해봄

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

agp버전을 7.4.2 정도로 낮추고, 이에 따라 gradle버전도 낮춰줘야 하기에

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip

추가로 gradle-wrapper.properties의 여기 gradle-8.3-all ~ 이부분을 고쳐줘야한다.

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

이런식으로 버전에 맞게끔 바꿔준다.

그럼 해결

정리

여태 어떤 오류 해결할때, 버전 문제라고 하면 그냥 버전 내리거나 올리고 말았었는데,
근본적인 원인(?)을 해결해본 건 처음이라 좀 신기
자주 발생할 거 같은 오류라,,, 다음엔 지피티 도움없이 직접 해보는 걸로 ..!!

profile
기록하고 분석하는 개발자

0개의 댓글