Android

Android/PlayConsole

[Android] Google Play Console 계정 확인 완료 정책

2023년 7월에 구글은 Google Play 요구사항 정책에 추가되는 개발자 인증 요구사항을 공개했었습니다. 해당 정책은 개발자의 신원 정보를 앱 사용자에게 공개하는 것으로 Google Play를 안전하고 신뢰할 수 있는 플랫폼으로 유지하기 위한 방법으로 도입된 것입니다. 이 정책을 따르지 않는다면 구글 계정과 배포된 앱이 삭제될 수 있다고 합니다. 굉장히 충격적인 소식이 아닐 수 없는데요. 다행인 점은 기존에 가입한 개발자 계정은 다양한 유형과 규모 등 인증하는 데 시간이 더 오래 걸릴 수 있다는 점을 고려해서 기한을 개발자가 직접 선택할 수 있도록 배려해 주었습니다. 2024년 2월 29일까지 마감 기한을 직접 선택하지 않으면 자동으로 마감 기한이 설정되니 꼭 참고하시길 바랍니다. 제공해야 하는 신..

Android/Common

[Android] touchDelegate로 뷰 계층 제약 없이 터치 영역 확장하기

당신은 Android 개발자로서 사진에 보이는 UI를 구현해야 합니다. UI 요구사항 중 왼쪽 아이콘을 클릭 액션이 존재하는데 클릭 영역을 뷰 사이즈보다 크게 잡아야 합니다. 어떻게 구현하면 좋을까요? 비교적 연령대가 높은 유저가 사용하는 서비스를 개발하다 보니 위 요구사항을 구현할 일이 종종 있었습니다. 그때마다 빈 레이아웃을 만들어서 해당 레이아웃에 클릭 리스너를 설정하는 방식을 사용했었는데요. 깨끗한 코드를 작성하겠다는 양심을 버려가며 레거시 코드를 마구마구 만드는 기분이었습니다.. 그러다 최근 위 요구사항에 알맞게 사용할 수 있는 touchDelegate라는 기능을 알게 되어서 소개해보려고 합니다. TouchDelegate TouchDelegate는 뷰가 가지고 있는 경계 너머로까지 클릭 반경을 ..

Android/Common

[Android] InAppUpdate 기능 알아보기

InAppUpdate 인 앱 업데이트 기능은 앱 내에서 사용자의 업데이트를 유도하는 기능으로 2019년 Google IO에서 처음 소개되었습니다! 안드로이드 5.0(Api level 21) 이상부터 사용 가능하고 Play Core Library 버전도 1.5.0 이상을 사용해야 합니다. 의존성 추가 implement 'com.google.android.play:app-update-ktx:2.1.0' 업데이트 가능 여부 private val appUpdateManager: AppUpdateManager by lazy { AppUpdateManagerFactory.create(context) } val appUpdateInfoTask = appUpdateManager.appUpdateInfo appUpdat..

Android/WebView

[Android] Webview Alert 표시하기

요즘 회사에서 WebView 이슈로 여러 번 앱 업데이트를 하고 있는데요. 이번 글의 주제는 WebView의 Alert가 안 나오는 이슈가 있어서 알아보게 되었습니다. 이번 글에서는 WebView의 Alert를 표시하는 방법에 대해서 소개해보려고 합니다. Alert가 안 나온다면 //문제의 코드 override fun onJsAlert( view: WebView, url: String, message: String, result: JsResult ): Boolean { return true } 저처럼 Alert가 표시되지 않는 이슈를 겪고 있으시다면 WebChromeClient의 onJsAlert 함수에서 아무 처리도 하지 않고 그냥 true를 반환하고 있는지 확인해 보세요 onJsAlert 정의를 따라..

Android/Common

[Android] 앱 성능 개선 - 앱 시작 시간

안녕하세요. 이번 글에서는 '앱 시작 시간'에 대해서 알아보려고 합니다. 앱 시작 시간은 앱 성능 지표 중 하나인데요. 최근 면접에서 앱 시작 시간에 대한 질문에 대답을 못했어요 하하,, 이번 기회에 한번 같이 알아보면 좋을 것 같죠? 앱 시작 시간이란? 앱 시작 시간은 Android 성능 지표 중 하나로 앱을 로드하는 시간을 의미해요. 구글에서는 사용자의 경험을 위해 앱 시작 시간을 개선하라고 적극 권장하고 있는데요. Google Photo 앱에 시작 시간을 35 퍼 빠르도록 개선했다는 발표도 있었습니다 앱 시작 시간 유형 구글은 앱이 실행되기 전 상태에 따라서 앱 시작 시간 유형을 구분했습니다. Cold Start Cold Start는 앱이 처음부터 시작하는 것을 의미합니다. 기기가 부팅되고 맨 처음..

