0. 해결법

시간이 없으신 분들은 이곳을 통해 빠른 해결 하시기를 기원합니다.

https://stackoverflow.com/questions/68387270/android-studio-error-installed-build-tools-revision-31-0-0-is-corrupted

 

 

1. 사건의 발단

회사에 예전에 제작하고 유지하고 있는 안드로이드 프로젝트가 있다. 

그런데 최근 일부 기능이 사용되지 않으면서 외부 서비스에 비용이 매달 지출된다는 것을 발견하였다.

그 기능을 일시적으로 비활성화 하기로 하였다.

 

2. 기능 수정은 간단하군

오랜만에 건드리는 프로젝트라 걱정이 앞섰으나, 사실 그렇게 어려운 부분은 없었다.

해당 기능을 사용할 수 없도록 화면을 약간 수정하고 소스코드를 몇가지 주석처리를 했을 뿐이다.

1시간도 걸리지 않은 것 같다.

 

3. 즐거운 마음으로 배포하고 퇴근하자

오후 4시에 시작한 수정 작업은 5시쯤 완료 되었다. 

테스트폰에 돌려보니 잘돌아간다.

인텔리제이가 targetSdkVersion 30에 노란불을 띄웠길래 버전업이 되었구나 하며 31버전으로 바꾸었다.

이제 구글 플레이 콘솔에 업로드만 하면 배포 준비는 끝... 이라고 생각하였으나

업로드하자 콘솔에서 배포불가능한 코드라는 식의 메시지가 뜬다.

해당 사진자료를 스크린샷하지 못하였지만 대략 아래와 비슷한 내용이었다.

아 안돼... 

퇴근시간 안에 배포해야 한다. 그래야 칼퇴가 가능하다.

 

4. 와 야근!

빨리 빨리...

원인을 찾자. 내가 무얼했지?

아 그래, sdk 버전을 올렸지. 업데이트하는 김에 타겟을 높이면 좋잖아?

그게 문제였나.

좋다. 그럼 버전을 내려서 다시 업로드해야지.

그래들에서 sdk버전을 내린 뒤 apk 빌드를 시작한다... 엥?

The minCompileSdk (31) specified in a dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties) is greater than this module's compileSdkVersion (android-30).

위와 같은 에러가 발생했다. 

디펜던시 문제라고 한다.

'androidx.appcompat:appcompat:1.4.1' 때문이란다.

내 프로젝트엔 'androidx.appcompat:appcompat:1.4.1'이 없는데?

점점 미궁으로 빠져든다.

다시 compileSdkVersion과 targetSdkVersion을 31버전으로 올려서 빌드해본다... 엥?

Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager.

아 현기증이 올라온다. 시간은 벌써 9시.

칼퇴는 무슨... 집으로 가자.

 

5. 간과한 점은 무엇인가

다음 날 아침, 멘탈을 다시 부여잡고 냉정하게 상황 판단을 시작한다.

내가 간과한 것이 무엇인가?
    - 프로젝트를 오랜만에 수정하였다
    - 작업 컴퓨터를 바꾸었다
    - 안드로이드 스튜디오 버전이 바뀌었다
    - 모바일 플랫폼은 수시로 업데이트되고 바뀐다

정리가 되기 시작한다.

프로젝트를 작년에 완료한 후 작업 컴퓨터를 바꾸었고, 해당 프로젝트는 Github에 저장되어 있으니, 로컬에는 받아놓지도 않았다.

젯브레인 툴박스로 안드로이드 스튜디오를 설치하니, Arctic Fox가 설치된다. 일부러 설치 안하던 버전이었는데 이제는 강제로 설치된다.

 컴파일 및 타겟 sdk버전을 주의없이 수정하였다. (이건 억울하다. Arctic Fox 때문이다...)

 

6. 해결

'정답은 구글이 알고 있다'는 옛 선현들의 말씀에 따라 다시 해결책을 찾아 나선다.

인텔리제이 캐시를 비워보기도 하고
그래들 디펜던시 캐시도 삭제해보고
Arctic Fox 최신버전을 설치해보고
sdk버전도 30~32를 넘나들며 바꿔보았다.

그래도 안돼?

이건 정상적인 방법으로는 해결할 수 없다는 직감이 온다.

스택오버플로우를 계속 파본다.

그러던 중 발견한 해결법.

https://stackoverflow.com/questions/68387270/android-studio-error-installed-build-tools-revision-31-0-0-is-corrupted

 

Android Studio error "Installed Build Tools revision 31.0.0 is corrupted"

I'm on Android Studio 4.2.2. I created a new project and haven't added anything to the starter code and whenever I click build or run, I get this error: Installed Build Tools revision 31.0.0 is

stackoverflow.com

 

위 질문에 달린 답변.

요약하자면, 안드로이드 스튜디오 자체의 이슈라는 것.

파일을 직접찾아 변경하라고 한다.

댓글들도 난리가 나 있었다.

 

바로 이게 정답일 확률이 높다고 생각하고 바로 적용해본다.

빌드... 성공!

그래들에 적용한 sdk버전은 위와 같다.

 

결과적으로 인텔리제이 안드로이드 스튜디오 버전 자체의 문제였다고 보인다.

인텔리제이를 원망하지는 않는다.

다른 제품들은 대부분 만족하면서 사용하고 있으며, 안스는 무료툴이기도 하기 때문에.

다만 저런 세계적인 회사도 쉽지 않은 것이 디버깅과 테스트라는 점이 내 마음을 조금 무겁게 했을 뿐이다.

 

