안드로이드 192

StorageScope 작업하면서 직면한 문제

* 사진 촬영 후 uri 받아온 것으로 File 변환시 lack 에러 남. : Uri lacks 'file' scheme: content://media/external/images/media/97 에러 참조 : python2.net/questions-163593.htm * Q이전과 Q이후 둘다 content: Uri이면 파일로 바꿀시에 lack 에러 남. - 파일을 카피해서 toFile로 해보았으나 그래도 lack? 에러가 남. : 전에 했던 프로젝트는 Crop라이브러리를 사용한 다음에 uri받은것을 toFile해서 되는듯(실제 확인) CROP result.uri : file:///data/user/0/com.kidsnote.examtarget/cache/cropped2279498036139754061...

안드로이드 2021.06.16

Android 11 분석

왜 사용자 정보 보호와 관련된 기능 및 변경사항이 매번 새 안드로이드 버전이 출시 될 때마다 추가 되고 되던 기능을 막는건가? - 개인정보 보호 관점에서 스마트 디바이스가 더욱 중요한 역할을 하고 있기 때문 사용자 정보 보호 원칙 - 최소한의 권한만 요청 - 필요할 때 권한 요청 - 사용자가 권한을 허용하지 않더라도 올바르게 처리 일회성 권한 -대표적인 변경사항 : 카메라, 마이크, 위치권한 Android 11에 이번만 허용이 추가되었음 (앱이 Foreground일 경우에만 허용) : 앱이 백그라운드에 진입 하면 시스템 내부에 타이머가 시작됩니다. 그 후 타이머가 만료되면 권한을 사용할 수 없습니다. 백그라운드 위치 권한 Android 10 : ACCESS_BACKGROUND_LOCATION 권한 필요 ..

Android Clean Architecture란?

Clean Architecture 사용 이유? Clean Architecture는 프레임 워크에 독립적입니다. Clean Architecture는 일부 기능이 포함된 라이브러리 (곧 프레임워크)에 의존하지 않습니다. 이를 통해 프레임워크의 제약에 시스템을 맞추는 것이 아니라, 시스템의 도구로써 프레임워크를 활용할 수 있게 합니다. Clean Architecture는 테스트를 용이하게 해줍니다. The business rules(Entity)를 테스트하는데에 외부 요소를 필요로 하지 않습니다. Clean Architecture는 UI에 독립적입니다. 다른 시스템 변경 없이, UI를 쉽게 변경할 수 있습니다. (UI 변경의 용이성을 줍니다.) 예들 들면, 웹 UI에서 Console UI로 변경한다 할때, T..

안드로이드 2021.05.27

SAF(Storage Access Framework)

SAF(Storage Access Framework)는 문서 및 이미지 등 각종 파일을 탐색하고 저장하는 작업을 간편하게 하려고 도입하였습니다. SAF의 특징은 다음과 같습니다. 디바이스에는 여러 프로바이더가 존재할 수 있습니다. 사용자는 프로바이더들이 제공하는 모든 파일을 탐색할 수 있습니다. 앱은 프로바이더가 제공하는 문서에 대한 접근 권한을 가질 수 있습니다. 이 접근 권한으로 앱은 파일을 추가, 편집, 저장 및 삭제할 수 있습니다. USB가 연결되었을 때 USB의 데이터를 제공하는 프로바이더도 있습니다. 필요한 권한 파일에 접근할 때 SAF는 권한을 요구하지 않습니다. 대신 Selector UI를 띄워 사용자가 앱이 파일에 접근할 수 있도록 허락해야 합니다. 파일 읽기 먼저 Selector 화면을..

안드로이드 2021.05.25

[Android] 이미지 로딩 라이브러리 - Coil

Coil은 Coroutine Image Loader의 약자이며 Kotlin Coroutines(코루틴)으로 만들어진 가벼운 Android 백앤드 이미지 로딩 라이브러리입니다. 코루틴자체가 내장이 되어 있어 코루틴 라이브러리를 별도로 설치하지 않아도 되는 장점이 있습니다. 장점 Glide, Fresco보다 상대적으로 가볍다. 코루틴이 기본이지만 메인까지는 아니며 심플함과 최소한의 보일러 플레이트(boilerplate)를 위하여 Kotlin의 기능을 활용하여 Kotlin을 잘 다룬다면 사용하기가 매우 쉽다. 메모리와 디스크의 캐싱, 메모리의 이미지 다운 샘플링, Bitmap 재사용, 일시정지/취소의 자동화 등등 수 많은 최적화 작업을 수행하므로 처리 속도가 굉장히 빠릅니다. 다이나믹 이미지 샘플링을 지원하며..

안드로이드 2021.05.17

Storage Scope

