[Android] 인앱 업데이트(in-app update) 적용하기
·
Android/Update
인앱 업데이트 | Other Play guides | Android Developers이 페이지는 Cloud Translation API를 통해 번역되었습니다. 인앱 업데이트 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 사용자는 기기에서 앱을 최신 상태로developer.android.com플레이스토어에 앱을 최신 버전으로 배포했을 때, 앱을 사용하던 유저에게 업데이트 할 것을 알리고 싶을 때가 있다. 인앱 업데이트(in-app update)는 이것을 가능하게 하는 Google Play Core 라이브러리 기능이다.업데이트 방식유연한 업데이트(Flexible udpates)유연한 업데이트는 사용자가 업데이트를 하는 동안 앱을 사용하는 경우에 적합하다. 이 방식은 ..
[Android] Multi Module + build-logic + hilt
·
Android/Architecture
최근에 프로젝트에 새로 들어가면서 구조를 설계하게 되었다. presentation-domain-data로 틀을 잡고 다른 필요한 부분(common 등)은 모듈로 추가하는 방식을 썼는데, 이번에 Now In Android(NIA)의 구조를 참고하면서 그 내용을 정리해 봤다. NIA와 차이가 있는데, feature-core 대신 feature-domain-data로 틀을 잡고 core 모듈에 common과 di 등을 두는 걸 생각했다.◾ 모듈 생성하기File > New > New Module을 통해 모듈을 생성할 수 있다.모듈을 생성할 때 Templates 항목에 여러 가지가 있는데, 사용하는 항목들은 아래와 같다. 1. Phone&Tablet앱 실행에 필요한 모든 요소(Activity, Manifests,..
[Android][Compose] kizitonwose/Calendar, 캘린더 라이브러리 사용기 #3
·
Android/Calendar
[Android] kizitonwose/Calendar, 캘린더 라이브러리 사용기 #2[Android] kizitonwose/Calendar 캘린더 라이브러리 사용기 #1GitHub - kizitonwose/Calendar: A highly customizable calendar view and compose library for Android and Kotlin Multiplatform.A highly customizable calendar view and compose library for Andogyong.tistory.comkizitonwose/Calendar, 캘린더 라이브러리 사용기 #2는 View 기반으로 작업을 하였다. 이번에는 Compose를 기반으로 사용해 봤다. Compose로 사용하..
[Android] kizitonwose/Calendar, 캘린더 라이브러리 사용기 #2
·
Android/Calendar
[Android] kizitonwose/Calendar 캘린더 라이브러리 사용기 #1GitHub - kizitonwose/Calendar: A highly customizable calendar view and compose library for Android and Kotlin Multiplatform.A highly customizable calendar view and compose library for Android and Kotlin Multiplatform. - kizitonwose/Calendargithub.com캘린ogyong.tistory.com지난번 kizitonwose/Calendar, 캘린더 라이브러리 사용기 #1에 이어서 몇 가지 기능을 추가해 보려고 한다.- CalendarVie..
[Android] kizitonwose/Calendar, 캘린더 라이브러리 사용기 #1
·
Android/Calendar
GitHub - kizitonwose/Calendar: A highly customizable calendar view and compose library for Android and Kotlin Multiplatform.A highly customizable calendar view and compose library for Android and Kotlin Multiplatform. - kizitonwose/Calendargithub.com캘린더에 날짜 이외에 다른 데이터를 함께 표시할 일이 생겨서 적합한 라이브러리를 찾던 중 kizitonwose의 Calendar 라이브러리를 발견했다. 해당 라이브러리는 캘린더를 개발자가 원하는 모습으로 꾸미는 것이 가능하다. 그리고 라이브러리를 사용하기 위한 샘플..
[Android] Warning: SDK processing. This version only ···
·
Android/이슈 처리
Warning: SDK processing. This version only understands SDK XML versions up to 3 but an SDK XML file of version 4 was encountered. 안드로이드 스튜디오를 미어캣( 2024.3.2)으로 업데이트를 하고서 빌드를 할 때 위의 에러가 발생했다. 안드로이드 스튜디오를 최신으로 업데이트 했으나 명령 도구가 구버전인 경우이거나, SDK Manager에서 최신 SDK 컴포넌트를 설치했으나 안드로이드 스튜디오가 구버전인 경우 내부에 있는 최신 XML 파일을 제대로 이해하지 못해서 발생한다는 에러라고 한다. SDK 내의 package.xml 파일이 버전 4인데 읽는 도구가 버전 3까지만 이해할 수 있다는 것 같다. 해결 ..
[Android] adb로 연결된 모든 기기의 해상도 변경하기
·
Android/ADB
adb를 사용해서 pc에 연결된 모든 기기의 해상도를 변경하는 방법을 찾아봤다.Bash 스크립트에서 현재 연결된 모든 기기의 목록을 가져 온 다음, for 문을 통해 각 기기의 해상도를 변경해주면 된다. 윈도우 환경에서 간편하게 Bash Shell을 사용하기 위해 Git Bash를 사용했다.다음은 연결된 모든 기기의 해상도를 1080x1920으로 변경하는 예시이다.// 연결된 기기 목록 가져오기 devices=$(adb devices | grep -w "device" | awk '{print $1}')// 해상도 설정resolution= "1080x1920"// 해상도 변경for device in $devices; d..
[Android][Compose] DataStore 사용해보기
·
Android/DataStore
DataStoreDataStore는 Jetpack 라이브러리로 Key-Value 또는 형식화된 객체를 프로토콜 버퍼와 함께 저장이 가능한 저장소다. 코틀린의 코루틴과 Flow를 사용하여 데이터를 비동기적이고 일관되며 트랜잭션 방식으로 저장한다. 기존에 SharedPreferences를 사용하고 있다면 DataStore로 마이그레이션 할 것을 구글에서 권장하고 있다.원본 링크 위 이미지를 보면 PreferencesDataStore와 ProtoDataStore가 있다. DataStore는 두 가지 구현을 제공한다.◾ Preferences DataStoreKey를 사용하여 데이터를 저장하고 접근한다. 미리 정의된 스키마가 필요하지 않으며 유형의 안정성도 제공하지 않는다.◾ Proto DataStore데이..
[Android] Flow와 StateFlow 사용해보기
·
Android/Flow
LiveData와 Flow LiveData는 안드로이드 컴포넌트의 생명 주기와 결합되어 있어 UI 데이터를 관리하기 편하다는 장점 때문에 자주 사용한다. 하지만 아키텍처의 관점에서 볼 때 LiveData는 비동기 데이터 스트림을 처리하도록 설계되지 않았고, 안드로이드 프레임워크에 의존하기 때문에 도메인 계층과 데이터 계층에서 사용하기에는 적합하지 않다. 반면 Flow의 경우 순수 코틀린 언어로 되어있을 뿐만 아니라 비동기로 계산이 가능한 데이터 스트림이다. 이런 이유로 안드로이드에서는 데이터 계층에서 Flow를 사용한 다음 asLiveData()를 통해 ViewModel에서 LiveData로 변환하는 것을 추천하고 있다. (참고) StateFlow가 등장하면서 위와 같은 작업을 할 필요가 없어졌다. St..
[Android] local.properties로 API Key 관리하기
·
Android/BuildConfig
프로젝트 관리를 위해 Git과 같은 형상관리 툴을 사용할 경우 API Key가 노출될 수 있음을 고려해야 한다. 안드로이드에서는 한 가지 방법으로 gitignore에 등록된 local.properties를 사용한다. local.properties에 API Key를 저장하고, 앱의 빌드 정보에 키 값을 추가하여 BuildConfig로 코드 상에서 접근할 수 있다. /** * local.properties */ API_KEY_1 = "89sdfsbsn815832jdsfkjedv" API_KEY_2 = "04kjcasvbcxzv632jbvzj35f" API_KEY_3 = "cbfhb518gfa0h52ngf=4ynb3" 예시를 위한 임시 키 값을 만든다. /** * build.gradle */ android {..
[Android][Compose] Bluetooth Connect 하기
·
Android/Bluetooth
[Android][Compose] Bluetooth Scan 하기 안드로이드에서 제공하는 BluetoothLeScanner를 사용해서 Bluetooth 주변기기를 Scan 해보려고 한다. Scan 데이터를 얻으면 아래 이미지와 같이 리스트로 그릴 것이다. (UI는 Compose를 사용) 권한 처리하기 ogyong.tistory.com Bluetooth Scan 하기에 이어서 Connect를 해보려고 한다. GATT(Generic Attribute Profile) Connect를 하고 디바이스의 정보를 구하는 과정에서 GATT가 사용된다. GATT는 ATT를 프로토콜로하여 BLE 기기 간에 데이터를 주고 받기 위한 방식을 정의해 놓은 프로파일이다. ATT는 UUID를 고유 식별자라는 속성을 지니며, 이 속..
[Android][Compose] Bluetooth Scan 하기
·
Android/Bluetooth
안드로이드에서 제공하는 BluetoothLeScanner를 사용해서 Bluetooth 주변기기를 Scan 하는 방법을 정리했다. 권한 처리하기 Bluetooth Scan을 하기에 앞서 블루투스와 위치 정보에 대한 권한을 처리해줘야 한다. Manifiest에 아래와 같이 블루투스와 위치 정보에 대한 권한을 추가한다. MainActivity에서는 권한을 체크하는 코드를 작성한다. permissionArray에 누락된 권한이 있을 경우 Scan이 정상적으로 되지 않을 수 있다. class MainActivity : ComponentActivity() { private val permissionArray = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { arra..