IDE & Framework/Android

    [짧] FCM을 통해 앱 삭제여부 확인

    [짧] FCM을 통해 앱 삭제여부 확인

    https://medium.com/박상권의-삽질블로그/앱-삭제-측정-방법-나는-네가-어제-앱을-삭제-했다는것을-알고-있다-653bc7872cb6 [앱 삭제 측정 방법]나는 네가 어제 앱을 삭제 했다는것을 알고 있다 앱 설치율도 중요하지만, 앱 삭제율도 중요합니다. 사용자가 앱을 지웠는지 어떻게 알 수 있을까요? Android/iOS 모두 적용되는 ,사용자가 앱을 삭제한것을 측정하는 방법에 대해 공유합니다. medium.com 앱 삭제여부 판별이 필요했었는데, 상권 개발자님 덕분에 쉽게 해결하게 되었네요. 브로드캐스트 리시버를 통해 앱 삭제 동작을 알 수는 있는데, 본인이 삭제되는거면 받질 못하더라구요 ㅎ

    Permission 처리를 좀 더 쉽게 하려면? TedPermission!

    시연용 앱을 전에 제작하다가, 권한 분류랑 관리도 제대로 안해놓고 대충 다 선언해 놨더라구요... 급하게 고쳐야해서 보는데 권한쪽을 수정해야하는데 너무 스트뤠스... 그떄 정말 도움 많이 받았습니다... 쓰기 쉽고 명확한 박상권 개발자님의 ted permission 사용해 보세요! https://greensky0026.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F TISTORY 나를 표현하는 블로그를 만들어보세요. www.tistory.com

    [Kotlin] doze모드 방지, 절전모드 방지 하도록 요청하기

    [Kotlin] doze모드 방지, 절전모드 방지 하도록 요청하기

    Doze and Stanby public reference https://developer.android.com/training/monitoring-device-state/doze-standby?hl=ko 잠자기 및 앱 대기 모드에 맞게 최적화 | Android 개발자 | Android Developers 앱에서 Android 6.0의 절전 기능을 테스트하고 최적화합니다. developer.android.com 절전모드로 진입하게 된다면, 아래와같은 제한사항이 생긴다. FCM을 사용해 주기적으로 활성화 시키는 방법도 있지만, 앱단에서 해결할 수 있는 방법은 아래의 코드와 같다. 제한사항 네트워크 엑세스 정지 wake lock 무시 유지보수 기간 지연 동기화 어댑터 실행 X JobScheduler 실행 X..

    [짧] Android aar에 application proguard 규칙 적용시키기

    프로젝트 내부 모듈을 만들어서 작업한 경우엔 특이사항 없이 proguardFiles를 사용하면 되는데, aar의 경우 난독화를 사용헤 apk를 말아버리면, aar 소스를 apk에서 거의 못찾게 되버린다. 그래서 이게 규칙대로 적용이 됬나, 안됬나를 판단하기가 힘들어 찾아보았다. aar에 특정 프로가드 규칙을 적용시키고 싶다면, proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 대신 consumerProguardFile 'proguard-rules.pro' 를 사용하면 해당 규칙이 aar 소스까지 적용되어 난독화가 되게 된다. 물론 프로가드 규칙이 별도로 존재하지 않는다면, 애초에 해당 라인을 입력할 필요가 ..

    [Kotlin] Android Room Database 기본 예제

    [Kotlin] Android Room Database 기본 예제

    저번에 SQLite 포스팅을 해놓고 Room database는 빼먹었더라구요. ㅎㅎ; 그래서 늦게나마 포스팅 해 보겠습니다. 아래 코드 예제는 인강을 들으면서 작성한 코드입니다. [전체 코드 보기] https://github.com/gr2nsky/fastCampus/tree/main/basic/calculator GitHub - gr2nsky/fastCampus Contribute to gr2nsky/fastCampus development by creating an account on GitHub. github.com room이란? 스마트폰에 내장된 DB에 데이터를 저장하기 위해 사용하는 ORM 라이브러리 입니다. room은 내부적으로 sqlite를 사용하지만, 이를 자바나 코틀린으로 매핑해 접근성과 ..

    [Kotlin]Android Firebase Cloud Message(FCM) - (1) Client

    [Kotlin]Android Firebase Cloud Message(FCM) - (1) Client

    이번 포스팅에서는 FCM을 사용하기 위한 Client 구현에 대해서 포스팅 해 보겠습니다. 1. FCM이란? Firebase Cloud Message의 약자로, 다양한 플렛폼에 메세지를 전송할 수 있는 메세징 솔루션입니다. 일부 기능을 위해선 유료로 이용해야 하지만, 대부분의 경우는 무료로 해결할 수 있습니다. Firebase에서 미들서버 역활을 하는데, 메세징 솔루션까지 제공하므로 개발자들은 서버를 직접 구축할 필요 없이 매우 편리하게 메세징 서비스를 구축할 수 있다는 장점이 있습니다. 거기에 애널리틱스를 통한 분석기능까지 동시에 사용할 수 있으니, Android application 개발에선 빠질 수 없는 요소이죠. 2. FCM 적용하기 2-0. Firebase console 설정 Firebase c..

    Android Log 라이브러리 Timber

    Android Log 라이브러리 Timber

    Kotlin으로 Log를 사용하면 [ Using 'Log' instead of 'Timbe' ]라는 문구를 확인할 수 있습니다. Timber는 다음의 장점이 있습니다. 1. 태그를 별도로 입력할 필요가 없다. 2. 릴리즈때 로그를 출력하지 않는다. 3. 충돌보고 라이브러리와 통합이 쉽다 사용법 app level gradle에 의존성을 추가 repositories { mavenCentral() } dependencies { implementation 'com.jakewharton.timber:timber:5.0.1' } 초기화 Application 클래스의 omCreate()에 다음과 같이 입력합니다. *Application 클래스를 상속받는 클래스를 생성해 Manifest의 application 태그의 ..

    Android Log 라이브러리 Logger

    Android Log 라이브러리 Logger

    Logger란? Timber보다 가시성있고 이쁘게(?) 출력되는 로그 라이브러리 Logger입니다. 언제부턴가 코틀린으로 Log를 사용하다보면 Timber를 대신 쓰라고 메세지가 나와서, 다른 로깅 라이브러리가 있나 싶어 찾다 찾게 되었네요. 15년도부터 18년도까지 버전 릴리즈를 해왔고, androidx 지원을 위해 21년 2월까지 수정한 라이브러리입니다. timber보단 신뢰성이 높다고 할 순 없지만, 일단 비주얼이 굉장히 마음에 들어서 포스팅 해 봅니다. xml과 json 형식도 지원해주고 콜렉션 타입의 객체도 지원해 줘서 정말 편하기까지 합니다. 사용법도 정말 간단합니다. 사용법 의존성 추가 dependencies{ implementation 'com.orhanobut:logger:2.2.0' }..

    Android Proguard

    Android Proguard

    현재 라이브러리를 개발중에 있습니다. 공개 범위의 코드를 제외하고 소스노출의 최소화와 aar파일의 용량을 줄이기 위해서 프로가드를 사용하게 되었습니다. 적용하기위해 사용한 코드와 공부내용 포스팅 해보겠습니다. 1. Proguard란? 수행시기 - 릴리즈시 역할 1. 코드 난독화 2. 패키지 경량화 2. 사용하기 app level gradle 파일의 buildTypes태그에 다음과 같이 입력합니다. buildTypes { debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { minifyEnabled true proguardFiles getDe..

    [Kotlin] PhoneStateListener deprecated, TelephonyCallback로 대체하기

    [Kotlin] PhoneStateListener deprecated, TelephonyCallback로 대체하기

    Android12로 들어서며 PhoneStateListener가 deprecated 되었습니다. 이를 TelephonyCallbck으로 대체해야 합니다. private val mPhoneStateListener = object : PhoneStateListener(){ override fun onCallStateChanged(state: Int, phoneNumber: String?) { super.onCallStateChanged(state, phoneNumber) Log.d(TAG, "onCallStateChanged is listen changed state : $state") callStateIntent = Intent(applicationContext, CallHandleService::clas..

    [Kotlin] RecyclerView (3) - ItemTouchHelper로 Swipe event 구현

    [Kotlin] RecyclerView (3) - ItemTouchHelper로 Swipe event 구현

    RecyclerView 마지막 포스팅입니다. 왼쪽에서 오른쪽으로 스와이프를 하면 통화를, 반대로 오른쪽에서 왼쪽으로 스와이프를 하면 메세지 전송이 되도록 해보겠습니다. 필요한 과정 1. item_phonebook.xml 수정 2. ItemTouchHelper.callback 구현 ㄱ. 필수 메서드 구현 ㄴ. 보조 메서드 구현 3. Adapter에 ItemTouchHelper.callback 부착 구현 1. item_phonebook.xml 수정 이제 두가지의 레이아웃이 필요합니다. 스와이프 시킬 레이아웃은 이름과 전화번호부가 적혀있는 화면이구요, 스와이프 되면 이제 양 사이드에 문자 아이콘과 전화 아이콘이 있어야겠죠? 아이템 배치는 해주었고, 이것도 리스트 아이템이니 리스트 아이템 하나하나 마다 존재해야..

    [Kotlin] RecyclerView (2) - Filter와 SerachView로 검색기능 구현

    [Kotlin] RecyclerView (2) - Filter와 SerachView로 검색기능 구현

    RecyclerView 시리즈의 두번째 포스팅입니다. 이번엔 SerachView, Filterable 위젯을 사용해 검색기능을 구현해 보겠습니다. SerachView는 커스텀하기가 쉽지 않아 EditText로 직접 구현하는 경우도 굉장히 많습니다. 하지만 공식문서를 찾아보시면 생각보다 많은 속성이 있으니, 필요에 따라 쓰시면 되겠습니다. 정리가 잘 된 블로그가 있어서 링크 공유드립니다. https://landroid.tistory.com/5 SearchView, 속성 사용법 안녕하세요! Landroid입니다~! 보통 안드로이드에서 검색 기능을 구현할 때 많이들 사용하시는데요. 의외로 자료가 많이 없어 구현하는데 애를 먹는 뷰이기도 합니다. 그래서 오늘은 SearchView 사용 landroid.tisto..

    [Kotlin] ViewPager2 사용하기

    [Kotlin] ViewPager2 사용하기

    ViewPager는 RecyclerView adpater를 사용해 상당히 쉽게 구현할 수 있습니다. 이번 포스팅은 ViewPager를 구현해 배열에 저장된 image들을 슬라이드 해보겠습니다. 필요한 재료 1. 이미지를 출력할 ViewPager 2. image를 출력할 방법을 표현한 layout 3. 배열에 저장할 image들 4. 배열의 출력을 관리할 RecyclerView 재료 구현 1. 이미지를 출력할 ViewPager 2. image를 출력할 방법을 표현한 layout 3. 배열에 저장할 image들 private fun getAespaMembers(): ArrayList { return arrayListOf( R.drawable.giselle, R.drawable.karina, R.drawabl..

    [Kotlin] RecyclerView (1) - 기본 예제

    [Kotlin] RecyclerView (1) - 기본 예제

    새 시리즈 포스팅입니다. 기본 에제 - 좌/우 스와이프로 삭제/통화 걸기 구현 - 검색 구현 - AAC MVVM적용 이렇게 총 네편으로 포스팅 할 예정입니다. RecyclerView란? ViewHolder 패턴을 사용해 아이템 뷰를 재활용하는 리스트입니다. 리스트의 아이템이 1억개가 있다고 해도, 아이템 뷰를 일정 갯수로 유지하며 값만 바꿔 보여주는 것이지요. 사용자의 입장에선 1억개가 다 세팅되어 있는것 같지만, 사실 사용하는 아이템뷰는 극히 적고, 값만 바뀌어서 재배치 되는거죠. 이를 통해 리스트의 규모가 클수록 사용자의 사용환경을 쾌적하게 만들어 주는데 굉장한 효과를 발휘합니다. 추가적으로, RecyclerView는 좌우 스와이프 및 검색을 위한 필터 등의 추가기능을 부착하기 굉장히 쉽습니다. 재료..

    Android Background Service 작업 제한

    Android Background Service 작업 제한

    0. 목차 Ⅰ. 개요 0. 서론 1. Service와 Thread의 차이 2. Service의 종류 3. Service의 제한 Ⅱ. Broadcast 제한 Ⅲ. Background 작업 제한 1. Background. 실행 제한 2. Backround에서 Activity 시작에 대한 제한 사항 Ⅰ. 개요 0. 서론 필연적으로 Background Service는 사용할 수 밖에 없습니다. 하지만, 이전과는 다르게 Android는 Background Service에는 호의적이지 않습니다. 업무와 관련되어서 자세히 찾아보게 되었고, 이를 공유하고자 정리해서 포스팅합니다. 1. Service와 Thread의 차이 Service란 Background에서 오래 실행되는 작업을 수행할 수 있는 Application ..

    [Kotlin]local properties에 변수 저장하기

    [Kotlin]local properties에 변수 저장하기

    Local properties에 변수를 왜 저장해야 하나요? 외부에 노출되면 안되는 중요한 자료들(인증받은 API Key, 메일을 보내기위한 메일계정 등)은 코드상에 하드코딩하게 되면 의도치않게 git으로 공유될 수가 있으므로, 이를 방지하기 위해 사용합니다. gitignore에는 local.propeties에 등록이 되어 있거든요. 기본으로 있다면 상관이 없지만, 만약 없다면 꼭 추가해 주세요 ㅎ Local properties에 변수를 저장하면 어떻게 되나요? Local properties에 변수를 저장하게 되면, app level gradle의 defaultConfig 태그 내에서 불러올 수 있습니다. 그렇게 되면, 프로젝트를 빌드할 때 BuildConfig 클래스에 해당 값이 추가되어 프로젝트에서 ..

    [Kotlin] Broadcast recevier란? 사용법과 예제

    [Kotlin] Broadcast recevier란? 사용법과 예제

    Broadcast recevier란? 말그대로 Broadcast를 받는 수신기라고 생각하시면 됩니다. Manifest에 수신기를 선언하거나, Context에 수신기를 구현하는 두가지 방법이 존재합니다. 안드로이드 백그라운드 정책 강화로 API 26부터 기존에 비해 수신기 구현이 어려워졌습니다. 수신대상의 패키지, 클래스명을 입력하는 명시적 브로드캐스트나, 몇가지의 암시적 브로드캐스트 예외(링크)를 제외하고는 모두 Context에 직접 수신기를 구현해야 합니다. - Manifest / Context 수신기 등록 차이 Manifest에 등록시 - 앱이 실행중이 아니여도 이벤트를 수신하고 작업을 처리할 수 있습니다. Context에 등록시 - 앱이 실행중이여야 이벤트를 수신하고 작업을 처리할 수 있습니다. 수..

    [Kotlin] Broadcast 란? 사용법과 예제

    [Kotlin] Broadcast 란? 사용법과 예제

    Broadcast란? Android Application이나 Android System에서 Publish-subscribe pattern처럼 이벤트를 송/수신 하는 컴포넌트입니다. 이벤트는 intent객체에 담겨서 발송되게 됩니다. Broadcast의 intent 뜯어보기 이벤트는 intent에 문자열로 담겨서 전송되며, 구조는 아래와 같습니다. //android.intent.action.PACKAGE_FULLY_REMOVED이벤트 broadcast의 intent Intent { act=android.intent.action.PACKAGE_FULLY_REMOVED dat=package:com.example.broadcasttestc flg=0x5000010 cmp=com.example.broadcastt..

    [Kotlin] RemoteConfig 적용하기 [간단]

    [Kotlin] RemoteConfig 적용하기 [간단]

    Remote config란, key-value쌍으로 이루어진 값을 Firebase Remote config에 등록하면, 몇줄의 간단한 코드로 app에서 가져오게 할 수 있는 기능입니다. 이를 이용해서 사용자의 업데이트 없이 앱의 동작과 뷰를 수정할수도 있고, A/B테스트를 수행하는 등, 굉장히 강력하지만, 손쉽게 사용할 수 있는 기능입니다. 해당 방법 또한 firebase에 적용하고 싶은 앱을 등록하고, application package에는 firebase project의 goole-service.json을 app수준 폴더에 위치시켜야 합니다. 해당 방법은 건너뛰겠습니다.\ 만약, 여러개의 firebase proejct를 하나의 앱에 등록하고 싶다면, firebase instance를 생성해 해당 co..

    [Kotlin] Firebase Crashlytics 적용시키기 (간단!)

    [Kotlin] Firebase Crashlytics 적용시키기 (간단!)

    Firebase Crashlytics는 전신이 Fabric Crashlytics이며, 실시간 비정상 종료 보고 도구입니다. 이를 처리하기 쉽게 목록으로 종합해 정보를 제공하고, 비정상 종료의 심각도와 발생률또한 보여줍니다. 최대의 장점은 부착하기 쉽고, 제어가 간편하다는 점입니다. ANR이나 crash로 인해 앱이 종료된 후, 다시 실행시켰을 때 fb crashlytics로 해당 에러를 전송해줍니다. 주의점은, Firebase의 여타 컴포넌트들과 달리, FirebaseApp으로 Instance생성이 불가능하다는 점입니다. https://firebase.google.com/docs/crashlytics Firebase Crashlytics | Firebase Documentation Apple, Andro..