이상

 

플러터에서 구글 로그인을 구현하기 위해

https://pub.dev/packages/google_sign_in

 

google_sign_in | Flutter Package

Flutter plugin for Google Sign-In, a secure authentication system for signing in with a Google account on Android and iOS.

pub.dev

위의 라이브러리를 사용하였다.

 

이렇게 코드를 추가하고 실행해보면

 

아래와 같이 에러가 발생한다.

 

스택오버플로우 등 여러 곳을 찾아 보았으나 문제가 해결되지 않았는데, 

 

라이브러리 제작자의 예시코드를 보니 clientId가 optional인 것을 확인하였다.

 

그래서 clientId를 지워보았더니...

 

정상적으로 정보를 가져온다.

 

플러터 프로젝트를 생성하고 lib폴더에서 패키지를 생성하려고 할 때 아래와 같이 패키지가 보이지 않는 경우가 있다.

필자의 경우 툴박스의 안드로이드 스튜디오를 사용 할 때 보이지 않았다.


안드로이드 스튜디오를 독립적으로 설치했을 때에는 바로 패키지가 만들어졌는데 이상하다.

이럴 경우 아래와 같이 하면 해결된다.

 

 

Mark Directory as -> Sources Root

 

패키지가 생긴 것을 확인하였다.

 

플러터에 firebase auth 등을 추가하려면 아래와 같이 오류가 발생한다.

버전이 올라가면서 firebase 기능을 사용하려면 추가 코드가 필요하다.

 

위와 같이 firebase_core를 디펜던시에 추가하고,

 

메인 메서드에서 위 코드를 입력한다.

이후 재가동하면 정상작동할 것임. 

 

 

 

https://flutter.dev/

 

Flutter - Beautiful native apps in record time

Flutter SDK is Google's UI toolkit for crafting beautiful, natively compiled applications for mobile, web, and desktop from a single codebase.

flutter.dev

 

위 사이트 접속

 

 

오른쪽 상단의 get started 클릭

 

 

윈도우 환경이기 때문에 windows 선택

 

 

zip 파일 다운로드

 

 

압축을 풀고 원하는 디렉토리에 이동시킨다.

홈페이지에서 경고했듯이 C:\Program Files 에 이동시키지 않도록 한다.

 

폴더 내부의 bin 폴더를 환경변수에 등록하여야 플러터 명령어를 사용할 수 있다.

 

 

먼저 사용자 변수에 플러터 bin폴더를 추가한다.

시스템 변수에 Path를 선택하고 편집을 클릭한뒤 bin 경로를 입력한뒤 확인을 누른다.

 

cmd창에서 flutter 를 입력해본다.

 

위와 같은 메세지들이 나온다면 성공.

 

https://developer.android.com/studio

 

Download Android Studio and SDK tools  |  Android 스튜디오

developer.android.com

안드로이드 스튜디오가 없다면 홈페이지에서 다운로드 받는다.

 

 

설치후 SDK 매니저를 실행해본다.

 

 

개발대상 안드로이드 버전을 선택한다.

최신버전보다 그 이전 버전을 선택하는 것이 좋다.

 

 

다음으로 플러그인을 설치한다.

 

 

플러터를 검색한뒤 설치하고 스튜디오를 재시작한다.

 

 

재시작되면 플러터프로젝트를 생성할 수 있게 된다.

 

cmd 창에서 flutter doctor를 입력해본다.

 

 

위와 같이 뜨면 빨간박스 내용을 입력하고 모두 Y를 입력해준다.

 

 

다시 flutter doctor를 입력했을 때 문제가 없다면 제대로 완료된 것임.

 

 

스튜디오에서 플러터 프로젝트를 생성해본다.

 

 

 

프로젝트명은 소문자와 언더바를 이용하여 입력한다. (대문자를 허용하지 않는다.)

SDK 경로는 이전에 플러터 사이트에서 다운받고 위치시킨 경로를 입력한다.

project location은 프로젝트 폴더를 넣을 경로를 입력한다.

Description은 프로젝트 설명을 적는다.

 

패키지명을 적는다.

자신의 도메인을 역순으로 적는 것이 비공식 규칙이다.

site.com이라면 com.site라고 적는다.

도메인이 없다면 위와 같이 임의로 적어본다.

플랫폼 채널 랭귀지는 원하는 플랫폼을 선택한다. (둘다 선택해도 됨.)

 

 

프로젝트 화면이 나온다면 성공.

 

fcm push가 올 경우 화면을 실시간으로 변경해야될 경우가 있음.

liveData를 이용하여 구현 할 수 있다.

 

안드로이드 App 파일에서

 

스태틱으로 라이브데이터를 선언해준다

 

App파일의 onCreate에서 초기화 라이브데이터를 초기화 해준다.

 

fcm 메시지 리시버 내부에서

 

뱃지와 관련된 글로벌 카운트를 올려준 뒤
라이브 데이터를 변경한다(변경이 되어야 액티비티/프래그먼트에서 변경 감지를 할 수 있다)
메인쓰레드가 아닌곳에서 변경을 하려면 postValue를 이용한다

 

뷰를 변경할 액티비티나 프래그먼트로 이동한다
액티비티는 this / 프래그먼트는 viewLifecycleOwner를 라이프사이클 오너로 입력한다

 

이제 푸시 알림이 오면 해당 뱃지의 뷰가 변경이 된다.

 

rx Customer를 이용하여서도 비슷하게 구성 할 수 있다.

 

 

+ Recent posts