[Flutter] Flutter에 안드로이드 폰을 연결해주기

2025. 10. 10. 00:18Developers 공간 [Shorts]/Frontend

728x90
반응형
<분류>
A. 수단
- OS/Platform/Tool : Linux, Kubernetes(k8s), Docker, AWS
- Package Manager : node.js, yarn, brew, 
- Compiler/Transpillar : React, Nvcc, gcc/g++, Babel, Flutter

- Module Bundler  : React, Webpack, Parcel

B. 언어
- C/C++, python, Javacsript, Typescript, Go-Lang, CUDA, Dart, HTML/CSS

C. 라이브러리 및 프레임워크 및 SDK
- OpenCV, OpenCL, FastAPI, PyTorch, Tensorflow, Nsight

 


1. What? (현상)

 

이번 글에서는 https://tkayyoo.tistory.com/64에 이어서 아이폰이 아닌 안드로이드폰을 연결하는 과정을 기록해보려고 합니다.

 

시작에 앞서 아래는 flutter 프로젝트 내의 android 폴더 tree를 가볍게 살펴보면 좋습니다.

  • android
    • app
      ├──
      src
            ├──
      debug
                  └── 
      AndroidManifest.xml
            ├──main
                  ├──
      java
                  ├──
      kotlin
                  ├──
      res
                  └──
      AndroidManifest.xml : 카메라&마이크 등 권한 추가 "<uses-permission>",
                                                            프로젝트 Bundle ID 위치 "<manifest>",
                                                            URL 스킴 설정 및 API 키 추가 "<activity>"
                                                           (3가지 AndroidManifest.xml중에 가장 중요합니다)
       
                                                           **manifest : 안드로이드 시스템이 앱의 코드를 실행하기 전에 확보해야 하는 앱에 대한 필수 정보를 시스템에 제공하는 목록
            ├──profile
                  └──
      AndroidManifest.xml
            └──
      build.gradle : Android 최소 SDK 버전을 명시할 수 있다.(compileSdkVersion)
    • gradle
      └──w
      rapper
            ├──
      gradle-wrapper.jar
            └──gradle-wrapper.properties
    • .gitignore
    • build.gradle : 빌드에 사용할 SDK 버전, JAV 버전, application version, 사용하는 library등 모듈의 빌드 방법이 정의된 build script입니다.
      ** gradle : build tool로 ant, maven, gradle 등의 빌드 도구 들이 있지만 gradle를 사용하고 있습니다.
    • gradle.properties : 안드로이드에서 어떤 기능들을 활용한 것인지 명시해놓는 것, androidX를 활용할지도 체크할 수 있습니다.(android.useAndroidX=true)
      ** JetPack : 기존의 "Support Library"라는 라이브러리 모음집을, 개선한 모음집
      ** androidX : JetPack 내의 라이브러리를 모은 패키지
      ** Jetifier : 이전에 android에서 사용된 "support library"로 만들어진 third party library들을 AndroidX 프로젝트와 호환되도록 변환해주는 툴
    • gradlew
    • gradlew.bat
    • local.properties
    • projectOOO_android.iml
    • settings.gradle : 중요

2. Why? (원인)

  • X

3. How? (해결책)

 

<1. PC셋팅>

 

1-1. PC셋팅 - Java 설치

 

보통 아래와 같은 에러가 나는 경우 Java를 제대로 잡지 못하거나, 잘못된 Java 버전이 설치된 경우 입니다.

* What went wrong:
An exception occurred applying plugin request [id: 'com.android.application']
> Failed to apply plugin 'com.android.internal.application'.
   > Android Gradle plugin requires Java 17 to run. You are currently using Java 11.
      Your current JDK is located in /Applications/Android Studio.app/Contents/jre/Contents/Home
      You can try some of the following options:
       - changing the IDE settings.
       - changing the JAVA_HOME environment variable.
       - changing 'org.gradle.java.home` in `gradle.properties'.

 

일단 필요한 경우 모든 Java를 지워준 뒤

sudo rm -rf /Library/Java/JavaVirtualMachines/*    # 모든 JDK 배포판 제거(Oracle/Temurin/Azul 등)
sudo rm -rf /Library/Java/Extensions/*             # 예전 확장(거의 없음)
sudo rm -rf /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPane
sudo rm -rf /Library/LaunchAgents/com.oracle.java.Java-Updater.plist 2>/dev/null
sudo rm -rf /Library/LaunchDaemons/com.oracle.java.Helper-Tool.plist 2>/dev/null
sudo rm -rf /Library/PrivilegedHelperTools/com.oracle.java.Helper-Tool 2>/dev/null

rm -rf ~/Library/Application\ Support/Oracle/Java
rm -rf ~/.java
rm -rf ~/.jmc

# Check Installed List
brew list --cask | grep -E 'temurin|openjdk|zulu|corretto' || true
brew list | grep -E '^openjdk(@[0-9]+)?$' || true

# Uninstall
brew uninstall --cask temurin@21 # example1
brew uninstall openjdk@17 # example2

# jenv
rm -rf ~/.jenv
sed -i '' '/jenv/d' ~/.zshrc 2>/dev/null

# SDKMAN
rm -rf ~/.sdkman
sed -i '' '/sdkman/d' ~/.zshrc 2>/dev/null

# clear JAVA_HOME in session & .zshrc file
unset JAVA_HOME
sed -i '' '/JAVA_HOME/d' ~/.zshrc 2>/dev/null
sed -i '' '/java_home -v/d' ~/.zshrc 2>/dev/null

# Check
/usr/libexec/java_home -V   # "Unable to find any JVMs"가 나오면 완전 제거된 상태
type -a java                # /usr/bin/java(Apple stub)만 보이면 정상

 

원하는 Java 버전을 설치해줍니다. 

# (Option) install homebrew
#/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Install Temurin 17 (LTS)
brew install --cask temurin17

# Setting Java 17 (Basic)
export JAVA_HOME=$(/usr/libexec/java_home -v 17)
export PATH="$JAVA_HOME/bin:$PATH"

# Check version
java -version

# Check Project gradlew's java version
cd ./android
./gradlew -v

 

 

1-1. PC셋팅 - 프로젝트가 활용할 Java 명시

./android/app/build.gradle 내에 우리가 설치한 Java를 명시해주지 않으면, 프로젝트 내에 있거나 혹은 예상하지 못한 java를 활용할 수도 있습니다.

# Check java path
/usr/libexec/java_home -V
# ex) /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home

# Write to android/gradle.properties
echo 'org.gradle.java.home=/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home' >> android/gradle.properties

 


<2. 스마트 폰 셋팅>

 

2-1. 스마트폰 셋팅 - 개발자 모드 켜기 : 연결을 하고 flutter doctor -v를 하면 에러가 나기 때문에, 개발자 모드를 켜줘야합니다. 아래와 같이 빌드번호를 7번 선택해주면 자동으로 켜집니다.

[개발자 모드 켜기]

 

2-2. 스마트폰 셋팅 - USB 디버그 켜기 : USB로 연결된 폰에서 동작하도록 이 기능을 켜주어야 합니다.

[USB 디버깅 켜기]

 

 

 

혹시나 동작하지 않으면 캐시와 빌드를 지우거나

# 1) Clean Flutter, gradlew
flutter clean
cd android
./gradlew --stop
rm -rf ~/.gradle/caches ~/.gradle/daemon
cd ..

# 2) Reset dependencies
flutter pub get

 

android 폴더 자체를 지우고 새로 만드는 것도 좋습니다.

mv android android_backup
flutter create --platforms=android .

 

728x90
반응형