루피도 코딩한다

앱을 출시를 했는데요, 출시를 못했습니다 (1편/ Leakcanary) 본문

Android

앱을 출시를 했는데요, 출시를 못했습니다 (1편/ Leakcanary)

xiaolin219 2022. 10. 4. 18:24

0. 발단

지난 반년 간 사이드 프로젝트로 틈틈이 진행해오던 'ReadMe'가 드디어 릴리즈를 했다.
그러나 리젝만 3번 당하고 v1.0.4가 되어서야 프로덕션 릴리즈에 성공했다.
너무나도 기쁜 나머지 나는 이 사실을 곧바로 우리 가족들에게 알렸고, 아버지가 제보를 해오셨다.

'딸, 앱 다운로드가 안 되는데?' (아버지가 캡처해주신 사진)

후.. 4번의 리젝과, 출시는 했는데 앱 다운로드가 안 되었던 여정을 공개하고자 한다.

1. 사건의 발단 '개인정보처리방침'

v1.0.0, v1.0.2, v1.0.3 세 가지 버전을 Google Play Console에 심사를 올렸고, 3번 다 리젝 당했다.
그 이유는 모두 개인정보 처리방침 url 문제였다.
각 버전별로 아래와 같은 조치를 취한 후, 정상적으로 릴리즈 할 수 있었다

1) v1.0.1 : '이용약관' 연결 url을 '이용약관'이 아닌 '개인정보처리방침'으로 수정

2) v1.0.3 : '이용약관' text를 '개인정보처리방침'으로 수정 ('개인정보처리방침'이라는 명확한 라벨 미지정)

앱 화면
스크린샷 2022-10-04 오후 12 30 20

3) v1.0.4 : 지오펜싱되지 않은 '개인정보처리방침' url으로 변경

기존에 ReadMe는 '개인정보처리방침'링크를 앱 외부로 연결시켰으며, 이때 Notion을 활용하였다.
그러나 Notion의 특성상 '아래 링크를 눌러 외부 링크로 이동하세요'라는 페이지가 나오는 경우가 있다.
이를 '지오펜징된 url'이라고 칭하며, 직접적으로 '개인정보처리방침'으로 이동되도록 기획자가 변경했다.

 

개인정보처리방침 가이드

구글에서 제시하는 '개인정보처리방침'에 대한 가이드는 아래와 같다.
빨간색 밑줄이 그어져 있는 부분은 우리 앱에서 문제가 되었던 부분이다.

스크린샷 2022-10-04 오후 6 00 36

릴리즈 완료🎉🎉

행복한 마음으로 출시를 끝마쳤다고 생각하고 있었는데..
Google Play Store에서 앱이 다운로드 안 되는 문제가 연이어 발생했다.

2. 내 멘탈 Leak을 불러일으킨 'Leakcanary'

우리 아버지를 포함하여 안드로이드 휴대폰을 사용하는 팀원들 모두 Google Play Store에서 앱이 다운로드되지 않는 초유의 사태가 발생했다. 개발을 시작하고 수많은 에러와 마주해보았지만, 심사를 통과한 앱이 Play Store에서 다운로드가 안 되는 문제는 당황스러운 사건 TOP 5 안에 들었던 것 같다. 앱 다운로드 에러를 해결하기 위해 구글링을 해보았지만, 대부분 Google Play Store 앱 자체에 문제가 있을 때의 해결법이었다. 이에 발 빠른 기획자는 안드로이드 현직 개발자가 있는 오픈 카톡방으로 뛰어가 자문을 구하였고, 'adb로 apk를 설치해보면 에러 메시지를 알 수 있을 것'이라는 조언을 얻을 수 있었다.

 

adb 명령어에 대한 공식문서는 아래와 같다

https://developer.android.com/studio/command-line/adb 

 

Android 디버그 브리지(adb)  |  Android 개발자  |  Android Developers

기기와 통신할 수 있도록 지원하는 다목적 명령줄 도구인 Android 디버그 브리지에 대해 알아보세요.

developer.android.com

 

