멀티 모듈을 사용하는 앱에서 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 유즈 케이스 동시 지원 생명주기를 인식함 장치 호환성 문제 해결함으로 기기별 분기코드 감소 특정 더보기…

안드로이드 카메라 스트림 동시에 여러개 사용하기

안드로이드 카메라 스트림 동시에 여러개 사용하기 이 포스팅은 다음과 같은 내용을 포함합니다. 하나의 카메라로 여러개의 스트림을 동시에 사용하는것 하나의 캡쳐 리퀘스트로 다른 속성을 가진 타겟들을 결합하는것 출력타입, 출력사이즈, 하드웨어 수준을 선택하고 조회하는 방법 SurfaceView와 ImageReader의 Surface를 셋팅하고 사용하는 방법 여러개의 카메라 스트림을 사용하는 사례 카메라를 사용하는 앱은 두개이상의 스트림을 동시에 더보기…

DataBinding을 사용시 TextView의 텍스트가 변경되지 않는 경우

LiveData와 DataBinding을 이용하여 동적으로 TextView의 Text를 변경하는 로직을 적용했습니다. 예를들면, “Hello World” 를 “Hello Charles”는 것과 같이 단순한 변경이였습니다. <?xml version=”1.0″ encoding=”utf-8″?> <layout xmlns:tools=”http://schemas.android.com/tools” xmlns:app=”http://schemas.android.com/apk/res-auto”> <data> <variable name=”viewModel” type=”com.charlezz.MainViewModel”/> </data> <TextView android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:text=”@{viewModel.text}”/> </layout> class MainViewModel: ViewModel (){ val text = MutableLiveData<CharSequence>().apply{ text.value = “Hello World” } fun changeText(enabled:Boolean){ 더보기…

[OpenGL] 1. Android OpenGL ES의 개요

OpenGL ES란? Android는 높은 퍼포먼스를 필요로 하는 2D,3D 그래픽스를 위해 OpenGL ES(Open Graphics Library for Embeded System)를 지원합니다. OpenGL은 3D 그래픽 처리 하드웨어에 대한 표준 소프트웨어 인터페이스를 지정하는 크로스 플랫폼 그래픽 API이며, OpenGL ES는 안드로이드와 같은 임베디드 장치를 위한 가볍고 쉬운 API를 제공합니다. 또한 Android는 여러 버전의 OpenGL ES API를 더보기…

Koin과 함께 하는 안드로이드 의존성 주입

Introduction Koin은 코틀린 개발자를 위한 실용적인 API제공을 하는 경량화된 의존성 주입 프레임워크입니다. (자바 개발자 또는 의존성 주입에 대해서 알고 싶다면 Dagger 포스트를 참조해주세요)  순수 코틀린으로만 작성되어있으며 프록시, 애노테이션 프로세싱을 통한 코드 생성, 리플렉션을 사용하지 않기 때문에 가볍습니다. Android Gradle설정(https://github.com/InsertKoinIO/koin) def koin_version=”0.9.3″ // 최신버전은 위의 github링크 참조 implementation “org.koin:koin-android:$koin_version” 왜 DSL을 더보기…

안드로이드 단위 테스트 (1)

소프트웨어 개발에서 테스트는 종종 저평가 되거나 무시되버리곤 한다. 모바일앱에서 테스트 코드를 하나도 작성하지 않고 앱을 출시하는 경우도 허다 합니다.   대부분 개발자가 유닛테스트를 적용하지 않는 이유는? 모바일 앱은 프론트앤드니까 대부분은 백엔드에서 테스트해야 되지! 모바일은 유닛테스트부분에서는 좀 달라, 왜냐면 대부분의 로직이 UI랑 연결되어있거든! 기껏해봐야 넌 UI 테스트만 신경쓰겠지. 백엔드랑 비교하면 모바일앱은 더보기…

글쓴이 Charlezz,

디폴트 값과 자바 (@JvmOverloads)

자바에는 디폴트 파라미터 값이라는 개념이 없다. 그러므로 오버로딩한 메소드가 많아지는 경우가 있다.   코틀린에서는 적용된 디폴트파라미터 예제 fun foo(){ param1:Int, param2:String = “” //default 값이 지정된 파라미터 } 위함수를 호출하는경우 foo(123) //디폴트파라미터는 생략가능 foo(123, “test”) // 디폴트값이 있으나 test로 덮어씌움 foo(param2=””, param1= 123) // 파라미터 명을 적는 경우 순서를 바꿀수 더보기…

글쓴이 Charlezz,