Android 14

상단 StatusBar 색상 및 상단 아이콘 light, dark 설정

Compose 에서는 상단 StatusBar 색상을 변경하기 위해서 3가지 정도의 방법이 있습니다.  1. accompanist 라이브러리 활용 (현재 deprecated 됨.) @Composableprivate fun setBarColors() { val systemUiController = rememberSystemUiController() val useDarkIcons = !isSystemInDarkTheme() val statusBarLight = Color.Green val statusBarDark = Color.Blue val navigationBarLight = Color.Green val navigationBarDark = Color.Blue Dispo..

AppBarLayout 과 CollapsingToolBarLayout 의 상속 구조

먼저 해당 내용의 글을 쓰게 된 이유는 Coordinatorlayout 과 AppBarLayout 및 CollapsingToolBarLayout 을 개발할 때AppBarLayout 의 자식 View 들의 레이아웃 배치 와 CoolapsingToolBarLayout 의 자식 View 들의 레이아웃 배치 가 어떤식으로 되는지 찾아보게 되면서 다르다는 것을 알게 되었고 포스팅을 하게 됐다. 1. AppBarLayout  공식문서 내용에서 확인할 수 있듯이 LinearLayout 을 상속 받은 구조이다. 그러므로 자식 View 의 배치와 관련해서는 LinearLayout 과 똑같이 된다고 볼 수 있다.  2. CollapsingToolBarLayout   CollapsingToolBarLayout 같은 경우는 ..

Version Catalog 도입기 (3)

이제 마지막으로 Convention 모듈을 만들어 커스텀 플러그인 설정을 하는 방법을 설명 하겠습니다. 예를 들어 모듈별로 필요한 플러그인 들을 여러개 추가 할 때 마다 build.gradle에 중복 코드가 많아지는데 커스텀 플러그인 을 통해서 효과적으로 관리를 할 수 있게 됩니다. 1. build-logic 모듈을 생성하고 settings.gradle.kts 만 남겨 놓습니다. 2. build-logic 모듈 안에 convention 모듈을 생성 합니다. 3. root 디렉토리의 setting.gradle 에서 build-logic , convention 모듈을 지웁니다. pluginManagement { includeBuild("build-logic") // 필수 repositories { googl..

안드로이드 2024.03.30

Version Catalog 도입기 (2)

앞선 블로그 포스팅에서는 왜 Version Catalog 를 도입하게 되었는지 에 대해서 설명했었습니다. 이번 블로그 포스팅에서는 실제로 Version Catalog 를 어떤식으로 적용하는지 알아 보겠습니다. 참고로 Version Catalog 는 gradle 7.4 버전부터 정식 지원을 하게 됐습니다. 1. gradle 디렉토리 하위에 libs.versions.toml 파일을 생성합니다. 하위 4개의 항목으로 나눠서 설정을 할 수 있습니다. [versions], [libraries], [bundles], [plugins] [versions] : 라이브러리 버전에 대해서 명시를 할 수 있습니다. activity = "1.3.1" [libraries] : 라이브러리의 의존성에 대해서 명시를 할 수 있습니다..

안드로이드 2024.03.28

Version Catalog 도입기 (1)

일단 먼저 도입 하기전에 안드로이드 gradle 에서 버전 관리를 할 수 있는 방법에 대해서 정의 해보고 왜 Version Catalog 를 개인 프로젝트에서 도입을 하려고 했는지 설명하겠습니다. 1. build.gradle(groovy 사용) 가장 처음에 프로젝트를 생성하면 작성되어 있는 방법입니다. 장점) 가장 손쉽게 버전을 추가하고 관리를 할 수 있습니다. 단일 모듈에 단일 프로젝트일 시 빠르게 버전을 추가하고 개발을 진행할 수 있습니다. 단점) groovy 언어로 작성시 컴파일 단계에서 종속성의 오류를 발견할 수 없습니다. // Coroutine implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.99") 위와 같이 1.5.99 라..

안드로이드 2024.03.28

상단 SystemBar Color 변경

