2016-07-10 4 views
3

Android v4.1.2 (API 16)에서 내 앱을 실행하려고하면 매우 이상한 충돌이 발생합니다. 내가 나이가 전화를 타고 다음 오류 :AppCompat, Vectors 및 4.1.2의 이상한 충돌

07-10 16:15:52.188 5496-5496/com.amplified.music.debug E/AndroidRuntime: FATAL EXCEPTION: main 
     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.amplified.music.debug/com.amplified.music.activity.MainActivity}: android.view.InflateException: Binary XML file line #21: Error inflating class ImageButton 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 
      at android.app.ActivityThread.access$700(ActivityThread.java:143) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4950) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771) 
      at dalvik.system.NativeStart.main(Native Method) 
     Caused by: android.view.InflateException: Binary XML file line #21: Error inflating class ImageButton 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:749) 
      at android.view.LayoutInflater.parseInclude(LayoutInflater.java:830) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:736) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
      at com.amplified.music.fragment.PlayerFragment.onCreateView(PlayerFragment.java:233) 
      at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1036) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1230) 
      at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1332) 
      at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2288) 
      at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:120) 
      at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:356) 
      at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:31) 
      at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:79) 
      at roboguice.activity.RoboFragmentActivity.onCreateView(RoboFragmentActivity.java:163) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
      at android.view.LayoutInflater.parseInclude(LayoutInflater.java:830) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:736) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
      at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280) 
      at com.amplified.music.activity.RoboAppCompatActivity.setContentView(RoboAppCompatActivity.java:55) 
      at com.amplified.music.activity.MainActivity.onAuthenticatedCustomer(MainActivity.java:87) 
      at com.amplified.music.activity.MusicActivity.onCreate(MusicActivity.java:72) 
      at android.app.Activity.performCreate(Activity.java:5179) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)  
      at android.app.ActivityThread.access$700(ActivityThread.java:143)  
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)  
      at android.os.Handler.dispatchMessage(Handler.java:99)  
      at android.os.Looper.loop(Looper.java:137)  
      at android.app.ActivityThread.main(ActivityThread.java:4950)  
      at java.lang.reflect.Method.invokeNative(Native Method)  
      at java.lang.reflect.Method.invoke(Method.java:511)  
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)  
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)  
      at dalvik.system.NativeStart.main(Native Method)  
     Caused by: java.lang.NumberFormatException: Invalid int: "res/color/abc_primary_text_material_dark.xml" 
      at java.lang.Integer.invalidInt(Integer.java:138) 
      at java.lang.Integer.parse(Integer.java:375) 
      at java.lang.Integer.parseInt(Integer.java:366) 
      at com.android.internal.util.XmlUtils.convertValueToInt(XmlUtils.java:123) 
      at android.content.res.TypedArray.getInt(TypedArray.java:254) 

나는 vectorDrawables.useSupportLibrary = true 설정으로 벡터를 사용하고 내 Gradle을 빌드 파일에 설정. 나는 다음과 같은 코드를 사용하여 내 이미지 말하는 겁니다 :

<ImageButton android:id="@+id/playQueueButton" 
     android:layout_marginRight="20dp" 
     android:layout_marginEnd="20dp" 
     android:layout_height="48dp" 
     android:layout_width="48dp" 
     style="@style/AppTheme.Button.Flat.Inverse" 
     app:srcCompat="@drawable/ic_queue_music_black_24dp"/> 

내 스타일이 다음과 같이 정의된다 :

<style name="AppTheme.Button.Flat" parent="Widget.AppCompat.Button.Borderless"> 
    <item name="android:layout_margin">0dp</item> 
    <item name="android:tint">?android:textColorPrimary</item> 
    <item name="android:textColor">?android:textColorPrimary</item> 
</style> 

<style name="AppTheme.Button.Flat.Inverse" parent="AppTheme.Button.Flat"> 
    <item name="android:tint">?android:textColorPrimaryInverse</item> 
    <item name="android:textColor">?android:textColorPrimaryInverse</item> 
    <item name="android:background">@drawable/home_button_selector</item> 
</style> 

내가이 오류에 대해 온라인으로 어떤 정보를 찾을 수 없습니다. 나는 왜 그것이 부서지는 지 잘 모르겠다.

+0

것 같습니다. 안드로이드는 특정 API 버전에서 svgs를 파싱하는 데 문제가있는 것 같습니다 : http://stackoverflow.com/questions/27561170/vectordrawable-causes-numberformatexception and https://code.google.com/p/android/issues/detail ? id = 202670. SO 게시물 및 Google 코드 문제에서 설명 된 솔루션이 도움이되는지 확인할 수 있습니까? –

+0

사실 앱 호환성 (App Compat) 스타일에서 뭔가 명확하게 문제가 있습니다. 내가 포함하지 않은 한 가지는 AppCompat 스타일을 상속받지 않은 이전 스타일을 리팩터링 한 것입니다. API 16에서 작동했습니다. 예, NumberFormatException이지만 구문 분석하려고하는 내용을 확인합니다. SDK가 적절한 정수로 대체하지 않은 이유는 무엇입니까? 나는 실제로 대답을 알고있다. – chubbsondubs

+0

잘자요. 정보 및 색상 리소스를 구문 분석하는 동안 오류 아웃에 대해 좋은 지적 주셔서 감사. –

답변

1

@chubbsondubs는 5.0 이상의 드로어 블에만 색조를 적용 할 수있는 것 같습니다. 여기에 문서 [공식 안드로이드 문서]의

근본 원인이 NumberFormatException이처럼 [1] https://developer.android.com/training/material/drawables.html

+0

그런 소리가 결국에는 문제일지도 모르지만 플랫폼은 그것을 사용하는 것에 대해 결코 불평하지 않았습니다. 일반적으로 내 minSDK Android Studio에서 지원되지 않는 API, 속성 등을 사용하려고하면 불만이 제기됩니다. 이 경우 결코 불평하지 않았습니다. – chubbsondubs

+0

정답이라고 생각하시면 동의하십시오. – Akshay

0

그래서 안드로이드가이 오류를 던지는 이유를 결코 알지 못했습니다. 모든 SDK 도구가 @color 참조를 R 클래스의 적절한 정수로 대체해야합니다. 도대체 무슨 일이 일어나고있는거야?

스타일에서 tint 속성을 사용하는 것이 마음에 들지 않았습니다. 색조를 제거하고 내 벡터 drawable을 올바른 색상의 비올라가있는 벡터로 바꾼 경우 효과가있었습니다. 따라서 색조가 API 16에서 지원되는지 여부를 알아내는 것은 어려웠지만 색조가 부분적으로 "지원"되었지만 API 16에서는 완전히 들리지는 않았지만 소리가 들렸습니다.

이전에 색조 속성을 사용하고 있었고 작동하고있었습니다. 하지만 그 AppCompat 스타일을 상속하지 않았습니다. 이 문제는 tint + AppCompat를 사용했을 때만 발생했습니다. 따라서 이것은 AppCompat + tint 속성과 일반적으로 tint 속성 사이의 문제입니다.

+0

질문, 벡터 드로잉의 색조를 변경할 때 VectorCompat을 사용하여 드로어 블을로드하고 있습니까? ttint를 적용하기 위해 코드에서 svgs를 수동으로로드하려고한다면 VectorCompat를 사용해야합니다. – Akshay

+0

이러한 벡터는 XML에서 app : srcCompat 속성을 사용하여 참조되었습니다. – chubbsondubs

+0

내 대답을 참조하십시오. 문서 당 drawables (비트 맵, 벡터 등) 5.x 이상에서만 색조를 적용 할 수 있습니다. – Akshay