[expo] eas build (Android) 에러

gigi·2023년 2월 21일
0

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 sdk 버전 문제
  • dependencies 라이브러리 충돌 문제
  • env 설정 문제

expo 버전도 변경해보고, 문제가 될만한 라이브러리도 삭제해보고 환경변수도 eas.json에 설정 해봤지만 문제가 해결되지는 않았다.

단계별로 원인을 찾기 위해 새로운 프로젝트를 생성했다.

  1. 기존 프로젝트와 같이 eas init 설정을 하고 eas build 키워드를 통해 빌드를 했다. (eas 설정 문제x)
  2. 기존 프로젝트에 종속성으로 포함한 라이브러리들을 새로운 프로젝트에 조금씩 추가하면서 빌드를 해보고 에러가 발생하는 것이 있는지 찾아보았다. (라이브러리 문제x)
  3. 환경변수를 eas.json에 설정하고 빌드를 했다. (env 문제x)
  4. 여기까지 아무런 에러가 발생하지않았다. (설정에는 문제가 없다.)
  5. 프로젝트를 구현한 코드 중 어딘가에서 에러가 발생하고 있다는 판단이 들었다.
  6. dev tool에서 빌드 에러에 관련된 내용들 발견. 여러 에러들중에 firebase에 대한 에러가 눈에 띄었다.
  7. 구글링 해본결과 firebase app 초기화 코드에 문제가 있다는 것을 찾았다.
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 커뮤니티가 크지 않기때문에 정보도 많지 않아서 시간을 엄청나게 소비하게 될 가능성이 있다.

0개의 댓글