'Android' 카테고리의 글 목록 — SH's Devlog

Android

Android/BLE

[BLE] GATT란? - Services & Characteristics

GATT(Generic Attribute Profile)란? GATT(Generic Attribute Profile)는 BLE 연결을 통해 프로필 및 데이터를 주고받기 위한 방법을 정의합니다. 로우 레벨의 상호작용을 정의하는 GAP와는 달리 GATT는 실제 데이터 전송 절차 및 데이터 형식만을 다룹니다. 또한, 다른 업체에서 제작한 서로 다른 디바이스 간의 상호 운용성을 보장하는 SIG defined GATT-based profiles을 제공합니다. 올바르게 작동하려면 모든 표준 BLE Profile은 GATT을 기반으로 해야 하며 GATT를 준수해야 합니다. 따라서, 어플리케이션과 사용자는 데이터를 전송하기 위해 데이터의 타입을 정할 때 GATT 규칙에 따라 전송해야 합니다. GATT는 ATT(Attr..

Android/Error Log

[Error] gradlew Permission Denied 에러 해결법

Android Studio, IntelliJ, 맥 터미널에서 Gradle 프로젝트를 빌드할 때 혹은 .gradle 디렉토리에 대한 Permission 문제가 발생하거나 gradlew 명령어를 실행할 때 빌드 과정에서 에러가 발생할 때가 있습니다. 만약, ./gradlew가 실행이 안된다면 프로젝트 디렉토리에서 아래 명령어를 실행해서 실행권한을 주면 됩니다. $ chmod +x ./gradlew 만약, 빌드 과정에서 .gradle 디렉토리에 대한 권한 문제가 발생한다면 이유는 Gradle Build tool이 프로젝트를 빌드하는 과정에서 .gradle 디렉토리를 수정할 때 쓰기 권한이 없기 때문에 빌드하지 못하는 경우입니다. 그래서 아래 명령어로 프로젝트 디렉토리에 대한 권한을 주어서 외부 tool이 프로..

Android/Basic

[Android] Gradle 빌드시에 Signing key로 서명하도록 설정하기

이번 포스트에서는 Gradle 빌드시에 Signing key를 서명하도록 설정하는 방법을 정리하겠습니다. Play store에 앱을 업로드하려면 Bundle 혹은 APK에 앱 서명을 해야합니다. 그래서 서명하기 위한 일반적인 방법으로는 [Build]-[Generate Signed Bundle / APK]에서 keystore 정보를 입력해주는 방법이 존재하지만 이 방법은 APK 생성할때마다 매번 입력해주어야 하므로 꽤 번거롭습니다. 또한, keystore에 대한 정보는 깃과 같은 외부 저장소에 올려서 노출되어서는 안되므로 주의해야 합니다. 그래서 이번 포스트에서는 Gradle의 sIgningConfings 설정을 통해 빌드시에 keystore로 안전하게 앱 서명을 하는 방법을 정리하겠습니다. gradle..

Android/BLE

[BLE] GAP란? - Advertising & Connections

GAP(Generic Access Profile)란? GAP(Generic Access Profile)는 서로 다른 제조사에서 제작한 두 개 이상의 BLE 디바이스가 서로 호환되어 상호 운용할 수 있도록하는 프레임워크를 제공합니다. 즉, GAP는 서로를 검색할 수 있도록 이 프레임워크는 모든 BLE 디바이스가 구현을 해야합니다. 그러므로, GAP에서는 광고(Advertisement)와 연결 설정(Connection Establishment)등의 상호 운용성을 보장하며 BLE Device의 모드(Modes)와 역할(Roles), 프로시저(Procedures), 보안(Security)을 정의합니다. 두 개의 BLE 디바이스는 서로를 발견하기 위해서는 둘 중 하나는 광고(Advertising)을 해야하며 이 ..

Android/BLE

[BLE] 저전력 블루투스 BLE(Bluetooth Low Energy)란?

BLE(Bluetooth Low Energy)란? Bluetooth는 마우스, 키보드 또는 PC와 같은 장치에서 근거리 케이블을 대체하기 위한 무선(wireless) 통신 기술로 시작되었습니다. 초기에는 당시 표준이었던 Bluetooth Classic(BR/EDR)이라는 기술을 사용했습니다. 하지만, Bluetooth Classic에는 큰 문제점이 있었는데 배터리가 빨리 소모된다는 단점이 있었고 많은 불편함이 있었습니다. 그리고 마침내 2010년에 Bluetooth 4.0이 새로운 Bluetooth의 표준으로 채택 되었고 Bluetooth Classic의 단점을 보완하여 훨씬 적은 전력을 사용하고 Bluetooth Classic과 비슷한 성능의 무선 통신이 가능해졌습니다. 당시 배터리 소모 문제는 Blu..

Android/Kotlin(Java)

[Kotlin] Annotation Processor로 코드 생성하기(ft. KotlinPoet)

이번 포스트에서는 Annotation Processor에 대해 정리해 보겠습니다. Annotation Processor란? Annotation Prcoessor란 소스 코드에 붙어있는 어노테이션 정보를 읽어서 컴파일 단계에서 컴파일러가 java 파일 혹은 바이트 코드를 생성하여 새로운 소스 코드를 생성할 수 있는 기능을 제공하는 javac(Java Compiler)에 내장된 도구입니다. 여기서 컴파일될 때 어떤 프로세서가 동작할지 결정하는 것은 프로세서를 찾는 'Service Loader'라는 기능의 도움으로 수행됩니다. Annotation Processing 원리 Annotation Processing은 javac에 의해 여러 round에 걸쳐서 동작합니다. 첫 번째 라운드는 컴파일이 사전 컴파일 단계..

Android/Coroutines

[Coroutines] suspend 함수 원리 및 CPS(Continuation Passing Style)

이번 포스트에서는 코루틴의 suspend 함수 원리와 CPS(Continuation Passing Style)에 대해 정리하겠습니다. 코루틴의 suspend는 어떻게 동작할까? 코루틴을 이용하면 비동기 작업을 순차적으로 처리하여 동시성 문제를 해결할 수 있습니다. 그러므로, 코루틴을 사용하면 콜백 지옥에서 벗어날 수 있고, 혹은 Reactive streams를 사용하기 위해서 복잡한 함수형 프로그래밍의 체이닝 방식을 사용하지 않을 수 있습니다. 그런데 코루틴이 네트워크 요청과 같은 비동기 작업을 순차적으로 처리할 수 있는 이유는 무엇일까요? 결론부터 말하면, 코루틴의 일시 중지하고 작업을 처리한 후 나중에 해당 지점에서 다시 재개할 수 있는 기능 덕분입니다. 이러한 기능 덕분에 비동기 작업을 처리할 때 ..

Android/Kotlin(Java)

[Kotlin] String 원시 문자열(Raw String Literal)

원시 문자열(Raw String Literal)이란? Kotlin의 원시 문자열(Raw String)은 문자열을 표현하는 리터럴 중 한 유형으로 문자열 내에 이스케이프 문자를 사용하지 않고 특수 문자나 여러 줄의 텍스트를 문자 그대로 표현하는 문자열 리터럴입니다. 원시 문자열의 특징 원시 문자열은 아래와 같은 특징을 가집니다. 원시 문자열은 삼중따옴표(""")로 묶어서 정의 -> 따옴표가 아닌 삼중따옴표로 묶어서 정의합니다. 이스케이프 문자를 사용하지 않음 -> Raw String Literal 내에서는 \n, \t, \"와 같은 이스케이프 문자를 사용하지 않아도 됩니다. 따라서 특수 문자를 그대로 포함할 수 있어 가독성이 높아집니다. 여러 줄의 텍스트 처리 -> 여러 줄로 구성된 텍스트를 표현할 때 유..

Android/Kotlin(Java)

[Kotlin] 자주 사용하는 코틀린 함수 정리(String, ArrayList, Queue, Stack)

이번 포스트에서는 코틀린의 String, ArrayList, Queue, Stack의 함수들을 간략하게 알아보겠습니다. String startsWith(str) -> 문자열이 특정 문자열로 시작하는지 Boolean 값 반환 endsWith(str) -> 문자열이 특정 문자열로 끝나는지 Boolean 값 반환 indexOf(str) -> 특정 문자열의 포함된 첫번째 index 반환. 만약, 중복될 경우 가장 처음 index 반환. 일치하는 문자열이 존재하지 않을 경우 -1 반환 equal(str) -> String 문자열 값 비교하여 Boolean 값 반환 none(predicate: (Char) -> Boolean) -> predicate 조건을 만족하는 문자가 하나도 없는지에 대한 Boolean 값을 ..

Android/Kotlin(Java)

[Kotlin/Java] System.arraycopy로 배열 복사하기

이번에는 System.arraycopy에 대해 정리하겠습니다. System.arraycopy란? System.arraycopy는 메소드는 배열의 값들을 지정한 위치에서 갯수만큼 값을 복사할 수 있습니다. System.arraycopy 메소드 public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length); Object src -> 복사하려는 배열 int srcPos -> 복사하려는 시작 인덱스 Object dest -> 복사받으려는 배열 (붙여넣으려는) int destPos -> 복사받으려는 시작 인덱스 (붙여넣으려는) int length -> 복사하려는 갯수 만약, srcPos + leng..

반응형
seunghwaan
'Android' 카테고리의 글 목록