본문 바로가기

Android

(21)
Realm Database 암호화하여 안전하게 관리하는 방법 개요 Realm Database에 암호화를 적용하여 모바일 앱에 저장된 데이터를 안전하게 관리하는 기능입니다. 이 글은 데이터베이스 암호화 키를 생성하고, 암호화 키를 암호화하여 관리하는 방법을 설명합니다. Realm은 내부적으로 AES-256+SHA-2 방식으로 디스크의 Realm 파일을 암호화하고 초기화 시 64-byte 키를 적용해야 합니다. 암호화 키의 처음 256 bits는 AES-256으로 데이터를 암복호화하고, 나머지 256 bits는 무결성(HMAC)을 검증하는 데 사용됩니다. Encrypt a Local Realm 암호화를 위한 64-bytes 키를 생성하여 Realm configuration에 지정하고 Realm을 실행하는 예제 코드입니다. fun generateRealmKey(): B..
Coroutines 이것만 알고 사용하자! 개요 코루틴(Coroutine)은 구조화된 동시성을 기반으로 비동기 작업을 효율적으로 처리합니다. 안드로이드 앱은 main thread에서 onDraw()를 지속적으로 호출하며 화면을 그립니다. 그렇기에 네트워크 통신이나 파일에 접근하는 작업들을 main thread에서 실행하면 화면이 버벅이거나 ANR이 발생합니다. 코루틴은 이러한 시간이 오래 걸리는 작업들이 background thread에서 실행되도록 돕습니다. 주요 개념 suspend, resume 코루틴은 suspend function을 통해 비동기적인 작업들을 콜백이 아닌 순차적인 코드로 표현할 수 있습니다. 실행 중인 코루틴 내에서 suspend function을 만나면 해당 작업을 위해 다음 모든 작업들이 일시정지(suspend) 되고, ..
kotlinx.serialization 라이브러리 소개 개요 이 문서는 Kotlin에서 데이터 Serialization(직렬화) 시 사용하는 kotlinx.serialization 라이브러리에 대해 소개합니다. Serialization(직렬화)은 프로그램에서 사용하는 데이터 객체를 특정 포맷의 문자열로 변환하는 프로세스이고, Deserialization(역직렬화)은 외부 소스에서 받은 문자열을 데이터 객채로 변환하는 프로세스입니다. 일반적으로 API 호출 시 Json 포맷의 response를 Deserialization(역직렬화)하는 데 사용합니다. kotlinx.serialization 라이브러리의 특징 순수 Kotlin 언어로 작성 다양한 포맷 지원(JSON, Protobuf, CBOR, Hocon, Properties) Kotlin Multiplatfo..
[Android] Health Connect 개요 2022년 Android에서 새롭게 발표한 Health Connect Api는, 여러 기기 및 앱의 건강 및 피트니스 데이터에 대한 접근을 통합하고 사용자가 데이터를 관리할 수 있도록 지원하는 기능이다. 기기 내 건강 및 피트니스 데이터 저장소 제공 (on-device storage) 데이터를 읽고 쓰는 단일 인터페이스 제공 세분화된 사용자 권한 관리 중앙에서 보안과 데이터 관리 특징 Health Connect 앱 설치 필요 (Google Play에서 설치된) Android SDK 버전 28(Pie) 이상부터 가능 현재 Health Connect 앱은 beta 버전(2020.08.08 기준) 아직 Samsung Health와 Google Fitness에서 Health Connect를 도입하지 않음..
[Android] Fastlane 적용하여 빌드 및 배포 자동화 개요 Fastlane은 앱의 빌드, 테스트, 배포(출시) 등 일련의 작업들을 자동화 해주는 툴로 Android, iOS 환경에서 사용할 수 있습니다. 직접 적용해보며 느낀 특징으로는, versionCode 자동으로 관리 gradle 작업을 위임하여 빌드 play store 배포 (production, alpha, beta, internal의 track 지정) Fastlane 설치 저는 Mac OS 기준 HomeBrew를 사용하여 fastlane을 설치했습니다. 다른 환경에서 fastlane 설치 가이드 $ brew install fastlane Fastlane 초기화 프로젝트 루트 디렉토리에서 실행 $ fastlane init 초기화 시 아래의 작업 입력 패키지 이름 입력 Service Account 등..
[Android] 다른 앱 사용기록 조회 개요 사용자가 모바일에서 다른 어떤 앱을 얼마나 자주 사용하는지 모니터하는 서비스 여기서 제공하는 API를 사용하면, 최근 실행된 앱이 무엇인지, 사용시간은 각각 얼마인지 알 수 있음 (UsageStatsManager) 기간별 앱들의 네트워크 사용량을 알 수 있음 (NetwordStatsManager) 앱들의 저장공간을 알 수 있음 (StorageStatsManager) 권한 다른 앱들의 사용기록 정보를 얻기 위한 권한 PACKAGE_USAGE_STATS 필요함 (직접 요청 O) 1. UsageStatsManager 앱 사용기록을 Query 할 수 있는 API를 제공 조회하고자 하는 기간을 설정 (ex. 2020.04.01 - 2021.04.01) 시간 단위(Interval) 설정 (ex. days, w..
[Android] LiveData LiveData는 관찰 가능한 데이터 홀더 클래스로 Activity 나 Fragment 등 앱 구성요소의 수명주기를 인식하여 동작한다. 저는 비동기적인 작업(Corouintes + Flow)을 수행 시 주로 사용하며 완료 상태에 따라 UI의 데이터 업데이트에서 Activity 나 Fragment 또는 two-way binding을 통한 xml에서 직접 LiveData를 통한 Observing을 적용하고 있습니다. LiveData 특징 UI(Activity, Fragment)와 데이터(ViewModel)의 상태 일치를 보장 Observer 패턴을 따르 데이터라 변경될 때마다 관찰자에게 알림 LifeCycle를 통해 결합하므로 메모리 누수가 없음 구성 변경 시 최신 데이터를 받아옴 LiveData 사용법 A..
[Android] Activities and Intents 이번 글에서는 인텐트의 유형에 따라 사용하는 방법들을 다루어 보겠습니다. 명시적 인텐트를 사용하여 특정 Activity로 이동하는 방법 암시적 인텐트를 사용하여 다른 앱의 콘텐츠로 이동하는 방법 Intent 소개 Intent는 메시징 객체로, 앱 간 통신이나 컴포넌트 간 상호 작용을 위해 사용되는 객체입니다. 주로 Activity, Service, Broadcast Receiver, Content Provider의 컴포넌트 간에 데이터를 전달하거나 작업을 실행하는데 사용됩니다. 두 가지 유형으로 나뉩니다. Explicit(명시적) Intent : 매우 구체적이며 실행할 Activity를 정확하게 알 수 있고 자체 앱의 화면인 경우 Implicit(암시적) Intent : 좀 더 추상적이며 다른 앱이 관련..