Android/Common

[Android] minSdk, compileSdk, targetSdk

android { ... compileSdk 33 defaultConfig { minSdkVersion 23 targetSdkVersion 33 } } 최근 minSdk, compileSdk, targetSdk 각 의미에 대해서 물어보는 질문에서 minSdk은 쉽게 대답했지만 compileSdk와 targetSdk의 차이점을 설명하지 못했던 슬픈 경험이 있어 이번 글을 준비하게 되었습니다. 이 글을 보시는 취준생분들이나 면접을 대비하시는 분들은 꼭 대답하실 수 있으면 좋겠네요 Android API Level 이번 블로그에서 알아보는 minSdk, compileSdk, targetSdk 속성의 값으로 Android API Level이 사용됩니다. 그래서 우선 Android API Level에 대해서 알아볼..

Android/WebView

[Android] WebView로 파일을 업로드하는 방법

안녕하세요 이번 글은 Android WebView에서 파일을 업로드하는 방법에 대해서 소개해보려고 합니다. 이번 주제는 Android WebView는 별도 처리 없이는 웹 사이트의 파일 업로드 기능을 사용할 수 없기 때문입니다. 문제 상황 @SuppressLint("SetJavaScriptEnabled") @Composable fun UploadWebViewScreen() { // File Upload HTML을 사용 val state = rememberWebViewStateWithHTMLData( """ Click on the "Choose File" button to upload a file: """.trimIndent() ) val context = LocalContext.current WebVie..

Android/WebView

[Android] WebView Exception 처리하기

안녕하세요. 오늘은 WebView를 구현한 앱에서 발생하는 이상한 오류에 대해 알아보고 어떻게 해결해야 하는지 짧게 알아보려고 합니다. WebView Crash? 최근 앱에서 PlayStore에 알 수 없는 Crash 제보가 수십 건 올라오기 시작했습니다. 위 사진이 제보되던 Crash의 스택 트레이스입니다. 처음에는 생소한 단어들과 처음 보는 클래스 이름 때문에 원인을 특정하기 어려웠으나 곧 WebView 내부에서 발생하는 Crash라는 것을 알게 되었습니다. WebView Crash 재현하기 위 오류는 WebView Render Process 과정에서 발생한 Crash입니다. 오류를 하기 위해서는 재현 경로를 알아야 하는데요. 다행히도 Rendenr Process에서 Crash가 발생하도록 하는 재현..

Android/WebView

[Android] WebView에서 유투브 전체 화면을 올바르게 표시하는 방법

안녕하세요 점냥입니다 :) 요즘 특정 화면을 WebView로 대체하는 경우가 종종 생기고 있어요. 실제로 앱 개발자의 역할은 대부분 올바른 URL을 설정해 주고 간단한 기본 설정을 해주면 됩니다. 그런데 만약 WebView에서 유튜브 영상 또는 비디오를 보여주고 싶다면 추가적으로 앱 개발자가 해줘야 하는 설정이 있어요. 한번 알아보러 가실까요? 문제 상황 @SuppressLint("SetJavaScriptEnabled") @Composable fun YouTubeInWebViewScreen() { val state = rememberWebViewState("https://www.youtube.com/embed/OK986vgCMs8") WebView( state = state, modifier = Modi..

Android/Gradle

[Android] Gradle 버전 카탈로그를 사용해 버전 관리하기

안녕하세요. 오늘은 Gradle 버전 카탈로그에 대해 간단히 알아보려고 합니다! Gradle 버전 카탈로그는? Gradle 버전 카탈로그는 멀티 모듈 프로젝트에서 의존성을 쉽게 공유하고 쉽게 관리할 수 있는 Gradle의 기능 중 하나입니다. 사실 최근에 추가된 기능은 아니고 Gradle 7부터 지원을 시작했다고 해요. extesion이나 buildSrc를 통해 의존성 버전을 관리해 오다가 최근 nowInAndroid에서 버전 카탈로그를 사용하는 것을 보고 관심이 생겨 알아보게 되었습니다 사용 방법 버전 카탈로그는 Gradle 파일에서 versionCatalog 함수에서 library, plugin 등 을 직접 정의해서 사용할 수 있지만, 제가 찾아보았던 대부분 Android 예제에서는 toml 파일을 ..

점냥
'Android' 카테고리의 글 목록