본문 바로가기

Android/Exceptions30

Duplicate class com.google.common.util.concurrent.ListenableFuture found in modules guava-20.0.jar (com.google.guava:guava:20.0) 앱을 빌드할때 Duplicate class ---- found in modules ---- 로 나타나는 메시지가 보여지며 빌드가 되지 않는 경우가 있습니다. Duplicate class 오류는 사용한 외부라이브러리에서 참고하는 하위 라이브러리들 중 버전이 다른 라이브러리가 존재 할때 발생합니다. 커맨드 라인에 gradlew app:dependencies 를 입력한 뒤 일일이 찾아내는 방법이 있는데, 자세한 내용은 나중에 다루도록 하겠습니다. 어쨌건, Guava 라이브러리는 구글의 코어라이브러리로, 여기저기서 많이 참고하는 라이브러리인데, 해당 오류가 뜨며 빌드가 되지 않아 이걸 도대체 어떻게 찾아야 되는지 헤멨습니다. Stack Overflow 등 여러 해외포럼에서도 살펴보니 제법 많은 개발자들이 오류로.. 2020. 4. 12.
Google SignIn Fails with code 10 앱 개발 중 구글계정 로그인 기능을 추가하는 작업을 하던 중 해당 오류가 뜨며 로그인이 되지 않는 경우를 확인했습니다. OAuth 2.0 을 이용하여 구글 로그인 기능을 추가하는 방법은 나중에 포스팅 하게 될텐데요. 우선 해당 Exception이 생기는 이유를 먼저 말씀드리면 구글 API 콘솔의 OAuth 2.0 클라이언트 ID를 추가하는 부분에 인증정보가 존재 하지 않기 때문입니다. 그렇다면, 저는 인증정보 등록조차 하지 않고 구글 로그인 기능을 추가했느냐 하면 그것은 아닙니다. 저는 해당 기능 추가 전에 API 콘솔에 SHA-1 인증키를 포함하여 인증정보를 추가했습니다. 원인은 앱에 관련된 SHA-1 인증서는 기본적으로 두개(Debug/Release)가 존재하기 때문입니다. 우리가 앱을 빌드하면 SH.. 2020. 4. 9.
Error running 'app': Default Activity not found Default Activity 가 지정되지 않아 해당 Exception이 생길 때도 있지만 코드에 문제가 없는데도 해당 오류가 뜰때가 있습니다. Clean Build나 Rebuild를 해도 문제가 해결되지 않아 찾아보니 Android Studio의 캐시 문제로 확인되었습니다. Android Studio의 메뉴에서 File>Invalidate Caches / Restart 를 눌러주면 안드로이드 스튜디오가 캐시를 삭제하며 재시작 된 후 해당 문제가 발생하지 않음을 확인했습니다. 2020. 4. 8.
java.lang.ClassCastException ClassCastException은 형변환(캐스팅)을 잘못했을때 발생하는 Exception입니다. 다른 Exception과는 다르게 해당 Exception이 발생할 경우의 LogCat을 보면 어떤 코드의 몇번째 라인에서 발생하였는지를 알려주지는 않지만 아래의 예와 같이 어떤 형변환이 잘못되었는지를 알려주게 됩니다. java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParams 해당 예는 LayoutParams를 잘못 적용했을때 발생한 Exception 입니다. 보통은 아래와 같이 잘못된 캐스팅을 하였을 경우에 발생합니다. Object ob.. 2020. 4. 4.
invalid drawable tag vector vector 방식의 drawable resource를 사용할 때, 특정 기기에서 다음과 같은 크래쉬 리포트가 발생하는 경우가 있습니다. Caused by org.xmlpull.v1.XmlPullParserException Binary XML file line #1: invalid drawable tag vector 해당 Exception의 해결방법은 아래와 같습니다. 1. app단위의 build.gradle의 defaultConfig에 vectorDrawables.useSupportLibrary = true 추가. defaultConfig { applicationId "com.something.some" minSdkVersion 19 targetSdkVersion 28 versionCode 1 versi.. 2020. 3. 20.
android.os.NetworkOnMainThreadException 안드로이드는 메인쓰레드에서 UI에 관한 처리를 하고 있습니다. 즉, 앱이 유저와 상호작용하는 모든 행동이 메인쓰레드를 통해서 이루어집니다. 버튼을 누르면 어떠한 정보를 네트워크로 동기화 하여 리사이클러뷰로 정리한 뒤 보여주는 앱이 있다고 가정해보면, 버튼을 누르고 > 네트워크로 정보를 다운로드 받고 > 리사이클러뷰에 다시 업데이트 하는 상기의 과정을 모두 메인 쓰레드에서 수행하게 된다면 버튼을 누르는 순간부터 작업이 완료될 때 까지마냥 기다려야 합니다. 그 시간동안 어떠한것도 할 수 없이 기다리게 된다면, 사용자에게는 최악의 경험이 된다고 할 수 있습니다. 따라서, 안드로이드 OS의 최우선 목표는, 앱 내부에서 이루어지는 모든 작업이 유저를 방해하지 않도록 하는것이며 따라서 시간이 오래 걸리는 작업은 메.. 2020. 3. 13.
Manifest merger failed : Attribute application@appComponentFactory build.gradle 파일에서 implementation 된 일부 구글 라이브러리들의 버전을 업데이트 해 준 뒤 해당 오류가 발생되며 빌드가 되지 않는 경우가 발생하였습니다. 제 경우에는 Firebase라이브러리 중 일부를 18.0.0으로, Crashlytics 라이브러리를 2.10.1로 업데이트 해준 뒤 발생하였는데요 빌드 시 오류의 내용은 아래와 같습니다. Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-.. 2019. 6. 28.
APK 빌드시 Lint found fatal errors while assembling - Android Studio에서 APK 파일을 빌드할 경우 Lint 에러가 발생하는 경우가 있습니다. 보통 에러 발생 메시지는 아래와 같습니다. Lint found fatal errors while assembling a release target. To proceed, either fix the issues identified by lint, or modify your build script as follows: android { lintOptions { checkReleaseBuilds false // Or, if you prefer, you can continue to check for errors in release builds, // but continue the build even when er.. 2019. 6. 19.
ad.loadClass에서 발생하는 ClassNotFoundException 앱에서 해당 Exeption을 뿜으며 앱이 종료되는 현상이 갑자기 많이 발생하였습니다. 해당 Crash는 아래와 유사합니다. Fatal Exception: java.lang.NoClassDefFoundError Failed resolution of: Lorg/apache/http/ProtocolVersion; Didn't find class "org.apache.http.ProtocolVersion" on path: DexPathList------ 이용자들은 아마 영문도 모르고 앱이 종료되는 현상을 겪고 있을겁니다. Apache Http 라이브러리가 가 Android 6.0 부터 삭제되었음에도 불구하고, 다른 라이브러리가 이것을 자꾸 요청하기 때문에 발생하는 문제입니다. 제 경우에는 Apache http.. 2019. 4. 3.
TextView 에서의 InflateException 발생 이번 업데이트에서 TextView에 fontFamily 속성 부여후 앱 배포를 했는데, android:fontFamily="sans-serif-light" 상기와 같이 xml에 직접적으로 폰트속성을 설정해준 곳에서는 발생하지 않고 android:theme="@style/textTheme" 와 같이 테마로 설정해준 곳에서만 발생하는데, 일부 기기에서 InflateException이 계속 발생하여 원인을 계속 찾았습니다. 그런데 이것이 해당되는 모든 레이아웃에서 발생하는것이 아니고, 일부 특정 레이아웃에서만 계속 발생하였기 때문에 원인이 무엇인지 알 수 가 없었습니다. 찾아보니, 해당이슈는 api 버전 26 이하의 기기에서 간헐적으로 발생하는 OS 자체의 버그이며, 안드로이드 O 버전 에서는 픽스되었다고 합.. 2019. 4. 2.