본문 바로가기

안드로이드

(35)
context receivers - 확장함수의 확장함수? 컴포즈에서는 특정 영역에서만 호출할 수 있는 함수 형태를 많이 사용한다. 예를 들면 BoxScope, ColumnScope, RowScope 등의 영역 안에서만 호출할 수 있는 Modifier.align, Modifier.weight 등이 있다. 확장함수를 통해서 해당 영역에서만 사용할 함수들을 추가할 수 도 있는데, 문제가 있다.interface CustomScope { val value: Int fun Modifier.scopeModifier(): Modifier } // 불가능 fun CustomScope.Modifier.newScopeModifier(): Modifier { return this }CustomScope 같은 영역에다가 새로운 Modifier를 추가하고 싶을 때, 확장함수에다가 또 ..
KotlinDl - Android 물건탐지, 동작탐지 등등 안드로이드에서 ObjectDetection, PoseDetection 같은 기능을 쉽게 적용할 수 있도록 해주는 라이브러리가 나왔다. 0. 라이브러리 추가 implementation 'org.jetbrains.kotlinx:kotlin-deeplearning-onnx:0.5.0' 1. 모델 다운로드하기 학습된 모델을 사용하기 위해선 해당 모델을 다운로드하는 과정이 필요하다. // settings.gradle pluginManagement { repositories { ... gradlePluginPortal() } } // module build.gralde plugins { ... id 'org.jetbrains.kotlinx.kotlin-deeplearning-gradle-plugin' version..
안드로이드 라이브러리 관리 자동화 BuildSrc와 함께 어떻게든 라이브러리를 쉽게 관리하기 위해서 이것저것 찾다가 Renovate라는 라이브러리를 자동으로 관리해주는 Bot을 발견했다. 꽤 오래전부터 있던 거 같은데, 이제야 존재를 알게 됐다. 그런데 아쉽게도 BuildSrc는 지원해주지 않고, version Catalog에 대한 처리만 제공하고 있다. 비슷한 기능을 제공하는 dependabot 도 BuildSrc는 지원하지 않는다. Renovate를 적용하려고 versionCatalog로 싹 갈아엎었고, 이제 Renovate를 적용해보겠다. 1. Renovate GitHub - renovatebot/tutorial: Renovate Bot Tutorial source Renovate Bot Tutorial source. Contrib..
Android - BuildSrc + Version Catalog ( 안드로이드 버전 관리하기 ) 안드로이드에서 버전을 관리하는 방법이 점점 많아지고 있다. 간단하게 정리하자면, 1. ext를 통한 관리 Gradle에서 라이브러리 업데이트 가능 정보가 노출된다. 2. buildsrc를 통한 관리 플러그인들을 작성하기 쉽다. 라이브러리 업데이트 정보를 알 수 없다. ( 별도의 라이브러리를 쓰면 해결은 된다. ) 코드상에서 버전을 하나만 바꿔도 캐시를 무시하고 전체를 다시 빌드한다. 3. version catalog를 통한 관리 버전을 깔끔하게 관리할 수 있고, bundle 형태로 묶어서 관리할 수도 있다. 라이브러리 업데이트 정보를 알 수 없다. ( 별도의 라이브러리나 renovate를 쓸 수 있다. ) ext를 벗어날수록 라이브러리 버전에 대한 유지 능력은 점점 떨어지고, 다른 곁가지에만 뭐가 계속 ..
Android - Module Graph 그리기 Module을 분리해놓고 보면 Graph로 깔끔한지 보고 싶어 진다. 찾아보니 "gradle-dependency-graph-generator-plugin"라는 라이브러리가 있다. GitHub - vanniktech/gradle-dependency-graph-generator-plugin: Gradle plugin that generates dependency graphs from your project. Gradle plugin that generates dependency graphs from your project. - GitHub - vanniktech/gradle-dependency-graph-generator-plugin: Gradle plugin that generates dependency ..
Compose - Modifier.Node ( composed 상위호환 ) Compose 1.3 버전에서 Modifier.Node라는 개념이 추가되었다. 1. Modifier.Node 란? Modifier.Node 는 구글의 Compose Modifiers deep dive 영상에서 소개되었는데, 기존의 Modifier에서 성능상에 이슈가 되는 부분을 해결하기 위해 추가된 개념이다. 영상에서 지적하는 기존 설계에서 문제점은 3가지가 있다. 1. materialize Modifier는 한 번 선언하여 여러 곳에서 사용할 수 있다. 하지만 실제로 하나의 Modifier 만 존재한다면, 여러 곳에서 사용할 경우 clickable 같은 상태가 존재하는 Modifier는 관리가 불가능하다. 그래서 각 Layout 별로 자기가 사용할 Modifier를 새롭게 생성하는 과정을 거치는데, 이..
Compose - Gooey ( 끈적이는 )효과 만들기 Css trick 중에 Gooey Effect라는 효과가 있다. 1. Gooey? 왼쪽처럼 흩어져 있는 아이템들을 오른쪽처럼 끈적거리게 붙어있도록 보이는 효과를 Gooey 효과라고 부른다. Css에서 이걸 구현하는 방법은 간단하다. 아이템 주변을 Blur 처리하기 전체 이미지의 contrast를 높이기 이 두 단계만 거치면 Blur 영역이 겹치는 부분끼리 서로 끈적거리는 것 처럼 보이는 효과가 만들어진다. css에서는 몇 줄만으로 이걸 적용할 수 있었는데, Compose에서도 Api 31 만 넘긴다면 간단하게 사용할 수 있게 되었다. 2. Compose에서 해보기 val blurEffect = BlurEffect( radiusX = 20f, radiusY = 20f, edgeTreatment = Tile..
Android - Compose 1.3 PullRefresh Compose 1.3 버전에서 Pull To Refresh를 위한 기능이 추가되었다. 기존에 제공하던 accompanist의 SwipeRefresh 가 정식버전으로 넘어올 거라 생각했는데, 조금 다른 형태로 새롭게 추가되었다. 1. 차이점 새로운 컴포넌트가 있는 것이 아닌 Modifier를 사용하는 형태로 변경된다. Modifier로 바뀌면서 Indicator를 뷰에 정의하지 않으면 기본값은 없다. onPull, onRelease 상태를 사용할 수 있다. 2. 사용법 @OptIn(ExperimentalMaterialApi::class) @Composable fun NewsScreen(viewModel: NewsViewModel = hiltViewModel()) { val news = viewModel.n..