본문 바로가기

Android11

[Android] Compose를 활용한 Collapsing Toolbar Scaffold 제작기 ✏️ 안드로이드 Compose 기반의Collapsing Toolbar Scaffold 제작기 현재 회사에서 서비스중인 앱 중 일부를 기존 명령형 UI 방식인 View에서, Compose 기반으로 변경하게 되었습니다. 그러던 도중 아래와 같이 View 시스템의 CoordinatorLayout을 이용하여 Collapsing Toolbar와 TabRow 및 ViewPager2가 구현된 곳을 발견하였고, 이를 Compose에서 어떻게 구현할 것인지 고민이 되었습니다. Compose에서는 CoordinatorLayout이 없으며, CollapsingToolbarLayout 또한 없기에 한번 직접 구현해보기로 하였습니다. 구현해야 할 사항을 나열하면 아래와 같습니다. 아래로 스크롤 시, 헤더 영역(게임 주요 정보).. 2023. 7. 23.
[2023 GDG Android Korea] Retrofit2 대신 Ktor는 어떠신가요? 토요일 아침 안드로이드 개발자 컨퍼런스 Super init 4기에 참여하기 위해 서울로 향했습니다. 이 날 행사장 내부가 거의 찰 정도로 인원이 많이 모인 것을 볼 수 있었습니다. 연령대도 20부터 30대까지 다양한 모습을 보니 색달랐습니다 ㅎㅎ 행사는 총 6개의 부로 나뉘어 있었습니다 안드로이드 주니어, 시작점에 서기까지 / 임준섭님 API 통신, Retrofit 대신 Ktor 어떠신가요? / 유광무님 선언형 UI가 대세임을 "선언"합니다. (Compose 학습부터 적용까지의 일대기) / 이현우님 지라 자동화 어디까지 가능할까요? / 이하나님 개발자의 글쓰기 - 우당탕탕 Design Document 작성기 / 정세희님 인생게임 - ver. 모바일개발자 / 손예진님 이 중 눈에 가장 띄었던 Ktor에 대.. 2023. 4. 12.
[Gradle] Kotlin Java toolchains(툴체인) 관련 오류 해결 방법, with AGP 8.1 며칠 전 안드로이드 컨퍼런스에서 지인분께 드린 카카오뱅크 과제 Repository가 빌드가 되지 않는다는 제보를 받았습니다. 제가 사용하는 환경에서는 정상적으로 빌드되는 것을 확인하여, Canary build인 Giraffe 버전을 사용하여 AGP 버전을 8.1.0-alpha9 이상 빌드 시 아래와 같은 오류가 발생함을 확인하였습니다. Caused by: org.gradle.api.GradleException: 'compileDebugJavaWithJavac' task (current target is 1.8) and 'kaptGenerateStubsDebugKotlin' task (current target is 17) jvm target compatibility should be set to the .. 2023. 4. 6.
[Android] Kotlin android extensions에서 View binding으로 전환 오늘에서야 Kotlin 1.7.21을 떠나보내고, 성능이 개선된 1.8.0으로 업그레이드하려던 찰나 Kotlin android extension 플러그인을 더 이상 지원하지않는다는 에러가 나에게 찾아왔다. The 'kotlin-android-extensions' Gradle plugin is no longer supported. Please use this migration guide (https://goo.gle/kotlin-android-extensions-deprecation) to start working with View Binding (https://developer.android.com/topic/libraries/view-binding) and the 'kotlin-parcelize' pl.. 2023. 3. 8.
[Gradle] AGP 8.0에서 BuildConfig 사용 시 에러 멀티모듈에서 BuildConfig를 buildType별로 다르게 하기 위해 해당 모듈 build.gradle 파일을 아래와 같이 작성했었다. android { namespace 'com.app.xxxx' compileSdk 33 defaultConfig { minSdk 21 targetSdk 33 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" } buildTypes { release { buildConfigField "Boolean", "DEBUG_MODE", "false" } debug { buildConfigField "Boolean", "DEBUG_.. 2023. 3. 7.
안드로이드 Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent 에러 해결방법 구글 AdMob관련 에러 AdMob 라이브러리를 포함한 상태로 컴파일 후 앱 실행 시 런타임 에러가 발생하는 경우가 있습니다. 이와 관련한 증상 및 해결방법 입니다. AdMob 라이브러리를 추가 후 Target Version을 SDK 31 이상으로 설정 후 앱을 런타임 실행하면 아래와 같은 에러로그를 볼 수 있습니다. 이에 대한 내용은 PendingIntent FLAG로 `FLAG_IMMUTABLE` 또는 `FLAG_MUTABLE`을 지정해줘야 한다는 내용인데, AdMob 20.4.0 버전 릴리즈를 보면 이와 관련한 버그 픽스 방법이 기재되어있습니다. https://developers.google.com/admob/android/rel-notes 릴리즈 노트 | Android | Google Develo.. 2023. 1. 4.
[안드로이드 Compose] 텍스트 중앙 정렬 맞추기 Compose에서 Modifier를 통해 Text를 세로 중앙 정렬을 하면 다른 컴포저블과 일치하지 않는다. 대부분 아래와 같이 verticalAlignment 속성을 이용하여 정렬할 것이다. Row( modifier = modifier .height(42.dp) .fillMaxWidth(), verticalAlignment = Alignment.CenterVertically, ) { Checkbox( modifier = Modifier .padding(start = 2.dp) .size(13.dp), checked = isChecked, onCheckedChange = onChecked, colors = CheckboxDefaults.colors( checkmarkColor = White, checke.. 2022. 12. 14.
[안드로이드 Compose] 애니메이션 생성 시 context by implicit receiver 에러 Subject AnimatedVisibility 을 통해 애니메이션 구현 시, 아래와 같은 에러가 출력되는 경우 can't be called in this context by implicit receiver. Use the explicit one if necessary The Challenge 왜 이런 문제가 발생했을까? 코드를 먼저 보자 Card( modifier = Modifier .width(300.dp) .wrapContentHeight(), elevation = CardDefaults.cardElevation(0.dp), shape = RoundedCornerShape(10.dp), ) { Box() { AnimatedVisibility( // Error! visible = true, enter.. 2022. 11. 22.
Activity 또는 Fragment에서 뒤로가기, 홈 버튼 이벤트 만들기 Activity 또는 Fragment 단에서 툴바를 통해 Back Stack으로부터 화면을 다시 가져오거나, 다른 곳을 호출하는 등의 이벤트를 실행하기 위해선 두 개의 메소드 오버라이딩이 필요합니다. Activity 기준 툴바가 있을 경우 onSupportNavigateUp 오버라이딩 Back press 이벤트를 수신할 경우 onBackPressed 오버라이딩 아래 예시입니다. Toolbar에 있는 NavigateUp 버튼과, 뒤로가기 Back Press 이벤트를 함께 처리하기 위해 onSupportNavigateUp 이벤트는 onBackPressed로 위임하는 패턴을 사용하고 있습니다. override fun onSupportNavigateUp(): Boolean { onBackPressed() ret.. 2022. 10. 25.
Gradle 의존성 관련 에러 해결방법 The minCompileSdk (31) specified in a dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties) is greater than this module's compileSdkVersion (android-30). Dependency: androidx.core:core:1.7.0. AAR metadata file: C:\Users\user\.gradle\caches\transforms-3\bb9903e3055ed55e69a31736b27b1a5b\transformed\core-1.7.0\META-INF\com\android\build\gradle\aar-metadata.properties.. 2022. 5. 16.