Android

Android/Compose

[Android] ClickableText 대신 LinkAnnotation을 사용하자

텍스트 하이퍼링크 기능을 Compose의 ClickableText로 구현하셨나요?2024년 9월 4일 출시된 androidx.compose.foundation:foundation-*:1.7.0 버전부터 텍스트 하이퍼링크를 쉽게 구현할 수 있는 LinkAnnotation을 stable 하게 지원합니다. ClickableText은 이제 그만 LinkAnnotation을 알아보기 전에 ClickableText를 잠시 살펴보시면 LinkAnnotation의 장점을 쉽게 알 수 있습니다 하나의 문자열에서 2개 이상의 하이퍼링크가 있으면 사용자의 클릭한 위치 또는 문자열을 알아야 구분할 수 있을 겁니다. 그런 목적에서 ClickableText는 클릭한 문자의 위치를 의미하는 character's offset 값이 ..

Android/Common

[Android] Notification MessageStyle에 이미지 표시하기

MessageStyle 이번 글에서는 Android Notification Style 중 MessageStyle의 이미지 표시하는 방법에 대해서 알아보려고 합니다. MessageStyle은 Android에서 제공하는 알림 스타일 중 채팅처럼 대화형 데이터를 표시하는 목적으로 사용하는 스타일입니다.  최근 회사에서 앱의 알림 스타일을 MessageStyle로 변경하는 작업을 진행했는데요.이미지를 표시하는 부분에서 어려움을 느껴서 이번 글에서 정리해보려고 합니다. 기본 사용법 val person = Person.Builder() --- (1) .setName("자비스") .setIcon(IconCompat.createWithBitmap(bitmap)) ..

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' 카테고리의 글 목록