cortinico / slidetoact

A simple 'Slide to Unlock' Material widget for Android, written in Kotlin 📱🎨🦄
MIT License
1.19k stars 161 forks source link

Crash on android 4.4.4 #270

Open DevilGeek opened 1 year ago

DevilGeek commented 1 year ago

What kind of issue is this?

Details

FATAL EXCEPTION: main Process: com.xxx.xxx, PID: 1654 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxx.xxx/com.xxx.xxx.MainActivity}: android.view.InflateException: Binary XML file line #403: Error inflating class com.ncorti.slidetoact.SlideToActView at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) at android.app.ActivityThread.access$800(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:801) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:617) at dalvik.system.NativeStart.main(Native Method) Caused by: android.view.InflateException: Binary XML file line #403: Error inflating class com.ncorti.slidetoact.SlideToActView at android.view.LayoutInflater.createView(LayoutInflater.java:620) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) at android.view.LayoutInflater.inflate(LayoutInflater.java:492) at android.view.LayoutInflater.inflate(LayoutInflater.java:397) at com.xxx.xxx.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:250) at com.xxx.xxx.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:244) at com.xxx.xxx.MainActivity.onCreate(MainActivity.java:229) at android.app.Activity.performCreate(Activity.java:5231) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)  at android.app.ActivityThread.access$800(ActivityThread.java:135)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5001)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:801)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:617)  at dalvik.system.NativeStart.main(Native Method)  Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.constructNative(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at android.view.LayoutInflater.createView(LayoutInflater.java:594) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)  at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)  at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)  at android.view.LayoutInflater.inflate(LayoutInflater.java:492)  at android.view.LayoutInflater.inflate(LayoutInflater.java:397)  at com.xxx.xxx.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:250)  at com.xxx.xxx.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:244)  at com.xxx.xxx.MainActivity.onCreate(MainActivity.java:229)  at android.app.Activity.performCreate(Activity.java:5231)  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)  at android.app.ActivityThread.access$800(ActivityThread.java:135)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5001)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:801)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:617)  at dalvik.system.NativeStart.main(Native Method)  Caused by: android.content.res.Resources$NotFoundException: File res/drawable/slidetoact_ic_arrow.xml from drawable resource ID #0x7f07011a at android.content.res.Resources.loadDrawable(Resources.java:2096) at android.content.res.Resources.getDrawable(Resources.java:700) at androidx.core.content.res.ResourcesCompat.getDrawable(ResourcesCompat.java:139) at com.ncorti.slidetoact.SlideToActView.setSliderIcon(SlideToActView.kt:164) at com.ncorti.slidetoact.SlideToActView.<init>(SlideToActView.kt:387) at com.ncorti.slidetoact.SlideToActView.<init>(SlideToActView.kt:51) at com.ncorti.slidetoact.SlideToActView.<init>(SlideToActView.kt) at java.lang.reflect.Constructor.constructNative(Native Method)  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)  at android.view.LayoutInflater.createView(LayoutInflater.java:594)  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)  at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)  at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)  at android.view.LayoutInflater.inflate(LayoutInflater.java:492)  at android.view.LayoutInflater.inflate(LayoutInflater.java:397)  at com.xxx.xxx.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:250)  at com.xxx.xxx.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:244)  at com.xxx.xxx.MainActivity.onCreate(MainActivity.java:229)  at android.app.Activity.performCreate(Activity.java:5231)  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)  at android.app.ActivityThread.access$800(ActivityThread.java:135)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5001)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:801)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:617)  at dalvik.system.NativeStart.main(Native Method)  Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #5: invalid drawable tag vector at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:933) at android.graphics.drawable.Drawable.createFromXml(Drawable.java:877) at android.content.res.Resources.loadDrawable(Resources.java:2092) at android.content.res.Resources.getDrawable(Resources.java:700)  at androidx.core.content.res.ResourcesCompat.getDrawable(ResourcesCompat.java:139)  at com.ncorti.slidetoact.SlideToActView.setSliderIcon(SlideToActView.kt:164)  at com.ncorti.slidetoact.SlideToActView.<init>(SlideToActView.kt:387)  at com.ncorti.slidetoact.SlideToActView.<init>(SlideToActView.kt:51)  at com.ncorti.slidetoact.SlideToActView.<init>(SlideToActView.kt)  at java.lang.reflect.Constructor.constructNative(Native Method)  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)  at android.view.LayoutInflater.createView(LayoutInflater.java:594)  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)  at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)  at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)  at android.view.LayoutInflater.inflate(LayoutInflater.java:492)  at android.view.LayoutInflater.inflate(LayoutInflater.java:397)  at com.xxx.xxx.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:250)  at com.xxx.xxx.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:244)  at com.xxx.xxx.MainActivity.onCreate(MainActivity.java:229)  at android.app.Activity.performCreate(Activity.java:5231)  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)  at android.app.ActivityThread.access$800(ActivityThread.java:135)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5001)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:801)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:617)  at dalvik.system.NativeStart.main(Native Method) 

i tried :

Specify the slider_icon in the xml :

app:slider_icon="@drawable/slider_icon"

(the drawable is a copy from the repo)

and i got this error on android 4.4.4 (still working on my android 8.1 device)   FATAL EXCEPTION: main Process: com.xxx.xxx, PID: 1260 java.lang.NoSuchMethodError: android.graphics.drawable.Drawable.setTint at com.ncorti.slidetoact.SlideToActIconUtil.tintIconCompat$slidetoact_release(SlideToActIconUtil.kt:32) at com.ncorti.slidetoact.SlideToActView.onDraw(SlideToActView.kt:569)  

cortinico commented 1 year ago

Does this happen also on a emulator for API 19?

DevilGeek commented 1 year ago

@cortinico

Yes, I just checked and this also happens in the emulator (android 4.4, API 19).

java.lang.NoSuchMethodError: android.graphics.drawable.Drawable.setTint at com.ncorti.slidetoact.SlideToActIconUtil.tintIconCompat$slidetoact_release(SlideToActIconUtil.kt:32) at com.ncorti.slidetoact.SlideToActView.onDraw(SlideToActView.kt:569) at android.view.View.draw(View.java:14465)

DevilGeek commented 1 year ago

I did a little bit of testing with the exemple app from the repo. It crash on the emulator but i was able to get it working on android 4.4 by changing

ResourcesCompat.getDrawable(context.resources, value, context.theme)?.let { to : VectorDrawableCompat.create(context.resources, value, context.theme)?.let {

in SlideToActView.kt 165

but the 'custom icon' exemple will crash with this 'fix'

based on this stackoverflow answer : https://stackoverflow.com/a/48237058

cortinico commented 1 year ago

Maybe we can selectively use ResourcesCompat or VectorDrawableCompat based on the type of the image on API 19?

DevilGeek commented 1 year ago

I think that would be the solution, but I don't know Kotlin. only java