https://github.com/googlesamples/android-architecture 위의 아키텍처 중에 mvp-dagger2를 적용하다가, 내가 알던 dagger2와 다르게 사용을 해서 이게 뭔가 찾아봤다. 가장 다른 점은 크게 두개다. 1. @Binds 얘는 무엇인가? 2. @ContributesAndroidInjector 얘는 뭐니? 그래 찾아보니, 내가 모르는 게 당연 예전에 썻던 dagger2의 적용에 대한 글에서 하는거 처럼 안했으니까 그럼 뭔가? https://proandroiddev.com/dagger-2-android-modules-e168821cfc57 요 링크를 참고하자. 요약하자면, 기존의 dagger2의 방법대로 (제이크 왈튼 옹의 강의) 사용하면, activity를 만..
Context 파해치기 안드로이드의 4가지 구성요소 때문에 main()없이 자바코드 실행이 가능하다. 반면에, 4가지 구성요소는 간단하게 new를 통해 생성이 불가하다. 왜냐하면 context를 상속받기 때문이다. context는 무엇일까? 안드로이드 시스템에 있는 클래스와 자원들을 앱의 레벨까지 올려다 주는 것이다. 예를 들면, 액티비티를 시작시킨다든지, 브로드캐스팅 기능, 인텐트를 주고 받는 기능 등 말이다. 요렇게 구성되는데, 하나씩 보면, CotextImpl은 Context가 추상화한 function들을 실제로 구현한다. ContextWrapper는 모든 context의 function들을 감싸고 있으며, CotextImpl을 클래스를 사용해서 실행시킨다. attachBaseContext func..
안드로이드로 다양한 언어들 적용을 해보자. 구글에 치면 다 나온다. 근데 여기엔 함정이 있다. 바로 updateConfiguration() 이란 함수를 사용해서 바꾸라는 것인디. 얘는 이미 API 17 에서 deprecated 되었단다. 그래서 createConfigurationContext()라는 놈을 쓰는데, 얘를 어떻게 적용하는지 잘 안 나와있기 때문이다. 솔직히 이제 API level이 27까지 나온 시점에 최소 레벨도 17 이상일 가능성이 높아서 createConfigurationContext()를 어떻게 쓰느냐가 정말 관건인데, 이거에 대한 설명이 부족하니 내가 써야지. 근데 왜 포스팅을 열심히해도 구글 검색에 잘 안나오는지 참 답답허네. 일단 언어 추가하는 것 부터 해보자 대박 쉬움. 요렇게..
자 이제 커스텀한 Content Provider를 만들어보자. Content Provider를 만들어서 DB에 접근해서 값을 가져올 수 있다. 사실 나의 목적은 다른앱에서 앱의 정보를 주는 것이다. 예를 들면, 과거의 앱 대신 완전히 새로운 앱으로 업데이트 해주고 싶을 경우.이전 앱의 세팅값을 가져오기 위해, 이전 앱에 Content Provider를 만들어줘서업데이트하고 싶은 값들을 insert하고,새로운 앱에서 이전 앱에서 만든 Content Provider의 Contract (계약서)를 가져와서,Content Provider를 사용함으로 세팅값을 업데이트 칠 수 있단다. 뭐 대충 이런 식이다. 전체적인 그림은. 과거 앱에서 Content Provider와 Contract를 선언하고, 새로운 앱에서는..
안드로이드의 내부 DB를 사용하는 방법에 대해 알아보자. 우선, 안드로이드에서 Data를 저장하는 방식은 여러가지가 있다. 무엇이 있고, 또 언제 이것들을 사용하는지 알아보자. 위 그림은 Udacity Android App 강좌에서 가져왔다. 1. onSavedInstanceState 요놈은 키밸류 (복잡한 구조 가능 - 클래스 모델 같은거). 근데 얘는 앱이 열려있을 때만 쓸 수 있당. 그래서 앱이 돌아갈 때 데이터를 전달하고 싶다면 이 놈을 이용해도 좋을 듯 (영속성이 없다는 거야.) 2. SharedPreferences 요놈은 우리가 Settings 만들 때 접해봤을 꺼임. 얘도 역시 키밸류 근데 (Primitive 만 된다. int, boolean, String 같은 애들만 된다고) 얘는 영속성 ..
Content Provider는 Android의 특성상 Application간에 데이터 공유가 어려운데, 이를 쉽게 공유할 수 있도록 도와준다. Content Provider를 사용해야 하는 이유 앱의 코드 변경없이 데이터 저장소의 변경 가능 Loader나 CursorAdapter가 사용함. 다른 앱 개발자들이 쉽게 접근할 수 있도록. ContentResolver : Content Provider가 엄청 많은데, 모든 데이터를 동기화하지 않으면 교통 체증이 생김. 컨텐트 프로바이더 간의 중개자 역할을 함. ContentResolver contentResolver = getContentResolver(); Cursor cursor = contentResolver.query(DroidTermsExampleC..
안드로이드 권한에 대해서 뽀개보자. 일단 권한을 왜 주는지 이해하기 위해서는 안드로이드 앱이 어떻게 시스템 상에서 돌아가는지 엄청 간단하게 이해해야 한다. 샌드박스란 놈이 있는데, 그 샌드박스 안에서 각각의 앱이 고유의 Id를 할당받아서 돌아간다. 서로 방해하지 않기 위해서이다. 근데 방해하려면 권한을 받아야 한다는 것. 따라서, 시스템적으로 우리는 권한을 주어야 한다. 근데 고려해야 할 사항이 한가지 더 있다. 권한에도 정상 권한과 위험한 권한이 존재한다. 정상 권한은 뭐 줘도 괜찮은 권한이라 선언만 해주면 자동으로 주는 권한이다. 반면에 위험한 권한은 시스템에 위험성을 초래해서 사용자로 부터 허가를 맡고 줘야하는 권한이다. 그러면 정상권한은 오케 줬다고 치자. 그러면 위험한 권한이 문젠데, 여기서 또..
자 위치정보를 알아내기 위해, 구글에 검색을 해보니, android.location에서 제공하는 애들이 있더라. 근데 안드로이드 공식문서에서 얘보다 google playservice에서 제공하는 api가 훨씬 더 파워풀하니 그걸로 바꾸라고 한다. (as soon as possible 하게). 우선 google playservice를 가져다 쓰려면 third party를 가져다 쓰는 것 부터 하자. https://developers.google.com/android/guides/setup 요기서 보면서 하셈.compile 'com.google.android.gms:play-services:11.4.2' compile 'com.google.android.gms:play-services-location:11...
안드로이드 Action bar (App bar, Tool bar 라고도 하는 바로 그것!)의 Style을 어떻게 세팅하면 좋을까? 크나큰 삽질 끝에 정리를 해보자. 목표는 여러가지가 있다. 1. Action bar의 왼쪽 아이콘의 크기를 조절해서, Title과 사이즈가 좀 맞게 끔 한다.2. Action bar의 오른쪽 버튼, 아이콘, 텍스트의 크기를 조절한다.3. Action bar의 배경 색을 바꾼다. 근데 중요한건 내가 애초에 Action bar를 만들때, xml에 toolbar를 선언해서 만들지 않고, Activity의 Style에 Action bar를 가지는 Style로 설정을 해서 코딩을 했다는 것. Java 코드가 더러워지고 뭔가 많아지는게 싫기 때문에, xml 코드에서 다 해결할 예정임. ..
http://kunny.github.io/life/2016/06/06/dagger2_resources/ 요기에 Jake Wharton 형님이 발표하신거 나오니까 고거 참고. Dagger2 왜 하냐? New 없앨라고 한다. 안에 내용 이해하려면 골치 아픔.Dependency Inspection을 하기 위해선데, 이게 뭔지 알아야하고, 이걸 왜 하냐면패턴 중에 Inversion Of Control 패턴 적용 시 사용됨. http://www.kmshack.kr/2017/06/dagger-2-소개-안드로이드에서-dependency-injection-사용하기전에/자세한 건 여기에. https://blog.mindorks.com/introduction-to-dagger-2-using-dependency-inject..