그간 개발을 할 때에 adb 명령어는 Android Studio와 실기기를 무선으로 연결하기 위해서만 사용했었다. 그러나 이번 사건을 계기로 adb 명령어로 앱을 설치하는 등 명령어로 할 수 있는 많은 일이 있다는 사실을 알게 되었다. 10분 정도 새로운 지식에 감탄하는 시간을 가진 후에, 조언에 따라 adb 명령어를 사용해 app-release.apk를 실기기에 설치를 시도했다. 그리고 정말 감사하게도 아래와 같은 에러 메시지를 얻을 수 있었다.

adb install app-release.apk

Performing Streamed Install
adb: failed to install app-release.apk: Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: Failed parse during installPackageLI: /data/app/vmdl1817236938.tmp/base.apk (at Binary XML file line #68): <activity-alias> target activity leakcanary.internal.activity.LeakActivity not found in manifest]

요약하자면 파일 파싱 중에 에러가 발생했고, 원인은 Manifest에서 Activity를 찾지 못하기 때문에 잘못 구성된 파일이라는 에러였다.
분명 debug모드에서는 잘 작동하는 것을 확인했는데, 왜 이러한 문제가 생긴 것일까? 조금 억울했지만, 에러가 나는 Manifest파일을 확인하러 가보았다. 그 결과 LeakCanary가 문제였음을 알게 되었다.

문제 및 해결 과정

  1. 우리 팀에서는 메모리 릭을 방지하기 위해 leakcanary를 사용 중이었음
  2. 디버그 시에만 사용하기 위해 build.gradle 에서 아래와 같이 debugImplementation을 사용함
  3. debugImplementation(ThirdPartyDependencies.leakCanary)
  4. 안드로이드 12 이후 버전부터 문제가 발생했음
    관련 이슈 링크
  5. 해결책으로 창환 오빠가 Manifest에 아래 코드를 추가
  6. <!-- leakcanary 안드로이드 12부터 버전충돌 문제 해결 --> <activity-alias android:name="leakcanary.internal.activity.LeakLauncherActivity" android:exported="false" android:targetActivity="leakcanary.internal.activity.LeakActivity" />
  7. release용 apk에서는 leakCanary를 찾을 수 없어서 아래와 같은 에러가 발생함
  8. adb: failed to install app-release.apk: Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: Failed parse during installPackageLI: /data/app/vmdl85471026.tmp/base.apk (at Binary XML file line #68): <activity-alias> target activity leakcanary.internal.activity.LeakActivity not found in manifest]

leakCanary는 debug모드에서만 의존성이 추가되므로, release모드로 실행시킬 경우, Manifest에서 LeakCanary 파일을 찾지 못해 발생하는 에러였다.

  1. debug용 Manifest를 생성해서 4번 코드를 이전 -> 아래에 해결 과정을 정리해두었다.

해결 과정

  1. debug용 Manifest를 추가로 생성한다.

app/src/debug/AndroidManifest.xml의 경로에 파일 생성을 완료하면 안드로이드 스튜디오 좌측 하단에 아래와 같이 두 개의 Manifest가 나타난다.

image

 

기존 파일에서 문제가 되었던 코드를 드러낸다.

스크린샷 2022-10-04 오후 5 45 00

 

그리고 debug용 AndroidManifest.xml 파일에 드러냈던 코드를 추가해준다.

스크린샷 2022-10-04 오후 5 53 37

 

Manifest 파일 관리와 관련된 공식문서는 아래와 같다

https://developer.android.com/studio/build/manage-manifests

 

매니페스트 파일 관리  |  Android 개발자  |  Android Developers

매니페스트 빌드 변수, 매니페스트 병합, 매니페스트 병합 도구에 관해 알아보세요.

developer.android.com

 

그렇게 다운로드가 안되던 문제를 성공시켰다!!!

그런데... 카카오톡 로그인에 문제가 있단다...

아.. 카카오 로그인은 내담당인데... 구글 심사 통과 어케했누..

 

 

카카오톡 로그인 문제 해결 과정은 '앱을 출시를 했는데요, 출시를 못했습니다' 2편에서 이어집니다..^^

 

 

 

Comments