안드로이드 192

Gradle Dependency 관리하기 (buildSrc)

Kotlin + buildSrc 의존성 관리와 IDE 자동완성 지원을 위해 kotlin 코드를 가지는 buildSrc 모듈을 만들 수 있다. Gradle 문서를 보면 Gradle이 수행되면 buildSrc 디렉토리가 존재하는지 체크한다. 이 경우 Gradle은 자동적으로 코드를 컴파일하고 테스트한 뒤 당신의 빌드 스크립트의 classpath에 넣는다. 어떤 추가적인 지시도 규정 할 필요가 없다. 1. 루트폴더에 buildSrc 폴더를 만든다. 2. buildSrc 폴더 안에 build.gradle.kts 파일을 생성한다. 3. 아래와 같이 작성한다. plugins { `kotlin-dsl` } // Required since Gradle 4.10+. repositories { jcenter() } 4. ..

안드로이드 2021.04.02

Android Dalvik & ART 차이

Dalvik VM과 Java VM의 컴파일 과정 비교 DVM과 JVM은 모두 JIT(=Just In Time) 컴파일러를 사용해 기계어로 번역한다. JVM에서는 .jar 파일을 기계어로 번역할 수 있기 때문에 .class 파일을 .jar 파일로 번역하는 작업이 필요한 것 처럼(.class 파일을 .dex 파일로 번역하는 작업은 Android SDK에 포함되어 있는 dx 툴을 이용한다.) DVM에서는 .dex 파일을 기계어로 번역할 수 있기 때문에 .class 파일을 .dex 파일로 번역하는 작업이 필요하다. Dalvik VM의 컴파일 방식 위에서 말했듯이 Dalvik VM의 컴파일 방식은 JIT(=Just In Time) 방식이다. 이 방식은 앱 구동 중에 실시간으로 컴파일(기계어 번역)을 하기 때문에 ..

안드로이드 2021.03.29

Android Context란?

Context 는 크게 두 가지 역할을 수행하는 Abstract 클래스 입니다. 어플리케이션에 관하여 시스템이 관리하고 있는 정보에 접근하기 안드로이드 시스템 서비스에서 제공하는 API 를 호출 할 수 있는 기능 Context 인터페이스가 제공하는 API 중, getPackageName(), getResource() 등의 메서드들이 첫 번째 역할을 수행하는 대표적인 메서드입니다. Context 왜 사용할까? 안드로이드 플랫폼상에서의 관점으로 샆펴보면, Context 는 다음과 같은두 가지 역할을 수행하기 때문에 꼭 필요한 존재입니다. 자신이 어떤 어플리케이션을 나타내고 있는지 알려주는 ID 역할 ActivityManagerService 에 접근할 수 있도록 하는 통로 역할 Context 생성시점 Cont..

안드로이드 2021.03.29

리액티브 연산자 - 기초 (map, filter, reduce)

map() 함수 -입력값을 어떤 함수에 넣어서 원하는 값으로 변환하는 함수. String을 String으로 변환할 수도 있고, String을 Integer나 다른 객체로도 변환할 수 있음 map() 핵심 -내가 원하는 값을 ‘어떤 함수’ 에 넣는 것 -어떤 함수 : Function 인터페이스 객체 / 람다 표현식 -원하는 함수를 정의할 수 있느냐가 관건 flatMap() 함수 -map()을 좀 더 발전시킨 함수 -결과가 Observable로 나옴 -flatMap() => 일대다 or 일대일 Observable 함수 map() => 일대일 함수 RxJava에서 여러 개의 데이터를 발행하는 방법은 Observable 밖에 없음 (배압(back pressure)을 고려하면 Observable 대신에 Flowa..

안드로이드/Rx 2021.03.28

MVC, MVP, MVVM 장단점

1. MVC MVC 패턴은 Model + View + Controller를 합친 용어입니다. 장점 Model과 View의 분리됨. 구현하기 가장 쉽고 단순함. 개발기간이 짧아짐. (안드로이드에서의 장점) 단점 MVC 패턴의 단점은 View와 Model 사이의 의존성이 높다는 것입니다. View와 Model의 높은 의존성은 어플리케이션이 커질 수록 복잡하지고 유지보수가 어렵게 만들 수 있습니다. 2. MVP MVP 패턴은 Model + View + Presenter를 합친 용어입니다. Model과 View는 MVC 패턴과 동일하고, Controller 대신 Presenter가 존재합니다. 장점 MVP 패턴의 장점은 View와 Model의 의존성이 없다는 것입니다. Model과 View 간의 결합도를 낮추면..

안드로이드 2021.03.28

RxKotlin, RxAndroid란?

Rx란? Reactive Programing 입니다. 리액티브 프로그램은 프로그램 자신의 주변 환경과 끊임없이 상호작용을 하는데 프로그램이 주도하는 것이 아니라 환경이 변하면 이벤트를 받아 동작합니다. 명령형 프로그래밍과 다르다! 명령형 프로그래밍(Imperative programming) – 작성된 코드가 정해진 순서대로 실행됨. 리액티브 프로그래밍(Reactive Programing) – 데이터 흐름을 먼저 정의하고 데이터가 변경되었을 때 연관되는 함수나 메서드가 업데이트 되는 방식. 사용 이유 1. 자바가 동시성 처리를 하는데 번거로움이 있다. 다수의 비동기실행흐름을 생성하고 결과를 취합하여 최종리턴하는게 어렵다. -> completableFuture 도 가능하나 당시에는 제공되지 않았다. 2. 비..

안드로이드 2021.03.26

안드로이드 11 대응

1) Android 11 플랫폼에서 실행되는 모든 앱 개인정보 보호 Android 11에서는 사용자 개인정보 보호를 강화하기 위해 다음을 비롯한 변경사항과 제한사항이 도입되었습니다. 일회성 권한: 사용자에게 위치, 마이크 및 카메라 권한에 관한 추가 임시 액세스 권한을 부여하는 옵션을 제공합니다. 권한 대화상자 공개 상태: 반복적인 권한 거부는 '다시 묻지 않음'을 의미합니다. 데이터 액세스 분석: 앱 자체 코드와 종속 라이브러리 코드 모두에서 앱이 비공개 데이터에 액세스하는 위치에 관한 유용한 정보를 얻습니다. 시스템 알림 창 권한: 요청에 따라 앱의 특정 클래스에 SYSTEM_ALERT_WINDOW 권한이 자동으로 부여됩니다. 또한 ACTION_MANAGE_OVERLAY_PERMISSION 인텐트 작..

