본문 바로가기
[Android] 저전력 블루투스(Bluetooth LE) #1 - BLE 기본 개념 [Android] 저전력 블루투스(Bluetooth LE) #1 - BLE 기본 개념 저전력 블루투스(Bluetooth Low Energy, LE) 기술은 앱과 연결되는 각종 장치들의 통신에서 소모되는 전력량을 줄이기 위해 탄생한 기술로, 많은 블루투스 기기들이 앱과 연결하여 데이터를 주고받을 때 활용된다. 블루투스 아키텍처는 전부다 서술하기엔 (물론 전부 다 공부하지도 못했지만) 양이 매우 많아, 저전력 통신 구현에 필요한 최소한의 필수 아키텍처 구조를 먼저 알아보고, 안드로이드(Kotlin)에서 실제 구현은 어떻게하는지는 다음 포스트에서 이어가겠다. 1. 안드로이드 블루투스 아키텍쳐 2. GAP와 GATT 3. 블루투스 시스템 API와 권한 처리 안드로이드 블루투스 아키텍처 우선 그림으로 보면 다음과.. 2022. 6. 24.
[Jetpack AAC] 뷰모델(ViewModel) #1 : MVVM [Jetpack AAC] 뷰모델(ViewModel) #1 : MVVM 뷰모델(ViewModel)은 안드로이드에서 MVVM 패턴을 구현하고자 할 때 필수로 사용되는 AAC(안드로이드 아키텍처 구성요소) 중 하나다. MVVM은 모델(Model)-뷰모델(ViewModel)-뷰(View)의 책임 집합으로 나뉘는 설계 패턴으로, 안드로이드의 Jetpack에서 제공하는 뷰모델은 위와 같은 패턴을 구현할 때 많은 도움을 준다. 따라서 MVVM이 무엇이고 기존에 비해 나은 점이 무엇이며, 안드로이드에서 간단히 뷰모델 라이브러리를 사용하는 방법에 대해 리뷰하겠다. 뷰모델은 필연적으로 LiveData와 함께 쓰이는데, 이것은 다른 포스트에서 이어 서술하겠다. 1. MVVM 과 MVC 2. ViewModel 과 SIS(Sa.. 2022. 6. 13.
[Firebase] Analytics Event #1 : Android 연동 [Firebase] Analytics Event #1: Android 연동 Firebase Analytics는 출시된 애플리케이션의 사용성을 분석할 때 아주 강력한 도구로 활용된다. 사용자가 어떤 기종을 사용해 서비스를 이용하는지, 각 화면 별 체류 시간은 어느 정도 되는지, 특정 이벤트(Event)를 정의하여 해당 이벤트가 얼마나 발생하는지 등 다양한 분석 기능을 제공한다. 이벤트는 사용자의 행동이나 시스템 이벤트, 오류 등을 추적하기위해 발생시키는 데이터로, 사용성을 확인하고자 하는 비즈니스 로직에서 이벤트를 발생시키면 된다. 안드로이드 연동 안드로이드에서 Analytics를 연동하고 잘 활용하기 위해선 다음의 과정이 필요하다. 1. Firebase 기본 연동 2. 이벤트 로깅 3. ADB 설치 및 .. 2022. 6. 2.
[Android Studio] ADB(Android Debug Bridge) 설치 [Android Studio] ADB(Android Debug Bridge) 설치 ADB, 안드로이드 디버그 브릿지는 기기와 통신할 수 있는 명령 도구이다. 기본적인 개념은 Unix Shell에 대한 접근을 제공하는 클라이언트-서버 프로그램이라 할 수 있다. adb 명령어로 클라이언트를 실행할 수 있으며 이 클라이언트를 통해 우리는 기기(개발 머신)에 명령을 전달할 수 있다. 전달된 명령어는 데몬(adbd)에 의해 수행된다. 이것을 안드로이드 스튜디오에서 어떻게 설치하고 사용하는지 알아보겠다. 안드로이드 스튜디오에서 설치 1. 설치 [File] -> [Settings] 를 통해 Settings 창을 띄운다. 이후 [Appearnace & Behavior] -> [System Settings] -> [An.. 2022. 6. 2.
[Kotlin] 동시성(Concurrency) 프로그래밍 #1 : 스레드 & 코루틴 [Kotlin] 동시성(Concurrency) 프로그래밍 #1 : 스레드 & 코루틴 안드로이드 애플리케이션과 같은 응용 프로그램들을 개발하다 보면 비즈니스 로직을 짤 때 스레드가 굉장히 많이 쓰이곤 한다. 특히 구글이 코틀린을 안드로이드의 메인 언어로 채택한 이후, 코틀린은 안드로이드 진영에서 이제 선택이 아닌 필수가 되었다. 그러므로 코틀린에서 어떻게 스레드를 다루고, 동시성 프로그래밍은 어떻게 하는지 정리해보도록 하겠다. 1. 프로세스와 스레드의 기본 개념 2. Kotlin에서 스레드와 코루틴 3. 코루틴의 우수성 프로세스와 스레드의 기본 개념 프로세스(Process) 프로세스(Process)는 보통 한 프로그램(Program)의 커다란 하나의 태스크(Task)를 말한다. 프로그램이 하나의 프로세스로.. 2022. 5. 26.
[Android] Activity resumed, paused가 무한 반복되는 현상 오류 : Activity resume, pause 가 무한 반복되는 현상 관련 로그 V/FA: Activity resumed, time: 8562145 V/FA: Screen exposed for less than 1000 ms. Event not sent. time: 32 V/FA: Activity paused, time: 8562177 위와 같은 로그가 무한 반복되고, 아무런 Exception도 안뜨는 상황이고 화면은 멈춘 상태였다. App keeps pausing and resuming, in an endless loop, but doesn't throw an exception 발생 시점 타겟 버전 S인 앱을 안드로이드 11 기종으로 빌드 테스트 수행 시 발생 발생 원인 Permission 요청 로.. 2022. 5. 25.
[Android] 권한(Permission) # 1 - 시스템 권한 (feat. Bluetooth) [Android] 권한(Permission) # 1 - 시스템 권한 (feat. Bluetooth) 작성 시점 : 22.05.15 안드로이드 개발을 하다 보면, 특정 기능을 사용할 때 권한(Permission)이 필요한 경우가 있다. 특히 안드로이드 12 (API Level 31 이상)부터 몇 가지 권한의 변경 사항이 있어 현재 내가 개발 중인 앱도 컴파일 버전(CompileSdk)을 올려야 할 필요가 있었는데 그 영향이 있었다. 그래서 내친김에 권한(Permission)에 대해 정리해보고 기본적인 권한 요청 방식에 대해 알아보고자 한다. 1. 권한의 기본 개념 2. 권한의 종류 3. 권한 요청의 기본 로직 권한의 기본 개념 권한(Permission) 이란? 우선 권한이 무엇인지 간단히 살펴보고자 한다... 2022. 5. 16.
[Jetpack AAC] Data Binding 기본 #2 : ObservableField [Jetpack AAC] Data Binding 기본 #2 : ObservableField https://full-stack.tistory.com/23 [Jetpack AAC] Data Binding 기본 #1 [Jetpack AAC] Data Binding 기본 #1 Jetpack은 2018년에 첫 공개된 안드로이드 개발에 도움을 주는 패키지 묶음이다. 기존의 구글에서 제공하던 서포트 라이브러리를 모아 통합한 것으로, 그중 AAC(Android full-stack.tistory.com Android Jetpack의 아키텍처 컴포넌트(AAC) 중 하나인 데이터 바인딩의 기본기를 좀 더 학습해보고자 한다. 이번에는 이벤트 바인딩의 방법과 옵저버블 필드(ObservableField)에 대해 알아보겠다. 간단.. 2022. 4. 30.
[Android] INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 오류 : INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 관련 키워드 android.content.pm.PackageParser$PackageParserException /data/app/vmdl170122893.tmp/base.apk (at Binary XML file line #33): 발생 시점 안드로이드 스튜디오에 오픈 소스 프로젝트 Import 한 후, 스마트폰에 빌드 시 발생 해결 방법 1. Manifest 파일의 모든 패키지명이 소문자인지 확인. com.fbiego.ota.MainActivity com.fbiego.ota.MainActivity 2. 안드로이드 12(S+) 부터는 모든 Manifest에서 모든 컴포넌트 태그 안쪽에 android:exported="tru.. 2022. 4. 29.