군대를 갔다와서 컴퓨터를 사고나니 플러터 버전이 달라져있어 프로젝트를 처음부터 다시 만들기로 했다.
그래서 새 컴퓨터에서 새 개발환경을 다시 세팅해 기존 소스코드를 참고하여 처음부터 개발을 시작했다.
방학이 끝나고 개강한 뒤 학교 기숙사로 왔다.
데스크탑을 가져올까 하다가 그냥 노트북만 들고왔는데,
노트북에는 플러터 2.0 버전과 구버전의 안드로이드 스튜디오가 깔려 있는 상황
2021년에 처음 이 앱을 개발하던 시기의 개발환경이 세팅되어 있는 상태였다.
안드로이드 스튜디오에서 제공하는 flutter 업데이트 기능을 이용해 flutter를 업데이트하고,
chocolate 를 이용해 dart-sdk 도 설치했다.
flutter doctor 를 검색해보니 분명 자바가 이미 깔려있는데 java version 을 알 수 없다는 오류가 나서
안드로이드 스튜디오 업데이트로 해결했다.
이제 대망의 앱 빌드 시간,
다행히 앱이 빌드가 잘 되었다.
그런데 앱을 테스트 해보면서 구글 로그인을 시도하자 이번엔 아래와 같은 오류가 나왔다.
뭔가 낯이 익었지만, 무슨 오류인지 모르겠어서 구글링해보니
직접 google-services 를 add 해야한다는 답변을 찾아서 이건 또 어떻게 해야하나 싶었다.
답변에서 Flutturefire cli 라는 말이 나와서 Firebase Cli 를 설치하고
Firebase Configure 명령어도 다시 실행해봤다.
하지만 그럼에도 구글 로그인이 되지 않았다.
도저히 방법을 모르겠어서 릴리즈 모드로 빌드해도 안되는지 체크해보자!
하는 마음으로 릴리즈 모드로 빌드를 해봤다.
그러자 릴리즈 모드는 아예 빌드조차 되지 않았다.
이유는 key.properties 파일과 upload-keystore 파일의 부재였다.
릴리즈 모드로 빌드할 때, 앱 서명을 위해 upload-keystore 가 필요한데,
key.properties 파일이 upload-keystore 정보를 가지고 있다.
upload-key의 위치와 비밀번호 정보가 들어있다보니 민감한 파일이라
플러터 프로젝트에서도 기본으로 gitignore 설정이 된 파일이다.
그래서 이 파일과 upload-keystore 파일이 집 데스크탑에 있어서 실행이 되지 않았다.
key.properties 파일이야 원래도 내가 직접 만들었던게 기억나서 직접 만들고,
누나한테 부탁해서 집에서 upload-keystore.jks 파일도 받았다.
이제 key.properties 파일도 설정했겠다.
다시 릴리즈 빌드를 해보니.. 여전히 빌드에 실패했다.
keystore 에서 key 라는 alias를 가진 키를 찾을 수 없다는 오류였다.
여기에서 멘붕이 와서 keystore 관련된 오류를 열심히 찾아봤다.
그러다가 하나의 게시글을 만나게 되었다.
https://linitial.tistory.com/2
세상에.. 디버그 키는 컴퓨터 PC 마다 다른 것이었다..!
여기에서 아까 Firebase 로그인이 안된 원인을 깨달았다.
그럼 Debug 모드로 빌드한 앱에서 Firebase 로그인이 안된 이유는
내 노트북에서 Debug Build 한 앱에 들어간 서명이 Firebase에 등록되지 않았기 때문이었다.
그렇다면 이제 찾아야 하는 것은 Firebase에 등록할 Debug Build 에 사용되는 키가 가진 SHA1 해시 값이다.
하지만 여기서부터 또 문제의 시작이었다.
우선 debug.keystore 의 해시값을 알아내는 방법은 안드로이드 스튜디오에서
flutter project 의 android 폴더에서 ./gradlew signingReport 명령어를 실행하는 것이었다.
그러나 이 명령어를 실행하자 다음과 같은 오류가 나왔다.
FAILURE: Build failed with an exception.
* Where:
Build file 'FlutterProjects/MyProjects/ConverterNOW/android/app/build.gradle' line: 24
* What went wrong:
A problem occurred evaluating project ':app'.
> Failed to apply plugin 'com.android.internal.application'.
> Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.
You can try some of the following options:
- changing the IDE settings.
- changing the JAVA_HOME environment variable.
- changing `org.gradle.java.home` in `gradle.properties`.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 22s
Exception: Gradle task assembleDebug failed with exit code 1
(이 에러 코드는 스택오버플로우에서 긁어왔으나, 나와 동일한 오류였다.)
도대체 이게 무슨 에러인지 찾아보려고 구글링을 1시간을 넘게했다.
근데 정답은 결국 저 에러에 있었다.
java 11 이 필요한데, java 11 이 아니니까 확인해보라는 것
알고보니 내가 자바를 노트북에 설치할 때 java 8 을 설치했었다.
그래서 java 8 을 삭제하고, java 11 을 다시 설치하고, 환경변수 등록도 다시 다 바꿔주니
드디어 성공..
여기에 나온 SHA1 키를 Firebase 프로젝트 설정에 넣어주니 잘 동작했다.
이걸로 디버그 모드 에러는 해결
하지만 아직 릴리즈 모드에서 빌드가 안되는 문제가 남아있다.
처음에는 이 문제를 제대로 이해하질 못해서
upload-keystore.jks 라는 파일이 하나의 '키' 이고
이거를 지금 노트북에 있는 keystore 에 등록을 해야한다고 생각했다.
그래서 이 키를 어떻게 등록하지.. 하다가
keytool 에 import 명령어가 있길래 이걸로 키를 임포트도 해봤는데 여전히 실패
그런데 이걸 하면서 옵션을 보니까 이 jks 라는 파일 자체가 keystore 였고
이 keystore 안에 alias 가 있어서, import 할 때도 alias 를 설정하는 옵션이 있는 걸 발견했다.
아무튼 결론은 에러메세지에서 말한대로 너가 설정한 키 파일 보니까 alias=key 인 키가 없어서 생긴 문제이니
key.properties 에서 alias 값을 제대로 적으면 해결된다는 뜻이다.
하지만 저 jks를 만들 때, 인터넷에서 코드를 복붙해서 만들었다보니 alias 가 어떤 값이었는지 기억이 안났다.
하지만 구글링해보니 바로 발견
keytool -list -v 옵션으로 해당 jks 파일을 조회하니 alias 정보가 나왔다.
key.properties 에 alias 를 맞게 입력해주니 release build 는 바로 성공했다.
이게 무슨 뻘짓이었나 싶지만, 이걸 찾아본 덕분에 keystore 에 대해 제대로 이해할 수 있었다.
그리고 디버깅 모드에서 Firebase 로그인이 안되는 문제까지 해결할 수 있었다.
오늘의 결론 : 자바 버전을 잘 골라 설치하자, 검색하기 전에 에러 메세지를 잘 읽어보자..
웹개발과 달리 앱개발은 환경세팅이 너무 힘든 것 같다🙃
'개인 프로젝트 > [2021] 코드악보 공유APP' 카테고리의 다른 글
21. 악보에 태그 기능 추가하기 (2) | 2023.08.12 |
---|---|
20. 플레이스토어 출시 (0) | 2023.08.08 |
19. 그룹 기능 구현과 Firestore 데이터 구조 고민 (0) | 2023.07.19 |
18. 플러터 버전 업데이트 / DB 구조 수정 / 테스트 코드 추가 (0) | 2023.05.21 |
17. UI 수정 / 악보 좋아요 기능 추가 / 그룹 기능 추가 / 성능 개선 (0) | 2021.08.19 |