개발을 마무리 짓고 android 에뮬레이터에서 최종 점검을 하기 위해 apk를 빌드하는 과정이었다. npm run android를 사용해서 빌드했을 때는 아무 문제가 없었기 때문에 apk를 빌드하는 과정도 문제가 없을 줄 알았다.
cd android && ./gradlew assembleRelease
하지만 빌드가 끝나갈 때 쯤 Android resource linking failed라는 메시지와 함께, 아래 경로에서 참조하는 android:attr/lStar를 찾지 못하겠다는 에러가 발생했다.
나의 경우 개발을 위해 다운 받았던 react-native-wheel-pick이라는 라이브러리에서 문제가 문제였다.
android:attr/lStar not found. 라는 키워드로 구글링을 해봤지만 android/build.gradle 파일의 sdk버전을 올리라는 얘기만 나올뿐 내 상황에 맞는 해결책은 찾지 못하고 있었다. 이미 내 프로젝트의 sdk버전은 최신이었기 때문이다. 문제가 발생한 프로젝트 루트도 달랐다.
게다가 assembleRelease에서만 에러가 발생할 뿐, bundleRelease, npm run android, 심지어 assembleReleaseStaging에서는 에러가 발생하지 않았기 때문에 에러는 더 미궁으로 빠져들었다.
필사의 구글링 결과 나와 동일한 에러케이스를 찾아낼 수 있었다. 추가로 설치한 패키지에서 에러가 발생해서 에러 경로가 node_modules 내부인 케이스였는데, node_modules/[package name]/android/build.gradle의 sdk 버전을 내 프로젝트의 sdk 버전과 일치시키면 해결이 된다는 답변이었다.
node_modules의 해당 패키지가 갖고 있는 sdk 버전을 현재 내 프로젝트의 sdk 버전과 일치시키니 에러가 사라졌다.
// project_root/node_modules/[package name]/android/build.gradle
android {
compileSdkVersion 30
defaultConfig {
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
ndk {
abiFilters "armeabi-v7a", "x86"
}
}
}
to
android {
compileSdkVersion 31 //<- here
defaultConfig {
minSdkVersion 21 //<- here
targetSdkVersion 31 //<- here
versionCode 1
versionName "1.0"
ndk {
abiFilters "armeabi-v7a", "x86"
}
}
}