Android 23

Android Flavor(Product Flavor)

Android Product Flavor란?하나의 코드베이스에서 서로 다른 버전의 앱을 만들기 위한 기능이다.우리가 사용하던 debug, relaease를 커스텀으로 만들 수 있다고 생각하면 된다. 언제 사용할까?앱 브랜드가 다를 때 (같은 기능인데 로고, 테마만 다르게)환경별 분리 (dev, staging, prod)지역별 버전 (KR, JP, US)유료 / 무료 앱대충 이렇게 기능은 대부분 같지만 일부만 다를 경우에 구분해서 사용하고자 할 때 Flavor를 이용한다.나는 sdk의 버전별로 샘플 앱을 만들어야 할 때 flavor를 버전으로 설정하여 기능을 공유하는 여러 앱을 만들 때 사용했다.  어떻게 쓸까?android { ... flavorDimensions "version" pro..

Android 2025.03.30

Android에서 Props Drilling을 해결해보자 with SnackBar

이 내용을 설명하기에 앞서 Props Drilling이라는 개념을 처음 들어보는 분들이 있을수도 있다.그래서 해당 개념에 대해서 간단하게 설명하고, 내가 Android에서 어떻게 Props Drilling을 방지했는지 이야기 해보겠다.  Props Drilling이란?React에서 나온 개념이다.Prop Drilling 은 props를 오로지 하위 컴포넌트로 전달하는 용도로만 쓰이는 컴포넌트들을 거치면서 React Component 트리의 한 부분에서 다른 부분으로 데이터를 전달하는 과정을 의미한다. 매개변수로 특정 값을 계속해서 내려주는 것이라 생각하면 된다. 아래 예시를 보면 이해가 될 것이다.@Composablefun test1() { test2 { // SHOW ACTION }}..

[Android Compose] Scroll과 imePadding을 같이 쓰면 제대로 동작을 안한다구요?

문제상황Column에 ScrollState를 넣어주고, 내부에 TextField를 여러개 넣어뒀다.그 후 키보드 높이 조정을 위해 adjustResize 설정을 한 후 imePadding을 넣어줬지만, 제대로 동작하지 않는다.문제 영상  정확히는 아래에 있는 TextField가 보일 정도로 올라오긴 하지만, 내가 원하는 만큼 더 위로 올라오진 않는다. 찾아보니 LazyColumn, Column에 verticalScroll을 넣어준다면 이런 오류가 존재한다는 것을 찾았다.https://issuetracker.google.com/issues/229628557 Google Issue Tracker issuetracker.google.com22년부터 이렇다는데 좀 고쳐주지 참...  뭐 구글이 이러는게 하루이..

Multi Module과 Custom Plugin을 사용해서 프로젝트를 관리해보자 feat. build-logic

요즘 안드로이드 프로젝트들을 보다보면 뭐가 되게 많다. 처음 프로젝트를 만들면 app 모듈 하나만 있는데 이사람들은 도대체 어디서 이렇게 많은 모듈을 만들었는지 모르겠다.그래서. 해봤다. 내가 직접 구현한 프로젝트 링크이니 참고한다면 이해하는데 도움을 줄 수 있을것 같아 첨부한다.https://github.com/Team-Hankki/hankki-android GitHub - Team-Hankki/hankki-android: 한끼익....한끼익.... Contribute to Team-Hankki/hankki-android development by creating an account on GitHub.github.com 예시는 여기있고, 자세한 설명은 이제 시작해보겠다.   Multi Module을 왜..

Android 2024.12.31

SDK 어디까지 아니? - compileSdk, targetSdk, minSdk

Android 개발을 하다보면 build.gradle에서 이러한 코드를 많이 봤을 것이다처음 프로젝트를 만들면 기본적으로 값이 들어가있기 때문에 신경을 안썼을 수 도 있다.  그렇다면 이제부터 같이 알아보자.  SDK가 뭘까?SDK(Software Development Kit)는 애플리케이션 개발 도구다.다른 회사에서 구현한 기능을 바로 내 애플리케이션에 사용할 수 있게 해준다. 가장 대표적인 예시로 카카오 로그인을 할 때면 Kakao SDK를 연결하곤 한다.  여기서 SDK는 Android SDK를 의미한다.즉, 우리가 Android를 개발하기 위해 필요한 툴 킷들을 의미한다.  minSdk프로젝트의 apk 설치를 지원하는 기기의 최소 요구 SDK 이다.앱을 실행하는데 필요한 최소 API 레벨을 의미..

Android 2024.12.17

한 휴대폰에 Release앱과 Debug앱 두개를 다운받는 방법

얼마전 한끼족보라는 앱을 릴리즈 했다.그래서 스토어에서 앱을 다운받아두었고, 이후 개발을 다시 하려고 했다.Existing package com.hankki.hankkijogbo signatures do not match newer version; ignoring! 이러한 오류가 발생했다. 그리고 다른 방법을 통해서 디버그 버전을 실행시키려 하니 "이미 앱이 존재합니다. 지우고 다시 다운받으시겠어요?" 와 같은 오류가 발생했다.  내가 원하는 것은 Debug앱은 따로 있고, Release앱도 따로 있어서 둘다 다운받아둘 수 있는. 그런 상황을 원한다.  그래서 원인을 찾아보았고, 해결법까지 찾아 적용한 기록을 남긴다.참고로 지금부터 작성할 모든 gradle파일은 build.gradle.kts(Module..

Android 2024.10.21

SOPT 35th 안드로이드파트 미미나 - Navigation과 Stack 관리

1. 왜 Navigation을 쓸까? with SAAXML의 Activity기반 뷰에서는 위와 같이 Intent로 화면을 이동했어요.  하지만, 2018 Google I/O에서 Single Activity라는 개념을 언급했어요Single activity: Why, when, and how (Android Dev Summit '18) Single Activity라는 개념은 기존의 액티비티 기반의 화면 구성이 아닌, 소수의 액티비티와 다수의 프래그먼트를 이용해 화면을 구성하는 구조로 jetpack navigation과 함께 소개되었어요.  근데 지금까지 Activity와 Fragment 기반으로 잘 사용해왔는데 왜 굳이 바꾸는걸까요? 제일 큰 이유는 Activity보다 Fragment가 더 가벼워요. 공식문..

대외활동/SOPT 2024.10.12

분명히 텍스트 높이 지정했다니까요??? - Android Compose LineHeight Error

최근 프로젝트를 진행하며 100% Compose로 Android를 구현하였다.XML에서 하는 것 처럼 작업을 했지만, Compose에서는 다르다는 것을 깨달았던 LineHeight에 대해서 글을 써보려고 한다.   기존에 XML에서 코드를 작성했던 방식은 아래와 같다.ttf혹은 otf를 추가하고, 폰트 패밀리를 만들어준다.    그 후 value/appearance에서 아래와 같이 Text들의 설정을 해준다.색상, 폰트 패밀리, 텍스트 사이즈 등을 설정하고, paddingVertical을 활용하여 LineHeight를 지정해준다.   이렇게 XML에서 설정해봤었고, 비슷한 방법으로 Compose에서도 이번에 설정해보고자 했다.Compose로 구현하고자 레퍼런스로 DroidknightsApp과 sopt-a..

BounceClick을 Compose에서 수식과 함께 구현해보자 with Animation

최근 프로젝트를 하나 하며 디자이너의 요구사항을 하나 받았다.Button을 클릭했을 때 Bunce Click을 구현해달라 하더라.  사용자가 클릭을 했을 때 scale이 작아지고, 위에 검은색 filter가 생겨야 한다. 그리고 손을 뗀다면 다시 원래대로 돌아와야 한다.  이 기능을 구현하기 위해 제일 첫 단계로 Modifier의 확장함수를 만들기 시작했다.@Composablefun Modifier.bounceClick(): Modifier = composed {} 특정 버튼에 해당 기능을 넣어둔다면 다른 버튼에 넣어달라 할 때 마다 버튼부터 새로 만들어야 할 것이다. 그렇게 된다면 자연스럽게 너무 많은 시간이 들게되고, 비효율적이게 된다고 생각한다.  그래서 Modifier의 확장함수를 만들고 이를 적..

Android 2024.07.19

[Android] Type Safety Navigation With Compose

Compose에서 화면을 전환하기 위해서는 Navaigation 사용이 필수적이다.하지만 예전 버전의 경우 Route를 String으로 지정해줘야 하는 불편함이 있었다. 그런 불편함을 개선하고 새로 나온 Type Safety Navigation의 사용법과 주의점을 소개하고자 한다.    Dependencies"androidx.navigation:navigation-compose:2.8.0-beta04" // 2.8.0-alpha01 부터 가능"org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.0" // kotlin 2.0"org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3" // kotlin 1.9.22이렇게 두개..