1

When opening the first screen of my app I'm having a crash. 150 of them actually (detected only one a single user) with Android 4.4.2 with device Samsung GT-N7100.

Fabric screenshot

After trying in several devices I'm unable to replicate it...

My first clue was to search bugs in the Calligraphy lib, but according to similar bugs reported there, it is pointing to them but is a false "stack guilt line". It is probably something with the specific layout line so...

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app.myapp/com.app.mymags.features.product.activities.ProductDetailActivity}: android.view.InflateException: Binary XML file line #9: Error inflating class <unknown>
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
       at android.app.ActivityThread.access$900(ActivityThread.java:175)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:146)
       at android.app.ActivityThread.main(ActivityThread.java:5602)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
       at dalvik.system.NativeStart.main(NativeStart.java)
Caused by android.view.InflateException: Binary XML file line #9: Error inflating class <unknown>
       at android.view.LayoutInflater.createView(LayoutInflater.java:626)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.createCustomViewInternal(SourceFile:211)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.access$000(SourceFile:20)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater$PrivateWrapperFactory2.onCreateView(SourceFile:302)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:695)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(SourceFile:60)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
       at com.app.mymags.features.product.viewbuilders.imagecarousel.ImageCarouselViewBuilder.(SourceFile:28)
       at com.app.mymags.features.product.fragments.imagecarousel.ImageCarouselFragment.onCreateView(SourceFile:92)
       at android.app.Fragment.performCreateView(Fragment.java:1700)
       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
       at android.app.BackStackRecord.run(BackStackRecord.java:684)
       at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1453)
       at android.app.Activity.performStart(Activity.java:5460)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2386)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
       at android.app.ActivityThread.access$900(ActivityThread.java:175)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:146)
       at android.app.ActivityThread.main(ActivityThread.java:5602)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
       at dalvik.system.NativeStart.main(NativeStart.java)
Caused by java.lang.reflect.InvocationTargetException
       at java.lang.reflect.Constructor.constructNative(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
       at android.view.LayoutInflater.createView(LayoutInflater.java:600)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.createCustomViewInternal(SourceFile:211)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.access$000(SourceFile:20)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater$PrivateWrapperFactory2.onCreateView(SourceFile:302)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:695)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(SourceFile:60)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
       at com.app.mymags.features.product.viewbuilders.imagecarousel.ImageCarouselViewBuilder.(SourceFile:28)
       at com.app.mymags.features.product.fragments.imagecarousel.ImageCarouselFragment.onCreateView(SourceFile:92)
       at android.app.Fragment.performCreateView(Fragment.java:1700)
       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
       at android.app.BackStackRecord.run(BackStackRecord.java:684)
       at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1453)
       at android.app.Activity.performStart(Activity.java:5460)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2386)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
       at android.app.ActivityThread.access$900(ActivityThread.java:175)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:146)
       at android.app.ActivityThread.main(ActivityThread.java:5602)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
       at dalvik.system.NativeStart.main(NativeStart.java)
Caused by java.lang.OutOfMemoryError
       at android.graphics.BitmapFactory.nativeDecodeAsset(BitmapFactory.java)
       at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:683)
       at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:513)
       at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:889)
       at android.content.res.Resources.loadDrawable(Resources.java:3436)
       at android.content.res.Resources.getDrawable(Resources.java:1909)
       at android.support.v7.widget.TintResources.superGetDrawable(SourceFile:48)
       at android.support.v7.widget.AppCompatDrawableManager.onDrawableLoadedFromResources(SourceFile:374)
       at android.support.v7.widget.TintResources.getDrawable(SourceFile:44)
       at android.widget.EdgeEffect.(EdgeEffect.java:151)
       at android.support.v4.widget.EdgeEffectCompatIcs.newEdgeEffect(SourceFile:30)
       at android.support.v4.widget.EdgeEffectCompat$EdgeEffectIcsImpl.newEdgeEffect(SourceFile:99)
       at android.support.v4.widget.EdgeEffectCompat.(SourceFile:150)
       at android.support.v4.view.ViewPager.initViewPager(SourceFile:375)
       at android.support.v4.view.ViewPager.(SourceFile:360)
       at java.lang.reflect.Constructor.constructNative(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
       at android.view.LayoutInflater.createView(LayoutInflater.java:600)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.createCustomViewInternal(SourceFile:211)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.access$000(SourceFile:20)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater$PrivateWrapperFactory2.onCreateView(SourceFile:302)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:695)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(SourceFile:60)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
       at com.app.mymags.features.product.viewbuilders.imagecarousel.ImageCarouselViewBuilder.(SourceFile:28)
       at com.app.mymags.features.product.fragments.imagecarousel.ImageCarouselFragment.onCreateView(SourceFile:92)
       at android.app.Fragment.performCreateView(Fragment.java:1700)
       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
       at android.app.BackStackRecord.run(BackStackRecord.java:684)
       at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1453)
       at android.app.Activity.performStart(Activity.java:5460)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2386)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
       at android.app.ActivityThread.access$900(ActivityThread.java:175)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:146)
       at android.app.ActivityThread.main(ActivityThread.java:5602)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
       at dalvik.system.NativeStart.main(NativeStart.java)

The XML that it is point to is:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/white"
        >

    <android.support.v4.view.ViewPager
            android:id="@+id/image_carousel_pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            style="@style/AppRecycler.Light"/>

</RelativeLayout>

And the line where the error is thrown is the ViewPager one.

The style of it:

<style name="AppRecycler.Light" parent="Base.AppRecycler.Light"/>

<style name="Base.AppRecycler.Light" parent="">
        <item name="android:background">@android:color/white</item>
        <item name="android:theme">@style/Theme.AppRecycler.Light</item>
    </style>

<style name="Base.AppRecycler.Light" parent="">
        <item name="android:background">@android:color/white</item>
        <item name="android:theme">@style/Theme.AppRecycler.Light</item>
    </style>

Since this appears to be a device-user specific bug, does anyone has a clue how to fix it?

Or at least why it's happening in the first place?

neteinstein
  • 17,529
  • 11
  • 93
  • 123
  • 3
    look into `Caused by java.lang.OutOfMemoryError`. that one sticks out like a sore thumb. you can probably replicate it by making your test device's memory near full before running your app, try https://stackoverflow.com/questions/24520590/is-there-a-way-to-impose-a-memory-limit-on-an-android-app-for-testing – TWL Sep 02 '16 at 16:33
  • It's low-config device and can't provide enough Ram for handling your Bitmaps (Drawables). Make your Drawable size smaller. (you can analysis memory usage to find out what's going on) – Amir Sep 02 '16 at 19:47

1 Answers1

0

There is a probable chance of Samsung customized their UI, default android provided some views may not work for this device. Ideally OEMs should support by default android APIs. Is samsung provided any separate SDK for this device or not check. If provides verify the problem in their sdk.