brunch

[블로그 글쓰기 챌린지: Writing Mob 19회]

by 서준수

[블로그 글쓰기 챌린지: Writing Mob]에 대한 간단한 안내


19회 차에는 WebView로 미디어 파일 전송 중 발생한 문제 해결, 무한스크롤 적용기, CI에서 UI 테스트 하기에 관한 내용을 담고 있습니다. 자세한 내용은 아래 링크에서 확인하실 수 있습니다. 많은 관심과 응원 부탁드립니다. 좋아요 또는 댓글은 각 블로그에 직접 남겨 주시면 좋겠습니다. 감사합니다.


잘못된 내용이나 사소한 오탈자 등 소중한 피드백은 대환영입니다. 해당 블로그에 댓글로 남겨 주시면 감사하겠습니다.


아래 내용은 Gemini를 통해 요약하였습니다.


케이엠

https://velog.io/@kmkim2689/android-webview-NotReadableError

안드로이드(Android) 웹뷰(WebView) 내에서 <input type="file"> 태그를 통해 갤러리 등 외부 앱의 미디어 파일을 업로드하려 할 때 발생하는 NotReadableError는, 웹뷰가 앱의 메인 프로세스와 다른 별도 프로세스에서 실행되어 파일 접근 권한을 공유받지 못하기 때문에 발생합니다. 즉, 갤러리 앱이 반환한 URI에 부여된 임시 읽기 권한(FLAG_GRANT_READ_URI_PERMISSION)이 웹뷰 프로세스에는 전달되지 않아 파일 입출력(I/O)에 실패하는 것입니다. 특히 안드로이드 10 (API 29) 이상의 Scoped Storage 정책은 이러한 문제를 더욱 부각합니다. 이 문제에 대한 효과적인 해결 방안은, 외부에서 받은 원본 URI의 파일을 앱 내부 캐시 디렉터리로 먼저 복사한 뒤, FileProvider를 이용해 grantUriPermissions="true" 속성이 적용된 새로운 URI를 생성하여 웹뷰의 onShowFileChooser 콜백으로 전달하는 것입니다. 이 방법을 통해 웹뷰 프로세스도 안전하게 파일 읽기 권한을 확보하여 오류 없이 파일을 전송할 수 있습니다.


해나

https://velog.io/@hxeyexn/staccato-infinite-scroll-1

안드로이드 '스타카토' 프로젝트에서 카테고리 조회 시, 모든 목록을 한 번에 불러와 발생하는 썸네일 로딩 지연 문제를 해결하기 위해 무한 스크롤을 도입한 과정을 다룹니다. 데이터 페이징 방식으로는 성능과 데이터 정합성(중복 및 누락 방지)을 고려하여 Offset/Limit 방식 대신 Cursor 방식을 채택하였으며, 화면에 노출되는 개수를 고려해 10개 단위로 데이터를 조회하기로 결정했습니다. 이 과정에서 두 가지 주요 기술적 문제에 직면했는데, 첫째는 Paging 라이브러리의 안드로이드 의존성이 멀티 모듈 구조의 domain 모듈과 충돌하는 문제로, 이는 안드로이드 의존성이 없는 paging-common 라이브러리를 활용하여 해결을 시도하였습니다. 둘째는 NestedScrollView 내 RecyclerView의 nestedScrollingEnabled 속성으로 인해 페이징이 작동하지 않거나 스크롤이 버벅거리는 문제였으며, 이는 기존 뷰 시스템 대신 Jetpack Compose로 화면을 마이그레이션 하는 방향으로 해결하고자 하였습니다.


호두

https://walnut-dev.tistory.com/10

안드로이드 UI 테스트를 CI(지속적 통합) 환경에서 실행하기 위한 방법론을 제시하며, 특히 GitHub Actions의 ReactiveCircus/android-emulator-runner Action을 활용하는 방안에 중점을 둡니다. 원격 레포지토리 환경에서 UI 테스트에 필수적인 안드로이드 에뮬레이터를 설정하고 실행하는 기본적인 사용법을 소개하며, 나아가 리눅스(ubuntu) 러너에서 KVM 가속을 활성화하여 에뮬레이터 실행 속도를 향상하는 최적화 팁을 제공합니다. 또한, target (시스템 이미지), profile (기기 하드웨어) 등 다양한 옵션 설정 방법과 matrix 전략을 활용하여 여러 API 레벨 및 기기 프로필에서 동시에 테스트를 수행하는 효율적인 워크플로 구성 방안을 설명하고, CI 단계에서 UI 테스트를 자동화하는 것의 중요성을 강조하며 마무리합니다.

keyword
매거진의 이전글[블로그 글쓰기 챌린지: Writing Mob 18회]