코틀린에서 Annotation Processor를 디버깅 하는 방법

코틀린에서 Annotation Processor를 디버깅 하는 방법 https://medium.com/@cafonsomota/debug-annotation-processor-in-kotlin-6eb462e965f8 아래에 나올 내용은 위 링크의 내용을 번역하고, 추가적인 내용을 덧붙인 글입니다. 코틀린 언어를 사용하면서 애노테이션 프로세서 다루는 경우 어떻게 디버깅을 할 수 있는지 알아봅시다. 로그 출력하기 어노테이션 프로세서가 컴파일 타임에 작업을 수행하는 동안 로그를 출력하기기 위해서는 ProcessingEnvironment.getMessager().printMessage(…)를 호출 해야 한다. ProcessingEnvironment 객체는 AbstractProcessor 더보기…

액티비티 결과 처리하기 (Good bye… startActivityForResult, onActivityResult)

액티비티(Activity)는 안드로이드의 주요 컴포넌트 중 하나로 애플리케이션에서 필수적으로 사용된다. 2007년, 안드로이드가 등장한 뒤로 액티비티간에 데이터(인텐트)를 전달하고, 결과를 처리할 때 개발자는 startActivityForResult()의 호출과 onActivityResult(requestCode, resultCode, data) 콜백호출을 다뤄왔다. 새로운 액티비티 결과(Activity Result) API는 지금까지 해오던 방법을 개선하여 완전히 새로운 액티비티 결과 처리 방법을 제공한다. 기존 방법으로 액티비티 결과 전달받기 예를 들어 더보기…

안드로이드에서 blur효과 구현하기 : 성능 개선 및 LiveBlur 구현하기

안드로이드에서 blur효과 구현하기 : 성능 개선 및 LiveBlurView 구현하기 이번 포스팅은 지난시간에 다룬 Box Blur와 StackBlur편에 이어 세번째 이야기입니다. 스택블러(Stack Blur)는 2Pass 전략을 사용하여 빠른 이미지 프로세싱 시간과 품질을 보장한다. 스택블러 알고리즘과는 별개로 안드로이드에서 조금 더 성능을 개선하는 방법에 대해서 알아보자. 성능 개선 방법 이전 시간에 다룬 스택블러로 HD품질의 이미지를 더보기…

안드로이드에서 blur효과 구현하기 : Gaussian Blur, Stack Blur

안드로이드에서 blur효과 구현하기 : Gaussian Blur, Stack Blur 이번 포스팅은 지난시간에 다룬 안드로이드에서 blur효과 구현하기 : Box Blur에 이어 두번째 포스팅입니다. 박스블러(Box Blur)는 radius값에 따라 연산량이 많아지는 문제가 있었지만, 연산방법을 개선하여 이미지 처리 시간 문제를 해결했다. 하지만 blur의 품질은 여전히 좋지 못했고, 픽셀화된 느낌이 많이 든다. Gaussian Blur 박스블러와는 다르게, 더보기…

안드로이드에서 blur효과 구현하기 : Box Blur

안드로이드에서 blur효과 구현하기 안드로이드 SDK에서는 Blur에 관한 API를 제공하고 있지 않기 때문에 일반적으로 라이브러리를 사용하여 구현하게 된다.  Blur 효과를 구현하기 위해서는 이미지를 구성하는 픽셀에 대해서 먼저 알아야 한다. 픽셀(Pixel)이란? 픽셀은 화소라고도 하며 화면 또는 이미지를 구성하는 가장 기본이 되는 단위다. 어떠한 이미지를 크게 확대 했을 때 작은 점 또는 사격형으로 더보기…

D8, R8 그리고 enum 이야기

D8 과 R8 안드로이드에서는 대표적인 세가지 컴파일러가 있다 코틀린 or 자바 컴파일러 D8 R8 우선,  코틀린(또는 자바) 컴파일러는 코틀린(또는 자바) 코드를 자바 프로그래밍 바이트코드로 변환한다.  하지만, 우리는 이 바이트 코드를 안드로이드기기에서 실행할 수 없다. 안드로이드에서는 바이트코드 대신 DEX 코드라고 불리는 Dalvik에서 실행가능한 파일이 필요하다. Dalvik은 본래 안드로이드 런타임이였으나, 현재는 ART라는 더보기…

멀티 모듈을 사용하는 앱에서 Dagger 적용하기

멀티 모듈을 사용하는 앱에서 Dagger 적용하기 애플리케이션 개발시 다음과 같은 특수한 목적으로 가지고 멀티 모듈을 사용한 개발 방법을 택할 수 있다. 대규모 프로젝트에서의 개발자간 협업 빌드 시간 단축 모듈의 재사용 여러가지 버전의 앱을 만들 때 APK 용량을 줄일 때 ( Dynamic Feature Module) 안드로이드 프로젝트에서 멀티 모듈의 종류는 일반적인 모듈과 더보기…

이미지의 추가/삭제 변경사항을 감지하고 삭제된 Uri인지 확인하기

내 앱이 아닌 다른 애플리케이션에서 미디어(이미지, 동영상 또는 파일)을 추가/삭제 여부를 감지하기 위해서는 ContentObserver를 다음과 확장하여 사용할 수 있다. class PickleContentObserver(val activity:FragmentActivity) : ContentObserver(Handler()), LifecycleObserver{ … val contentChangedEvent = SingleLiveEvent<Void>() // Activity 또는 Fragment에서 구독 init { activity.lifecycle.addObserver(this) activity.contentResolver.registerContentObserver(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, true, this) activity.contentResolver.registerContentObserver(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, true, this) } override fun onChange(selfChange: Boolean, uri: 더보기…

코틀린의 Sealed class

https://android.jlelse.eu/kotlin-sealed-classes-enum-2-0-1d8addd00602를 번역한 내용입니다. 예를들어 일요일, 월요일, 화요일 등 요일에 대한 정보를 갖는 객체 집합을 만들기 위해 enum클래스를 사용할 수 있다.  enum class Days(dayNo: Int) { SUNDAY(0), MONDAY(1), TUESDAY(2), WEDNESDAY(3), THURSDAY(4), FRIDAY(5), SATURDAY(6) } 왜 sealed class가 필요할까 라는 생각이 들텐데 그전에 enum의 제약사항에 대해 알아보자 각각의 enum 상수에 대해 하나의 더보기…

Android CameraX 라이브러리 미리보기

아직 알파 단계의 라이브러리 입니다 CameraX는 Jetpack에 포함된 서포트 라이브러리로 카메라 앱 개발을 쉽게 할 수 있도록 도와 줍니다. 특징 Camera2를 사용하므로 Android 5.0 (API level 21)까지만 지원 유즈케이스 기반으로 설계되어 Preview, Image Processing, Image Capture 유즈 케이스 동시 지원 생명주기를 인식함 장치 호환성 문제 해결함으로 기기별 분기코드 감소 특정 더보기…