Storage Scope란? - 개별 앱 공간이 샌드박스 형식으로 격리되어 다른 앱의 파일에 직접 접근할 수 없게 하는 방식을 말합니다. targetSdkVersiond을 29로 올리면 아래와 같이 Deprecated 됩니다. @Deprecated public static File getExternalStorageDirectory() 공용 저장소에 접근할 때는 MediaStore 또는 Intent(ACTION_OPEN_DOCUMENT)를 사용해야 된다고 합니다. 공용 공간은 MediaStore을 통해서만 읽고 쓸 수 있습니다. 혹은 SAF를 사용해 파일을 가져올 수 있습니다. 저장소 Android Q이전 외부 저장소 : 외부 저장소 권한이 있으면 누구나 접근이 가능 - READ_EXTERNAL_STORA..

안드로이드 2021.05.14

ViewBinding

현재 가장 많이 사용되는 Data Binding의 목적은 View와 Model을 엮어주는 역할인데 많은 개발자들이 단순히 View에 대한 참조를 얻기 위한 목적으로 Data Binding을 사용하는 것을 보고, 구글에서 View에 대한 참조를 얻기 위한 목적으로 오늘의 View Binding이 탄생하게 되었다고 한다. 특징 - Null안전 : 뷰의 직접 참조를 생성하므로 유효하지 않은 뷰 ID로 인해 null포인터 예외가 발생할 위험이 없습니다. 또한 레이아웃의 일부 구성에만 뷰가 있는 경우 결합 클래스에서 참조를 포함하는 필드가 @Nullable로 표시됩니다. -유형 안전 : 각 바인딩 클래스에 있는 필드의 유형이 XML파일에서 참조하는 뷰와 일치하기 때문에 클래스 변환 예외가 발생할 위험이 없습니다...

안드로이드 2021.05.13

Kotlin apply, with, let, also, run 사용?

범위 지정 함수는 무엇을 하는가? 이 5가지 함수는 기본적으로 매우 비슷한 기능을 합니다. 이 함수들은 두가지 구성 요소를 가집니다. 수신 객체 수신 객체 지정 람다 (lambda with receiver) with, also, apply, let, run 은 아래의 3 가지 차이점 중 1 가지가 서로 다릅니다. 범위 지정 함수 의 호출시에 수신 객체가 매개 변수로 명시적으로 전달되거나 수신 객체의 확장 함수로 암시적 수신 객체 로 전달된다. 범위 지정 함수 의 수신 객체 지정 람다 에 전달되는 수신 객체가 명시적 매개 변수 로 전달 되거나 수신 객체의 확장 함수로 암시적 수신 객체로 코드 블록 내부로 전달 된다. 범위 지정 함수의 결과로 수신 객체를 그대로 반환하거나 수신 객체 지정 람다 의 실행 결과..

안드로이드 2021.05.11

Android 멀티 모듈

모듈은 안드로이드 디벨로퍼 사이트에 다음과 같이 정의 되어있습니다. 모듈은 소스 파일 및 빌드 설정으로 구성된 모음이며, 이를 통해 프로젝트를 별개의 기능 단위로 분할할 수 있습니다. 프로젝트에는 하나 이상의 모듈이 포함될 수 있으며, 하나의 모듈이 다른 모듈을 종속성으로 사용할 수 있습니다. 각 모듈은 개별적으로 빌드, 테스트 및 디버그할 수 있습니다. 모듈 생성 새로운 모듈의 생성은 File - New - New Module과 같은 과정으로 이루어 집니다. Module(app)과 Android Library, Java Library의 차이 Module은 전체의 어플리케이션 없이 부분적으로 디버깅 할수 있고 테스트 할 수 있는 작은 부분이라고 할 수 있습니다. 반면, Android Library는 어플..

안드로이드 2021.05.11

Wildcard(*) import 방지

kotlin을 사용하면 import java.util.Locale과 같은 wildcard import를 사용하지 못하게 한다고 한다. 이유는 명확하게 선언할 수 있기 때문에 실수를 줄일 수도 있고, 다른 패키지에 동일한 클래스가 존재할 수도 있고, Kotlin 같은 경우는 패키지 레벨의 함수도 선언할 수 있기 때문에 혼란이 있을 수 있다. 문제는 IntelliJ가 동일한 패키지에서 있는 클래스/함수를 5개 이상의 import를 사용하면 wildcard import로 바꿔 버린다. 자동으로 바꾸지 못 하도록 설정을 바꿔주자. IntelliJ 설정에서 Editor > Code Style > Kotlin 설정에서 아래와 같이 바꿔준다. Kotlin 클래스에서만 적용되는 내용이기 때문에, Java 같은 다른 언..

안드로이드 2021.05.03