IT/Android

[Android] NotFoundException: Resource is not a Drawable (color or path):

pandada 2019. 8. 3. 21:40
반응형

 

 

 

NotFoundException: Resource  

 

 

is not a Drawable (color or path):

 

 

 

안녕하세요. 오늘도 역시 안드로이드 에러 사항에 대해서 말씀을 드리도록 하겠습니다.

 

 

 

일단 오늘 제가 발견한 오류는 무엇일까요?! 

 

 

NotFoundException: Resource  is not a Drawable 

 

 

이거입니다. 아마 안드로이드 개발을 많이 해보신 분들이라면 그렇게 생소하지 않으시겠지만

 

아마 처음 보신 분들도 있으실 것이라고 생각합니다.

 

일단 이 에러같은 경우에는 첫 번째가 아닌 아랫부분에 에러가 표기되어 있습니다.

 

상단부분에서 에러 내용을 찾아서 수정하시려고 하면좀 힘드실 것이라고 생각이 되네요.

 

그럼 이제 에러 내용을 확인해 보도록 하겠습니다. 

 

 

< 전체 에러 내용>

 

일단 제 소스에서 발견된 에러 사항 전체 입니다. 그럼에러사항을 Text식으로 해서 어디가 에러고 

 

어디 부분이 잘못 되었는지 한번 봐보도록 하겠습니다.

 

참고로 파란색으로 막아둔 부분은 제 앱의 패키지명과 기타 등록된 사항이 있기 때문에

 

제가 파란색으로 표기를 해둔 부분입니다.

 

E/AndroidRuntime: FATAL EXCEPTION: main

    Process: 패키지명, PID: 16204

    java.lang.RuntimeException: Unable to start activity ComponentInfo{패키지명.MainActivity}: android.view.InflateException: Binary XML file line #54: Error inflating class Button

        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2790)

        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2855)

        at android.app.ActivityThread.access$900(ActivityThread.java:181)

        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1474)

        at android.os.Handler.dispatchMessage(Handler.java:102)

        at android.os.Looper.loop(Looper.java:145)

        at android.app.ActivityThread.main(ActivityThread.java:6117)

        at java.lang.reflect.Method.invoke(Native Method)

        at java.lang.reflect.Method.invoke(Method.java:372)

        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)

        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

     Caused by: android.view.InflateException: Binary XML file line #54: Error inflating class Button

        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:770)

        at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)

        at android.view.LayoutInflater.rInflate(LayoutInflater.java:821)

        at android.view.LayoutInflater.inflate(LayoutInflater.java:511)

        at android.view.LayoutInflater.inflate(LayoutInflater.java:415)

        at android.view.LayoutInflater.inflate(LayoutInflater.java:366)

        at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287)

        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)

        at 패키지명.MainActivity.onCreate(MainActivity.java:63)

        at android.app.Activity.performCreate(Activity.java:6374)

        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)

        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2743)

        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2855) 

        at android.app.ActivityThread.access$900(ActivityThread.java:181) 

        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1474) 

        at android.os.Handler.dispatchMessage(Handler.java:102) 

        at android.os.Looper.loop(Looper.java:145) 

        at android.app.ActivityThread.main(ActivityThread.java:6117) 

        at java.lang.reflect.Method.invoke(Native Method) 

        at java.lang.reflect.Method.invoke(Method.java:372) 

        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 

        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

     Caused by: android.content.res.Resources$NotFoundException: Resource "패키지명:drawable/round" (7f06006d)  is not a Drawable (color or path): TypedValue{t=0x1/d=0x7f06006d a=-1 r=0x7f06006d}

        at android.content.res.Resources.loadDrawableForCookie(Resources.java:3739)

        at android.content.res.Resources.loadDrawable(Resources.java:3651)

        at android.content.res.TypedArray.getDrawable(TypedArray.java:762)

        at android.view.View.<init>(View.java:4003)

        at android.widget.TextView.<init>(TextView.java:1024)

        at android.widget.Button.<init>(Button.java:115)

        at android.widget.Button.<init>(Button.java:108)

        at android.support.v7.widget.AppCompatButton.<init>(AppCompatButton.java:71)

        at android.support.v7.widget.AppCompatButton.<init>(AppCompatButton.java:67)

        at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:109)

        at android.support.v7.app.AppCompatDelegateImplV9.createView(AppCompatDelegateImplV9.java:1024)

        at android.support.v7.app.AppCompatDelegateImplV9.onCreateView(AppCompatDelegateImplV9.java:1081)

        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:732)

        at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 

        at android.view.LayoutInflater.rInflate(LayoutInflater.java:821) 

        at android.view.LayoutInflater.inflate(LayoutInflater.java:511) 

        at android.view.LayoutInflater.inflate(LayoutInflater.java:415) 

        at android.view.LayoutInflater.inflate(LayoutInflater.java:366) 

        at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287) 

        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) 

        at 패키지명.MainActivity.onCreate(MainActivity.java:63) 

        at android.app.Activity.performCreate(Activity.java:6374) 

        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 

        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2743) 

        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2855) 

        at android.app.ActivityThread.access$900(ActivityThread.java:181) 

        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1474) 

        at android.os.Handler.dispatchMessage(Handler.java:102) 

        at android.os.Looper.loop(Looper.java:145) 

        at android.app.ActivityThread.main(ActivityThread.java:6117) 

        at java.lang.reflect.Method.invoke(Native Method) 

        at java.lang.reflect.Method.invoke(Method.java:372) 

        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 

        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

