본문 바로가기
프로젝트/개발일지

Flutter, 안드로이드 앱, 처음으로 디버깅할 때

by 반포한강공원 2025. 7. 13.

Deugging Log

Launching lib\main.dart on SM A528N in debug mode...
Checking the license for package NDK (Side by side) 26.3.11579264 in C:\opt\Android\Sdk\licenses
License for package NDK (Side by side) 26.3.11579264 accepted.
Preparing "Install NDK (Side by side) 26.3.11579264 v.26.3.11579264".
"Install NDK (Side by side) 26.3.11579264 v.26.3.11579264" ready.
Installing NDK (Side by side) 26.3.11579264 in C:\opt\Android\Sdk\ndk\26.3.11579264
"Install NDK (Side by side) 26.3.11579264 v.26.3.11579264" complete.
"Install NDK (Side by side) 26.3.11579264 v.26.3.11579264" finished.
Checking the license for package Android SDK Build-Tools 34 in C:\opt\Android\Sdk\licenses
License for package Android SDK Build-Tools 34 accepted.
Preparing "Install Android SDK Build-Tools 34 v.34.0.0".
"Install Android SDK Build-Tools 34 v.34.0.0" ready.
Installing Android SDK Build-Tools 34 in C:\opt\Android\Sdk\build-tools\34.0.0
"Install Android SDK Build-Tools 34 v.34.0.0" complete.
"Install Android SDK Build-Tools 34 v.34.0.0" finished.
Checking the license for package Android SDK Platform 35 in C:\opt\Android\Sdk\licenses
License for package Android SDK Platform 35 accepted.
Preparing "Install Android SDK Platform 35 (revision 2)".
"Install Android SDK Platform 35 (revision 2)" ready.
Installing Android SDK Platform 35 in C:\opt\Android\Sdk\platforms\android-35
"Install Android SDK Platform 35 (revision 2)" complete.
"Install Android SDK Platform 35 (revision 2)" finished.
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Checking the license for package CMake 3.22.1 in C:\opt\Android\Sdk\licenses
License for package CMake 3.22.1 accepted.
Preparing "Install CMake 3.22.1 v.3.22.1".
"Install CMake 3.22.1 v.3.22.1" ready.
Installing CMake 3.22.1 in C:\opt\Android\Sdk\cmake\3.22.1
"Install CMake 3.22.1 v.3.22.1" complete.
"Install CMake 3.22.1 v.3.22.1" finished.
√ Built build\app\outputs\flutter-apk\app-debug.apk
Error: ADB exited with exit code 1
Performing Streamed Install

adb.exe: failed to install D:\workspace\pillbox\build\app\outputs\flutter-apk\app-debug.apk: Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE: Existing package net.daddyhouse.pillbox signatures do not match newer version; ignoring!]
Uninstalling old version...
I/flutter (13678): [IMPORTANT:flutter/shell/platform/android/android_context_vk_impeller.cc(61)] Using the Impeller rendering backend (Vulkan).
I/dyhouse.pillbox(13678): Compiler allocated 6937KB to compile void android.view.ViewRootImpl.performTraversals()
Connecting to VM Service at ws://127.0.0.1:6786/r193mA10x2A=/ws
Connected to the VM Service.

 

요즘 개발은 필요한 개발도구들을 다운로드 하고, 적절한 곳에 다운로드 하고 Path 를 잡아주는 등,

환경 설정 작업이 앱개발의 90%를 차지하는 것 같다.

 

이게 잘 되면 쉽게 시작할 수 있고, 이게 안되면 한참을 해매야 한다.

성공의 핵심은 필요한 걸 필요한 자리게 깔아 두는 수 밖에 없다.

(이렇게 밖에 말할 수 없다는 게 안타깝다.)

 

Gradle을 잘 잡아주고, Android Studio를 잘 설치했다면,

SDK Tools 와 SDK는 Gradle 이 잘 받아주는 것 같다.

 

첫 컴파일을 돌리니 10분 넘게 노트북을 세워 놓고 있다.

로그를 읽어보니 파일을 다운받고 설치하는 중.

 

NDK

Native Developement Kit  다.

안드로이드에서 Native라 함은 C/C++ 코드를 말한다.

주로 driver를 짜거나 할 때 쓰인다.

스마트폰이라면 화면을 제어하거나, 센서를 제어할 때 쓰이겠지.

 

암튼 이게 Flutter 가 선호하는 버전이 있나보다.

Create New Project할 때 디폴트 옵션값을 가지고 자자작 생성을 하는데,

안드로이드 앱을 빌드할 때, 맞는 버전이 없으면 Gradle 이 새로 다운로드 한다.

 

그리고 이게 Flutter Upgrade 할 때 바뀔 수 있다.

그러면 하드디스크에 버전별로 두 벌 이상 바이너리를 유지해야 할 수도 있다.

통일 시켜서 관리할 수도 있는데, 그냥 귀찮으니 스킵.

 

