React Native Android 빌드에서 No connected devices! 오류 해결
Issue
섹션 제목: “Issue”DeviceException: No connected devices!
React Native로 Android 빌드를 진행하던 중 아래 에러로 설치에 실패했다.
Execution failed for task ':app:installDebug'. > com.android.builder.testing.api.DeviceException: No connected devices!처음에는 단순히 에뮬레이터가 실행되지 않은 문제처럼 보였지만, 실제 원인은 다른 쪽에 있었다.
Cause
섹션 제목: “Cause”JDK 경로를 찾을 수 없다
npx react-native run-android 실행 로그를 자세히 보면 에뮬레이터가 자동 실행되지 않았고, 그 결과 No connected devices! 에러로 이어지고 있었다.
$ npx react-native run-android
info Launching emulator...error Failed to launch emulator. Reason: Could not start emulator within 30 seconds..warn Please launch an emulator manually or connect a device. Otherwise app may fail to launch.
...
> Task :app:installDebug FAILEDExecution failed for task ':app:installDebug'.> com.android.builder.testing.api.DeviceException: No connected devices!처음에는 디바이스 연결 문제로 보였지만, 이 환경에서는 Android 빌드 환경에서 Java 실행 경로를 제대로 찾지 못해 에뮬레이터 실행이 정상적으로 이어지지 않는 상황이었다.
이때 확인한 원인은 JAVA_HOME 환경변수가 설정되어 있지 않았다는 점이었다.
JAVA_HOME은 시스템에서 JDK 위치를 찾을 때 사용하는 대표 환경변수다.- Android Studio, Gradle, CLI 빌드 도구는
JAVA_HOME을 기준으로 Java를 찾는 것이 일반적이다. JAVA_HOME값이 비어 있으면 Android 빌드나 에뮬레이터 실행 과정에서 연쇄적으로 실패할 수 있다.
에러 로그는 연결할 디바이스를 찾을 수 없다는 것이었지만, 이번 케이스에서는 그 전에 Java 실행 환경 설정이 맞지 않아 에뮬레이터 실행이 정상적으로 이어지지 않은 것으로 봤다.
Resolution
섹션 제목: “Resolution”JAVA_HOME 설정을 먼저 확인하자
해결 방법은 JAVA_HOME을 명시적으로 설정하는 것이었다.
$ cd ~$ echo export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home >> .zshrc$ source .zshrc$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home그 뒤 다시 Android 빌드를 실행했다.
$ npx react-native run-android이후에는 APK 설치와 에뮬레이터 실행이 정상적으로 이어졌고, React Native 앱도 문제 없이 올라왔다.
즉 이번 케이스에서는 DeviceException: No connected devices! 자체가 핵심 원인이라기보다, Android 실행 환경의 Java 설정이 맞지 않아 에뮬레이터 기동이 정상적으로 이어지지 않은 결과에 가까웠다.
Notes
섹션 제목: “Notes”1) No connected devices!는 결과일 수 있다
섹션 제목: “1) No connected devices!는 결과일 수 있다”- 이 에러가 보인다고 해서 항상 실제 디바이스 연결만 문제인 것은 아니다.
- 먼저 에뮬레이터 실행 로그, JDK 경로, Android SDK 설정을 같이 보는 편이 안전하다.
2) React Native Android 빌드에서 같이 확인할 것
섹션 제목: “2) React Native Android 빌드에서 같이 확인할 것”JAVA_HOME이 올바르게 설정되어 있는지java -version이 기대한 JDK를 가리키는지- Android Emulator가 직접 실행되는지
- Android Studio에서 SDK와 Emulator가 정상 설치되어 있는지
3) JAVA_HOME이란?
섹션 제목: “3) JAVA_HOME이란?”JAVA_HOME은 시스템에서 JDK 설치 경로를 가리키는 대표 환경변수다.- Gradle, Android Studio, React Native Android 빌드처럼 Java를 사용하는 도구들은 이 값을 기준으로 Java 실행 환경을 찾는 경우가 많다.