I/Process: Sending signal. PID: 16204 SIG: 9

Application terminated.

 

에러코드가 너무 길다고 당황하지 마세요. 처음 개발하시는 분들이 가장

 

흔하게 실수하는 부분이 너무 길잖아. 어디를 봐야되는거야. 이렇기 때문에 당황하지 마세요!!

 

여기서 딱 포인트는 제가 빨간색으로 표기한 부분만 보시면 됩니다.

 

그럼 에러에 대한 내용을 금방 찾으실 수 있을 것이라고 생각합니다.

 

에러 코드 내용에서 딱 보시면 3가지만 보시면 되요.

 

일단 첫 번째 빨간 줄의 에러 내용부터 확인을 해보도록 하겠습니다.

 


android.view.InflateException: Binary XML file line #54: Error inflating class Button

 

바로 이거입니다. 이 부분의 에러는

 

XML 파일의 54번째 줄에서 에러가 발생한다고 알려주는 겁니다.

 

이 글을 보시는 분들의 xml 라인 줄의 위치는 당연히 서로 상이하겠죠?!

 



at 패키지명.MainActivity.onCreate(MainActivity.java:63)

 

이부분은 이제 실질적으로 어디서 에러가 나타나는지 보여줍니다.

 

처음 실행시의 onCreate 할때 문제가 생기고 있어요.


 

 

 


Resource  is not a Drawable (color or path): 

 

그리고 이게 오늘 저희가 해결해야할 에러사항의 메인 에러 코드입니다.

 

Drawable을 할 수가 없다고 알려주고있어요.

 

즉, 뿌려주고 그려줄 수가 없다고 얘기를 하는 부분이죠. 


 

 

자 그럼 종합해보면

 

1. Drawable이 안된다.

 

2. Drawable이 안되니까 oncreate 자체를 할 수가 없다.

 

이렇게 보시면 됩니다. 그럼 결론으로 xml코드에서 drawable이 문제인데

 

그부분을 해결해 보면 되겠네요. 해결법은 아주 간단합니다.

 

이 증상은 핸드폰의 API가 조금 낮은 핸드폰에서 발생하는 에러인데요.

 

제가 테스트했을때는 그랬습니다.

 

즉, "출시된지 조금 오래된 폰에서 그런 현상이 발견된다." 라고 보시면 될 것같습니다.

 

일단 해결법을 알려드리자면

 

Drawable 도 버전별로 나눠져있다고 생각하시면 편할것 같습니다.

 

저는 전문가가 아니라서 일단은 그렇게 생각을 하고 넘어갔는데요.

( 전문적인 Android 개발자가 아닌 그냥 전체적으로 하는 사람이라...)

 

Drawable에서 커스텀으로 만든 xml 파일을 사용할때 문제가 발생했는데.

 

이거는 어떻게 해결하나? 바로 매우 쉽게 해결을 할 수 있습니다.

 

 

< Project 목록으로 탐색기 변경 >

 

일단 목록을 Project로 바꿔주시면 됩니다. 그리고 당연히 Drawable 디렉토리를 찾아줘야겠죠?

 

그쪽에서 에러가 발생이되었으니까요.

 

 

 

< drawable 표기 화면 >

 

자 해결법의 마지막입니다. 다들 목록을 보시면 아마 대부분의 파일들이 

 

drawable-v24에 들어가있는 것을 보실 수 있을 겁니다.

 

즉, 여기에 있는 것을 못가져 온다고 보시면 되는데 매우 간단한 해결법으로

 

불러오는데 문제가 생긴 xml파일을 drawable 디렉토리로 복사해서 붙여넣어 주시면 끝납니다.

 

즉, 특정 버전에서만 보이게 적용시키는 것이 아닌 전체 버전에서도 보여주게

 

최상위 폴더에 넣어준다고 생각하시면 편할 것 같습니다.

 

매우 간단하죠?! 위의 사진은 저의 코드에서 문제가 생긴 round.xml 파일을

 

drawable-v.24에도 넣고 drawable에도 넣은 사진입니다.

( 앱의 용량을 위해서는 v.24에 있는 내용은 삭제 해주시는 것이 좋습니다. )

 

이렇게 하니 에러코드가 사라졌습니다.

 

만약에 위의 사항대로 했는데 안되면 댓글 남겨주세요.

 

그러면 최대한 도움이 될 수 있도록 노력해보겠습니다.

 

( 참고로 위 내용 Menifest에서 해결하시려고 해도 잘 안되실 겁니다. )

 

그럼 오늘 하루도 좋은 하루 보내시길 바라겠습니다!!

 

 

 

 

 

반응형