Android SDK Build-Tools 34 

이게 안드로이드 바이너리를 만드는 메인 프로그램이다.

apk를 만들어내는 놈이다.

 

컴파일을 하면서 불필요한 코드는 줄여버린다.

이미지, 레이아웃 등이 크면 줄여버리거나 버려버린다.(외부로 빼버림)

인터페이스를 정의해서 자바코드로 변환해준다.

 

암튼 이 넘이 굉장히 중요한 놈이다.

이걸 쓰라고 gradle 설정파일에 잘 써두면 맞는 내용을 내려받는다.

이것도 Flutter가 만들어 내는 디폴트 버전이 있다.

 

Android SDK Platform 35

안드로이드 플랫폼이란, 안드로이드 그 자체를 말한다.

자세하게 분해해서 말하자면,

  • 하드웨어 자체를 동작시키는 커널,
  • 하드웨어와 통신하기 위한 라이브러리 세트,
  • 하드웨어 작동여부를 읽고 알려주거나, 제어 명령을 받기 위한 소프트웨어 구조 집합인 프레임워크,
  • 그 위에 구동되는 전화걸기, 주소록 등의 어플리케이션

이것들을 통털어서 말한다.

이걸 안드로이드 플랫폼이라고 하고, 현재 Android 16까지 나왔다.

코드명으로는 BAKLAVA 라고 불린다.

참고로 VANILA ICE CREAM은 "Android 15"다.

 

갤럭시 폰으로는 "설정 - 소프트웨어 정보 - 안드로이드 버전"을 보면 된다.

내 건 Galaxy A52s인데 One UI버전을 6.1로 업그레이드 해서, Android Version 14를 쓰고 있다. 

 

https://developer.android.com/guide/topics/manifest/uses-sdk-element?hl=ko

 

<uses-sdk>  |  App architecture  |  Android Developers

하나 이상의 Android 플랫폼 버전과의 애플리케이션 호환성을 API 수준 정수로 표시할 수 있습니다. 애플리케이션이 표현한 API 수준은 지정된 Android 시스템의 API 수준과 비교되며, 다음과 같이 다

developer.android.com

 

Android Platform 이 스마트폰 OS 그 자체라면,

Android SDK Platform 은 Android Platform 을 개발자가 제어할 수 있도록 만들어 놓은 API 세트를 말한다.

당연히 Android Platform 과 버전은 따로 간다.

 

Android Platform 이 나와도, 이를 스마트폰에만 쓰지 않고,

KIOSK 나 항공기 대시보드에 쓰는 경우도 많다., 

 

그러면 특별한 장치를 읽고 써야 하는 경우가 생기는데,

이걸 개발자가 드라이버부터 만들게 하지 않고,

자기네들이 만든 다음 API 로 뽑아준다.

당연히 하나의 플랫폼에서 여러 개의 API 버전이 나올 수 있다.

 

그래서 무얼 설치해야 할지 모를 때, 반드시 위 호환표를 확인해야 한다.

참고로, 내 갤럭시는 Android (Platform) 14이니까, API 34를 받아야 한다.

 

그런데, Flutter가 왠일인지 Android SDK Platform 35를 받는다.

이유는 모르겠다. 필요하니까 받은 거겠지.

 

CMake

이런 C/C++ 라이브러리를 만들 때 쓰는 도구다.

뭔지 모르겠지만, Flutter 코드를 보면 C라이브러리를 만들어야 하는 경우가 생겼다는 뜻이겠지.

 

아마 로컬 DB를 쓰려고 shared_preference 위젯을 썼는데,

이놈이 컴파일 할 때 필요한 실행파일을 만드나 보다.

그 외는... 음 생각나는 위젯들이 없다.

대부분 그냥 불러 쓰는 거라, 새로 라이브러리를 만들 일이 없을텐데.

 

.gradle

암튼 이런 모든 설정을 flutter가 build.gradle 등에 기재해 놓는다.

이걸 다운 받고 실행하는 건 gradle 의 역할이다.

 

app-debug.apk

그래서 app-debug 파일을 만든다.

여기서부턴 그냥 안드로이드 룰을 따라간다.

Flutter는 그냥 시작만 했을 뿐.

 

기존에 깔려 있는 게 있으니, 에러가 뜬다.

그걸 uninstall 하고 다시 install 한다.

편하다.

옛날 같으면 error 가 뜨고 왜 그런지 한참 찾은 뒤에야,

uninstall 하고 install 해야 했을텐데...

 

요약

- 암튼 flutter는 안드로이드 앱을 이런 과정으로 실행한다.

- 안드로이드 스튜디오를 설치하고 저런 build-tool들을 미리 설정해도 되는데,

- 그렇지 않다면, 저렇게 Gradle 이 다 다운받도록 Flutter가 조종을 한다.

- 실행 잘 된다.

 

끝.   

댓글