Binary XML file line #2: Error inflating class <unknown>
阿新 • • 發佈:2021-01-29
1.背景
之前一直用的8.0版本模擬器沒啥問題,偶然間切換到了android 6.0 版本的模擬器,發現我的應用崩了。
2.錯誤堆疊
01-26 02:26:28.670 3682-3682/pers.hl.library.debug E/AndroidRuntime: FATAL EXCEPTION: main Process: pers.hl.library.debug, PID: 3682 java.lang.RuntimeException: Unable to start activity ComponentInfo{pers.hl.library.debug/pers.hl.module_login.LoginActivity}: java.lang.reflect.InvocationTargetException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at pers.hl.common.base.BaseVBActivity.initRootView(BaseVBActivity.kt:48) at pers.hl.common.base.BaseVBActivity.init(BaseVBActivity.kt:32) at pers.hl.common.base.BaseVBActivity.onCreate(BaseVBActivity.kt:27) at pers.hl.common.base.BaseVBVMActivity.onCreate(BaseVBVMActivity.kt:23) at android.app.Activity.performCreate(Activity.java:6237) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class <unknown> at android.view.LayoutInflater.inflate(LayoutInflater.java:539) at android.view.LayoutInflater.inflate(LayoutInflater.java:423) at pers.hl.module_login.databinding.LoginActivityLoginBinding.inflate(LoginActivityLoginBinding.java:70) at pers.hl.module_login.databinding.LoginActivityLoginBinding.inflate(LoginActivityLoginBinding.java:64) at java.lang.reflect.Method.invoke(Native Method) at pers.hl.common.base.BaseVBActivity.initRootView(BaseVBActivity.kt:48) at pers.hl.common.base.BaseVBActivity.init(BaseVBActivity.kt:32) at pers.hl.common.base.BaseVBActivity.onCreate(BaseVBActivity.kt:27) at pers.hl.common.base.BaseVBVMActivity.onCreate(BaseVBVMActivity.kt:23) at android.app.Activity.performCreate(Activity.java:6237) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown> at android.view.LayoutInflater.createView(LayoutInflater.java:645) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:764) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) at android.view.LayoutInflater.inflate(LayoutInflater.java:492) at android.view.LayoutInflater.inflate(LayoutInflater.java:423) at pers.hl.module_login.databinding.LoginActivityLoginBinding.inflate(LoginActivityLoginBinding.java:70) at pers.hl.module_login.databinding.LoginActivityLoginBinding.inflate(LoginActivityLoginBinding.java:64) at java.lang.reflect.Method.invoke(Native Method) at pers.hl.common.base.BaseVBActivity.initRootView(BaseVBActivity.kt:48) at pers.hl.common.base.BaseVBActivity.init(BaseVBActivity.kt:32) at pers.hl.common.base.BaseVBActivity.onCreate(BaseVBActivity.kt:27) at pers.hl.common.base.BaseVBVMActivity.onCreate(BaseVBVMActivity.kt:23) at android.app.Activity.performCreate(Activity.java:6237) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance(Native Method) at android.view.LayoutInflater.createView(LayoutInflater.java:619) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:764) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) at android.view.LayoutInflater.inflate(LayoutInflater.java:492) at android.view.LayoutInflater.inflate(LayoutInflater.java:423) at pers.hl.module_login.databinding.LoginActivityLoginBinding.inflate(LoginActivityLoginBinding.java:70) at pers.hl.module_login.databinding.LoginActivityLoginBinding.inflate(LoginActivityLoginBinding.java:64) at java.lang.reflect.Method.invoke(Native Method) at pers.hl.common.base.BaseVBActivity.initRootView(BaseVBActivity.kt:48) at pers.hl.common.base.BaseVBActivity.init(BaseVBActivity.kt:32) at pers.hl.common.base.BaseVBActivity.onCreate(BaseVBActivity.kt:27) at pers.hl.common.base.BaseVBVMActivity.onCreate(BaseVBVMActivity.kt:23) at android.app.Activity.performCreate(Activity.java:6237) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.OutOfMemoryError: Failed to allocate a 98724108 byte allocation with 1951802 free bytes and 93MB until OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method) at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444) at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1080) at android.content.res.Resources.loadDrawableForCookie(Resources.java:2635) at android.content.res.Resources.loadDrawable(Resources.java:2540) at android.content.res.TypedArray.getDrawable(TypedArray.java:870) at android.view.View.<init>(View.java:3948) at android.view.ViewGroup.<init>(ViewGroup.java:573) at android.view.ViewGroup.<init>(ViewGroup.java:569) at android.view.ViewGroup.<init>(ViewGroup.java:565) at androidx.constraintlayout.widget.ConstraintLayout.<init>(ConstraintLayout.java:568) at java.lang.reflect.Constructor.newInstance(Native Method) at android.view.LayoutInflater.createView(LayoutInflater.java:619) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:764) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) at android.view.LayoutInflater.inflate(LayoutInflater.java:492) at android.view.LayoutInflater.inflate(LayoutInflater.java:423) at pers.hl.module_login.databinding.LoginActivityLoginBinding.inflate(LoginActivityLoginBinding.java:70) at pers.hl.module_login.databinding.LoginActivityLoginBinding.inflate(LoginActivityLoginBinding.java:64) at java.lang.reflect.Method.invoke(Native Method) at pers.hl.common.base.BaseVBActivity.initRootView(BaseVBActivity.kt:48) at pers.hl.common.base.BaseVBActivity.init(BaseVBActivity.kt:32) at pers.hl.common.base.BaseVBActivity.onCreate(BaseVBActivity.kt:27) at pers.hl.common.base.BaseVBVMActivity.onCreate(BaseVBVMActivity.kt:23) at android.app.Activity.performCreate(Activity.java:6237) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
3.分析
開始就是一頓花裡胡哨的瞎分析,因為我這裡是反射呼叫ViewBinding的inflate方法,就去各種改程式碼,然並卵。。。
簡單檢視後,抓住一句重要的資訊:Caused by: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class <unknown>
這意思可不就是在我的頁面佈局xml檔案裡面第二行報錯麼,於是打開了我的佈局,第二行就是個ConstraintLayout呀,沒啥特別的。
又著急了,谷哥度娘問了一圈,多方查閱資料,有告訴我是啥drawable資源沒放對位置的原因,有說是自定義view沒寫對的原因,還有啥刪除v24的資料夾之類的。最後就把此佈局只保留一個根layout,然,無果。。。
實在想不通啊,又到群裡找大佬幫忙,可惜大佬沒理我。
最後冷靜下來,仔細看了看佈局,這不起眼的一行引起了我的注意:
點開一看,這是一個.jpg格式的圖片,我放在drawable下面的。
4.解決
結合上面報錯最後一個原因跟loadDrawable有點關係,抱著試試看的態度刪除此行。
然後,好了,神奇的Android世界。。
5.原理
最後還是沒想通是為啥,自己分析可能是不同版本的inflate方法差異,想去看原始碼,時間不允許,就留到下次吧。