안드로이드 10 (Q) 대응

1) Android 10 플랫폼에서 실행되는 모든 앱 android.preference 라이브러리 지원 중단 Android 10부터 android.preference 라이브러리가 지원 중단됩니다. 개발자는 Android Jetpack의 일부인 AndroidX preference 라이브러리를 대신 사용해야 합니다. 이전 및 개발 지원용 추가 리소스는 업데이트된 설정 가이드와 함께 공개 샘플 앱 및 참조 문서를 확인하세요. 2) API 레벨 29 이상을 타겟팅하는 앱 Android 10(API 수준 29) 이상을 타겟팅하는 앱은 기본적으로 외부 저장소로 범위가 지정된 액세스 권한을 가지게 되고, 범위 지정 저장소가 부여됩니다. 이러한 앱은 외부 저장소의 앱별 디렉터리와 앱에서 만든 특정 유형의 미디어에만 액..

안드로이드 Pie 9.0 대응

Android 9(API 레벨 28)에서는 Android 시스템에 많은 변경사항이 도입됩니다. 1) Android 9 플랫폼에서 실행되는 모든 앱 백그라운드에서 센서 액세스 제한 Android 9에서는 백그라운드 앱이 사용자 입력과 센서 데이터에 액세스하는 능력을 제한합니다. Android 9이 실행되는 기기에서 앱이 백그라운드로 실행 중인 경우, 시스템은 다음과 같은 제한을 앱에 적용합니다. 앱이 마이크나 카메라에 액세스할 수 없습니다. 연속 보고 모드를 사용하는 센서(예: 가속도계 및 자이로스코프)는 이벤트를 수신하지 않습니다. 변경 시 또는 원샷 보고 모드를 사용하는 센서는 이벤트를 수신하지 않습니다. Android 9이 실행되는 기기에서 앱이 센서 이벤트를 감지해야 하는 경우, 포그라운드 서비스를..

Android 8.0 Oreo 대응

안드로이드 Oreo (8.0, API 26) 부터는 기존 버전과 다르게 두 가지의 섹션으로 나뉜다. 1. 앱의 Target 버전이 26 미만인데도 영향을 받는 모든 API 레벨을 대상으로 하는 앱 2. 앱의 Target 버전이 26 이상에서만 영향을 받는 Android 8.0를 대상으로 하는 앱 1) 모든 API레벨을 대상으로 하는 앱 백그라운드 제한 Android 8.0는 사용자 경험을 개선하기 위해 백그라운드에 실행되는 앱의 동작을 제한합니다. 이 백그라운드 제한은 두 가지의 제한 방법으로 나뉩니다. 백그라운드 서비스 제한: 앱이 유휴 상태일 경우 백그라운드 서비스의 사용이 제한됩니다. 이 기능은 사용자에게 잘 보이는 포그라운드 서비스 에는 적용되지 않습니다. 유휴 상태) 휴대전화의 전원이 켜진 상태..