expo에서 최근 expo build의 지원이 중단되고 eas build 로 앱을 빌드하도록 변경 되었다.
expo 공식 홈페이지에 eas init 설정하는 점이 있지만 크게 어려운 것은 없고 이전에
expo build:android
명령어로 빌드해서 구글 플레이스토어에 업로드 한 프로젝트이기 때문에 설정을 마치고 eas build -p android --profile preview
명령어로 빌드를 해보았지만 에러가 발생했다. 내가 겪었던 에러는 다음과 같다.
Build failed: Gradle build failed with unknown error.
See logs for the "Run gradlew" phase for more information.
알 수 없는 이유 때문이라니 원인을 어떻게 찾아야할지 막막했다. 몇일동안 원인을 찾지 못하고 손을 놓아버렸다가 다시 정신차리고 구글링해보고 겨우 해결을 했다.
먼저 해당 오류의 자세한 내용은 https://expo.dev/ 에서 자신의 프로젝트에 들어가면 실패한 빌드에 대한 정보가 나오는데 logs를 살펴볼 수 있다.
Run gradlew 탭을 눌러보면 상당히 많은 곳에 [stderr] 표시가 있을 수 있다. 그 중에 원인을 찾아 나가보면 될 것이다.
나는 위의 에러코드를 볼 수 있는 dev tool이 있는지 모르고 몇일간 구글링을 통해 위 에러를 해결해보았다.
나와 같은 에러를 겪은 사람들이 몇몇 있었고, 누군가가 제시해 준 해결방법도 다양했지만 내 상황에는 적용되지 않는 방법들이었다.
expo 버전도 변경해보고, 문제가 될만한 라이브러리도 삭제해보고 환경변수도 eas.json에 설정 해봤지만 문제가 해결되지는 않았다.
import firebase from "firebase/compat/app";
import "firebase/compat/database";
import "firebase/compat/storage";
const firebaseConfig = {
apiKey: process.env.API_KEY,
authDomain: process.env.AUTH_DOMAIN,
projectId: process.env.PROJECT_ID,
storageBucket: process.env.STORAGE_BUCKET,
messagingSenderId: process.env.MESSAGING_SENDER_ID,
appId: process.env.APP_ID,
measurementId: process.env.MEASUREMENT_ID,
databaseURL: process.env.DATABASE_URL,
};
// 기존 코드
// if (!firebase.apps.length) {
// firebase.initializeApp(firebaseConfig);
//}
if (!firebase.apps.length) {
app = firebase.initializeApp(firebaseConfig);
} else {
app = firebase.app();
}
export const db = firebase.database();
expo build 로 할땐 나타나지 않았던 에러인데 eas build 에서 발생한 이유는 확실하지 않지만, 앱을 초기화하기 전에 실행 중인 앱 목록을 확인하여 실행중인 앱이 없을때 초기화하고 실행중인 앱이 있으면 초기화하지않고 실행하게끔 수정을했다.
현재는 eas build -p android --profile preview
도 잘 되고 구글 플레이스토어에 업데이트도 잘 되었다.
나와같은 문제가 발생한 경우라면 위와같이 firebase 코드를 수정하면 해결하면 될거라고 생각하고, 그 외의 문제는 https://expo.dev/ 에서 실패한 빌드에 대한 logs를 볼 수 있으니 해당 내용을 먼저 확인해보길!
Build failed: Gradle build failed with unknown error.
See logs for the "Run gradlew" phase for more information.
해당 에러메세지로 구글링하게되면 원인이 너무 다양하고 expo 커뮤니티가 크지 않기때문에 정보도 많지 않아서 시간을 엄청나게 소비하게 될 가능성이 있다.