들어가며
큐알코드 인식 카메라 기능을 구현하려고 라이브러리를 추가하고 그에 맞게 AGP 버전을 올렸더니, 빌드가 안되기 시작했다. 해결했지만, 다음에도 발생할 가능성이 높은 문제라, 정리해놓는다!
큐알코드 인식 카메라 기능을 넣고 (qr_code_scanner 라이브러리)
실제 폰에서 앱을 작동시켰을때, 카메라가 정상 작동하는지 보고싶어서 build를 하려는데 "Namespace not specified. Specify a namespace in the module's build file." 이런 에러가 발생하며 빌드가 실패했다.
먼저 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를 선언해서 사용해야한다는 것이다.
우선 내가 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>
즉 이런식으로 바꿔줘야함.
사실 해결방법 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
이런식으로 버전에 맞게끔 바꿔준다.
그럼 해결
여태 어떤 오류 해결할때, 버전 문제라고 하면 그냥 버전 내리거나 올리고 말았었는데,
근본적인 원인(?)을 해결해본 건 처음이라 좀 신기
자주 발생할 거 같은 오류라,,, 다음엔 지피티 도움없이 직접 해보는 걸로 ..!!