기존 xml 방식의 안드로이드 개발 시 상단의 systemBar color 를 변경하기 위해서 상당히 귀찮았던 기억이 있습니다. 하지만 JetPack Compose 에서는 구글에서 accompanist 라는 라이브러리를 선보이면서 아주 쉽게 Composable 내부에서 systemBar color 를 변경할 수 있게 됐습니다. 변경전 systemBar 코드 삽입 implementation "com.google.accompanist:accompanist-systemuicontroller:0.27.0" @Composable fun LedBillboardTheme( darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit ) { /..

[android/hilt] @Binds vs @Provides

공통점 @InstallIn로 정의된 모듈 내부에서 종속성 주입을 위해 사용된다. @Binds 인터페이스와 인터페이스의 구현체를 연결하는데에 사용된다. @Binds의 메서드는 추상 메서드여야 한다. @Binds 메서드는 동일한 인터페이스에 여러개의 인터페이스 구현체를 연결할 수 없다. 주입될 타입은 인터페이스이다. @Provides 종속성 객체를 생성, 제공하는 메서드를 정의할 때 사용된다. 복잡한 종속성을 제공하거나 외부 라이브러리를 제공하는데에 사용된다. 주입될 타입은 인터페이스, 클래스 등 다양하다. @Module @InstallIn(SingletonComponent::class) abstract class DataSourceModule { @Provides fun provideKakaoResourc..

안드로이드 2024.03.18

[android/안드로이드] CleanArchitecture(클린아키텍처) 간단하게 정리

클린아키텍처에 대해서는 많이들 들으셨을거라 생각합니다. 저 또한 클린아키텍처에 대해서 찾아보게 되면 정말 많은 자료와 이게 뭐라고 딱 정의하기가 쉽지 않았습니다. 제가 찾아보며 공부했던 내용을 간단하게 요약해서 정리해보겠습니다. 클린 아키텍처란? 로버트 C.마틴(엉클 밥) 에 의해 만들어진 철학으로, 소프트웨어의 관심사를 계층별로 분리하는 디자인 철학입니다. 여기서 가장 중요한 내용은 관심사의 분리! 입니다. 관심사를 분리하게 되면 클래스 간의 의존성을 느슨하게 하면서 모듈화가 가능해집니다. 안드로이드 관점에서의 클린아키텍처 구조를 먼저 보여드리겠습니다. 현재 사진을 보시면 Presentation Layer , Domain Layer , Data Layer 로 각 관심사별로 분리를 하였으며 각각의 lay..

[android/안드로이드] flow flatMapConcat 사용하기

flatMapConcat flatMapConcat 은 flow 간의 연결이 필요할 때 사용하는 연산자 입니다. 아래에서 예시를 들어보겠습니다. 먼저 클린 아키텍처 구조에 viewModel 에서 api 를 호출하는 경우라고 생각하겠습니다. 서버로부터 token을 가져와서 token을 실어서 다른 api 를 호출하는 경우라고 생각해보겠습니다. 그렇다면, 1. token 을 가져오는 api 하나 2. token 을 실어서 호출하는 api 하나 이렇게 두가지의 데이터 스트림을 형성해야 합니다. 즉 , flow 가 두개가 필요하고 이 flow들을 순서대로 연결하기 위해 flatMapConcat을 사용해보겠습니다. @Test fun `FlatMapConcat 테스트`() = runTest { /** 서버로부터 to..

[android/안드로이드] Android 4대 컴포넌트

Android 앱에는 앱을 구성하는 크게 4가지 종류의 컴포넌트가 있습니다. 각각의 컴포넌트는 하나의 독립된 형태로 정해진 역할을 수행합니다. 4대 컴포넌트에는 Activity , Service , Broadcast Receiver , Content Provider 이렇게 있습니다. 1. Activity UI를 담당하는 대표적인 컴포넌트입니다. 2. Service 화면에는 존재하지 않지만 백그라운드에서 실행이 되는 컴포넌트입니다. 예를들어 음악을 재생하거나 , 파일 입출력을 수행하거나 , 네트워크 트랜잭션등을 처리할 수 있습니다. 서비스의 종류로는 백그라운드 , 바인더 , 포그라운드 이렇게 3종류가 있습니다. 백그라운드 : 사용자에게 직접 보이지 않는 작업을 수행합니다. 어플리케이션을 꺼도 백그라운드 서..

안드로이드 2022.04.14