해결 방법을 찾기 위해 유사 어플을 몇 개 찾아봤다. (플레이스토어 검색 : 카톡분석 or 채팅분석 등에서 검색되는 어플들)
어플 1 :
- 마지막 업데이트 : 2021년 11월
- 저장권한 : YES
- 실제로 접근이 가능한가? : YES
어플 2:
- 마지막 업데이트 : 2023년 OO월
- 저장권한 : YES
- 실제로 접근이 가능한가? : NO
비교를 통한 결론 :
2024년 3월 기준으로 플레이스토어에 배포를 하려면, SDK 33 이상을 타겟으로 잡아야한다. 유사 어플들의 마지막 업데이트는 주로 2021년임으로 그 상대 SDK는 31 미만으로 추측된다. 그렇기에 내 스마트폰에서도 문제없이 작동했다.
이를 통해 얻은 결론 :
App의 타겟 SDK를 31 이하로 맞춰서 개발 및 배포를 시도해보자!
개발 및 배포 실험 결과 :
- 타겟 SDK를 31 이하로 하면 폴더 읽기는 성공함 (긍정)
- 하지만, 파일은 읽지 못함 (부정)
- SDK를 29 이하로 맞춰서 테스트해보니 파일도 잘 읽음 (긍정)
- 하지만, 배포는 33 부터라 무의미해짐. (완전 부정)
어떻게 실험?
- build.gradle 파일에서 targetSdkVersion을 조정하면 타겟 SDK 조정이 가능하다.
- 아래 이미지는 SDK 29을 타겟으로 지정한 이미지이다.
- 결론 : 권한 부여 성공 및 파일 읽기 성공!
위 사진에서 중요한 점은 fileName : 개발자 카카오톡 대화 로그이다. 이는 파일을 읽고, 첫번째 줄 결과물이다.
즉, 정상적으로 외부 저장소에서 파일을 읽은 것이다.
+ 참고로 targetSdkVersion 29 에 빨간줄이 있는 이유가 있다. 플레이스토어 최소 SDK 버전이 31로 향상이 되었다. 그렇기에 안드로이드스튜디오에서 이를 알려줄려고 빨간줄 표현을 했다. 다른 말로하면, 유사 어플들은 SDK 버전이 29이하여서 정상적으로 외부 저장소에 접근을 했다는 뜻이다. 또!! 다른말로, 난 이제 29버전을 못쓴단 말이다..ㅎ
다음은 SDK 31로 지정하고 실험이다. (안드로이드스튜디오에서 알려주는 최소 SDK 기준)
SDK 버전 : 31 일때 외부저장소에 접근 가능한가? ( 플레이스토어 배포를 위해선 SDK 가 31 이상이여야함 )
사진이 길어서 잘 안보이지만, 퍼미션 때문에 접근을 못한다는 내용이다. 즉, 플레이스토어 배포에 필요한 SDK 31버전부터는 파일을 못 읽고있다.
+ 추가적으로
SDK 29 버전과 SDK 31 버전에서 설정 - 권한을 확인해보면 차이가 있다.(위에 사진 참고)
SDK 29 버전은 "파일"이 존재하지만, SDK 31 버전에는 "파일"이 없다.
큰일이다.
유사 어플과 비교하면 해답이 나올 줄 알았는데, 해답이 아니라 절망이 나왔다.
정녕 다른 방법은 없단 것인가...
SDK 33 이상 스마트폰에서는 다른 방식으로 파일을 읽게 코드를 수정해야할지 고민이 많다.
리젝 원인 분석 2편 결론 :
# 대실패 # 멘탈붕괴 # O발 보안정책 # 소주한잔