macOS Android Setting Error 모음
이 포스트는 macOS에서 Android 환경 설정 시 발생하는 문제들을 모아놓은 포스트이다.
macOS 환경설정에 고통받는 모든 이들에게 하나라도 도움이 되길 바란다… 😭
Android SDK version N/A
문제
macOS에서 Android 빌드 및 실행이 제대로 작동하지 않을때는 npx react-native doctor
명령어를 실행해 보고
환경설정들이 정상적으로 설정되어 있는지 확인하는 과정을 거친다.
그 중에 Android SDK version
항목이 있는데 그 값이 무슨 짓을 해도 N/A
로 표시되는 문제가 발생한다.
1
2
3
✖ Android SDK - Required for building and installing your app on Android
- Versions found: N/A
- Version supported: 30.0.0
이 문제는 아래의 설치 및 설정들이 이미 정상적으로 되어 있음에도 발생한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- `Node.js`
- `npm`
- `Watchman`
- `Adb`
- `JDK`
- `Android Studio`
- 올바른 `Android SDK`, `Google APIs ARM 64 v8a System Image` 등 설치
- 환경변수
- `ANDROID_HOME`
- `ANDROID_SDK_ROOT`
- react native 구버전에서 필요했던 것으로 보이며, 지금은 필요한지 확실치 않으나 일단 해둠
- `ANDROID_HOME`과 같은 경로로 설정
- `$ANDROID_SDK_ROOT/emulator`
- `$ANDROID_SDK_ROOT/tools`
- `$ANDROID_SDK_ROOT/platform-tools`
- `$ANDROID_SDK_ROOT/cmdline-tools/latest/bin`
- `XCODE`
- `Ruby`
- `Cocoapods`
해결
이 문제는 java의 버전과 cmdline-tools
버전이 맞지 않아서 발생하는 문제이다.
따라서 올바른 버전의 JDK와 cmdline-tools
를 설치하면 된다.
cmdline-tools
에서 제공하는 sdkmanager --list
명령어를 실행해보면 제대로 실행되지 않음을 알 수 있다.
구글링을 해보면 이 문제를 해결하기 위해 대체로 다음과 같이 조언하는데, 해결 방향은 옳지만 문제가 하나 있다.
- Android Studio를 실행하고,
Preferences
를 열어서Appearance & Behavior
>System Settings
>Android SDK
를 선택한다. SDK Tools
탭을 선택하고,Android SDK Command-line Tools (latest)
를 체크한다.Apply
버튼을 눌러서 설치를 진행한다.
이 Android SDK Command-line Tools (latest)
가 cmdline-tools
를 의미한다.
이 해결 방법에서 문제는 바로 Android SDK Command-line Tools (latest)
의 버전 (latest)
이다.
2023년 9월 1일 기준으로 나는 JDK 14를 사용하고 있는데,
cmdline-tools
의 latest
버전은 11
이며 이는 JDK 14와 호환되지 않는다.
따라서 JDK 14 기준으로 아래와 같이 하면 이 문제는 해결된다.
- Android Studio에서
Android SDK Command-line Tools
를 설치할 때,latest
버전이 아닌10
버전을 설치 - 환경변수 설정(
.bashrc
or.zprofile
등등..)에서$ANDROID_SDK_ROOT/cmdline-tools/latest/bin
를$ANDROID_SDK_ROOT/cmdline-tools/10.0/bin
으로 변경
주의, 구글 안드로이드 공식문서에 따르면
cmdline-tools
가 제공하는 프로그램들은 기존의 tools
하위의 프로그램들을 대체한다고 한다.
따라서 환경변수를 설정할 때, $ANDROID_SDK_ROOT/tools/bin
경로는 설정하지 말아야한다.
$ANDROID_SDK_ROOT/cmdline-tools/10.0/bin
경로에 있는 프로그램들과 중복되기 때문이다.
아래는 내 ~/.zprofile
파일의 관련 환경변수 설정 부분이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# JAVA
export JAVA_HOME_11=$(/usr/libexec/java_home -v11)
export JAVA_HOME_14=$(/usr/libexec/java_home -v14)
export JAVA_HOME=$JAVA_HOME_14
# ANDROID
export ANDROID_HOME=$HOME/Library/Android/sdk
export ANDROID_SDK_ROOT=$ANDROID_HOME
export PATH=$PATH:$ANDROID_SDK_ROOT
export PATH=$PATH:$ANDROID_SDK_ROOT/emulator
export PATH=$PATH:$ANDROID_SDK_ROOT/tools
# export PATH=$PATH:$ANDROID_SDK_ROOT/tools/bin
export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/10.0/bin
# export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin
export PATH=$PATH:$ANDROID_SDK_ROOT/platform-tools
npx react-native run-android 명령어의 빌드가 진행되지 않음
문제
macOS에서 npx react-native run-android
명령어를 입력했음에도 app 설치가 진행되지 않는다.
설치에 실패했다는 메시지 외에 다른 메시지가 없다.
1
failed to install the app
해결
gradlew
에 실행 권한이 없어서 발생하는 문제일 수 있다.
이건 모든 문제 상황에서 항상 가장 먼저 체크해봐야할 사항이기도 하다.
chmod 755 android/gradlew
명령어를 실행하면 해결된다.
Windows의 Git Bash, Linux, macOS를 오고가며 git clone
을 수행할 때가 있는데,
그럴때마다 이러한 실행 권한 문제에 부딪히는 경우가 종종 있었다.
macOS m1, m2에서 Android 빌드 에러
문제
macOS m1, m2에서 Android 빌드 시 다음과 같은 메시지를 동반한 에러가 발생할 수 있다.
1
2
3
...
Task :react-native-reanimated:configureCMakeDebug[arm64-v8a] FAILED
...
App을 개발하다보면 종종 react-navigation
패키지를 사용할 텐데,
해당 패키지를 install 할 때 dependency로 react-native-reanimated
패키지가 함께 install 된다.
그리고 이 문제는 그 패키지에서 발생하는 에러이다.
해결
원인은 react-native-reanimated
패키지과 Apple Silicon m1, m2 칩셋 간 호환성 문제에 있지 않을까 싶다.
이를 해결하기 위해 다음과 같이 iTerm2의 Rosetta
사용 옵션을 활성화 하자.
intel 칩셋 기반 프로그램과 호환을 위해 arm64-v8a
를 x86_64
로 변환하는 것과 관련된 것으로 보인다.
정확한 과정은 찾아보지 않아서 모른다.
Finder
> 응용프로그램
> iTerm
오른쪽 클릭 > 정보 가져오기
> Rosetta를 사용하여 열기
체크
macOS Android 빌드 시 SafeAreaContextPackage 에러
문제
macOS에서 npx react-native run-android
명령어를 이용해서 Android 빌드 시 다음과 같은 에러가 발생한다.
1
2
3
4
5
6
7
8
9
10
/Users/sammy/projects/moneybook/android/app/build/generated/rncli/src/main/java/com/facebook/react/PackageList.java:21: error: cannot find symbol
import com.th3rdwave.safeareacontext.SafeAreaContextPackage;
^
symbol: class SafeAreaContextPackage
location: package com.th3rdwave.safeareacontext
/Users/sammy/projects/moneybook/android/app/build/generated/rncli/src/main/java/com/facebook/react/PackageList.java:72: error: cannot find symbol
new SafeAreaContextPackage(),
^
symbol: class SafeAreaContextPackage
location: class PackageList
해결
다음의 명령어를 이용해서 빌드 캐시를 삭제하면 해결된다.
1
2
$ cd android
$ ./gradlew clean
Leave a comment