본문 바로가기
반응형

debug6

WindowManager$BadTokenException 대응하기 Firebase의 CrashLytics에서 BadTokenException리포트를 받은 적이 있는데요. 오늘은 해당 Exception에 대해서 분석하고 대응해 보도록 하겠습니다. 1. 실제로 받은 BadTokenException 실제로 받아보았던 BadTokenException은 아래와 같은데요. 먼저 가운데에 at android.os.Handler.dispatchMessage(Handler.java:102)를 통해서, Handler객체가 Toast를 보여줄려고 했었다는 것을 알 수 있습니다. Toast를 보여주려고 하면서, view를 윈도우매니저에 add 하려고 하는데요. setView를 viewRoot에 하려고 하다가 BadTokenException을 받게 된 것이지요. 힌트를 더욱 얻기 위해서, E.. 2020. 2. 6.
ArrayIndexOutOfBoundsException과 ViewHolder의 getAdapterPosition사용 RecyclerView를 이용해서, list상의 아이템 중 하나를 유저가 클릭한 경우, 해당 View의 position을 알아오기 위해, ViewHolder에서 getAdapterPosition을 사용하는 경우가 있습니다. 이런 경우에 ArrayIndexOutOfBoundsException이 발생하는 경우가 있는데요. 오늘은 이것의 원인과 대응 방법을 정리해 보도록 하겠습니다. 1. ArrayIndexOutOfBoundsException의 원인 ViewHolder에서 getAdapterPostion()메소드를 호출 한 경우, 디폴트 값은 "RecyclerView.NO_POSITION"인데요. 이 값이 바로 "-1"입니다. getAdapterPosition메소드는, 아이템이 있을 경우에만 해당하는 posi.. 2019. 10. 18.
APK 빌드 시 Lint found fatal errors 에러가 발생할 경우의 대응 테스트가 끝나고 Release빌드를 만들기 위해서, Signed APK를 빌드하다가 Lint found fatal errors를 만나는 경우가 있습니다. 오늘 글에서는 이 에러가 발생하는 경우의 대응 방법에 대해서 정리해 보도록 하겠습니다. 1. Lint Found Fatal Error 안드로이드 스튜디오는 Lint라는 코드 스캔 도구를 이용해서, 빌드시에 코드의 문제들을 찾아내 주는데요. 이 때 Fatal Error가 나는 경우가 있습니다. 이 때는 build리포트를 통해서 상세하게 해당내용을 알려주기 때문에 대응하기도 쉬운편인데요. 한가지 문제는 이 에러가 발생한 원인에 대한 Report를 어디서 찾느냐 인데요. 그것은 아래에서 보도록 하겠습니다. 2. Build Report 의 위치 lint가 찾아.. 2019. 10. 6.
멀티덱스 적용없이 디버그를 위한 Proguard(프로가드) 설정 방법 안드로이드의 여러 라이브러리를 사용하다보면, 단순히 디버깅을 위해 앱을 빌드할 때 조차도, 메소드 카운트가 6.5K를 넘기는 경우가 발생하게 되는데요. 이때 안드로이드 스튜디오가 알려주는데로 무심코 MultiDex를 사용하는 것 보다는, 디버깅할 때에도 사용하지 않는 메소드를 줄여주는 minify과정을 통해서 Multidex를 사용하지 않도록 해야하는 것을 먼저 시도해 보아야 합니다. 그렇게 해도 해결이 않될정도로 앱이 거대하고 큰 규모라면 Multidex를 사용해야 할 테구요. 문제는 minify(리소스를 축소)를 하는 과정에서 난독화도 같이 하게 되면서 테스트를 위한 빌드를 하는데도 엄청난 시간이 걸릴 수 있는 것 인데요. 이는 개발동기 저하와 생산성하락으로 이어질 테구요. 오늘은 이를 어떻게 해결해.. 2019. 7. 26.
Firebase의 CrashLytics를 Slack과 연동해서 알림받기 Crash가 발생할 때 가장 중요한 것은 빠르게 알림을 받는 것인데요. 이메일을 통해서도 알람을 받지만, Slack과 같은 메신저를 통해서 하나의 채널에서만 모아서 받는 다면, 관리하기도 더욱 좋아질텐데요. 오늘은 이 방법에 대해서 정리해 보도록 하겠습니다. 참고로 CrashLytics가 Fabric에서 Firebase로 이사가게 됩니다. 2020년초까지는 계속 Fabric으로 지원을 한다고 하지만, 지금부터 만드는 앱에서는 Firebase기준으로 하는 것이 좋겠지요. 이 글도, Firebase의 CrashLytics를 Slack과 연동하는 방법에 대해서 정리해 보도록 하겠습니다. 1. Firebase 콘솔에서 설정 Firebase의 콘솔에서 좌측상단의 설정> 통합에 들어가면 아래와 같이 Slack과 연.. 2019. 5. 23.
Facebook 이나 KakaoTalk연동위한 HashKey 생성하기 카카오톡이나 페이스북을 연동시에는 모두 HashKey를 요구하는데요.크게 두가지 방법이 있습니다.CommandLine툴과 Java코드를 직접 돌려서 구하는 방법이 있는데요.이 중 Java코드로 앱내에서 값을 추출하는 방법에 대해서 정리해 보겠습니다. 1. 앱내에서 Java코드로 구하기 아래 코드를 이용하면, Java코드로 Hashkey를 생성할 수 있습니다.getPackageInfo메소드의 첫번째 인자로 앱의 실제 package명을 적어주는 부분만,해당앱의 패키지 명으로 수정해 주시면 됩니다. 2. Debug용과 Release용의 HashKey 한가지 주의할 점은,Release할 때에는, Release버전을 빌드시켜 나온 HashKey로 꼭 사용해야 한다는 것입니다.그렇지 않으면, 해당 카카오톡이나 fa.. 2017. 9. 28.