Hi, we are having some issues with the player in Android 5.1
We can reproduce this on Emulator with Android 5.1, we are integrating view binding and the app is crashing.
Here is the stacktrace
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.riivi.riivi/com.riivi.riivi.ui.player.PlayerActivity}: android.view.InflateException: Binary XML file line #11: Error inflating class com.bitmovin.player.PlayerView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class com.bitmovin.player.PlayerView
at android.view.LayoutInflater.createView(LayoutInflater.java:633)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at com.riivi.riivi.databinding.ActivityPlayerBinding.inflate(ActivityPlayerBinding.java:153)
at com.riivi.riivi.databinding.ActivityPlayerBinding.inflate(ActivityPlayerBinding.java:147)
at com.riivi.riivi.ui.player.PlayerActivity.onCreate(PlayerActivity.kt:130)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:607)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at com.riivi.riivi.databinding.ActivityPlayerBinding.inflate(ActivityPlayerBinding.java:153)
at com.riivi.riivi.databinding.ActivityPlayerBinding.inflate(ActivityPlayerBinding.java:147)
at com.riivi.riivi.ui.player.PlayerActivity.onCreate(PlayerActivity.kt:130)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.NoClassDefFoundError: com.google.android.exoplayer2.ExoPlayer$Builder$$ExternalSyntheticLambda7
at com.google.android.exoplayer2.ExoPlayer$Builder.<init>(ExoPlayer.java:458)
at com.google.android.exoplayer2.SimpleExoPlayer$Builder.<init>(SimpleExoPlayer.java:75)
at com.bitmovin.player.s1.r.a(SourceFile:7)
at com.bitmovin.player.v.e.<init>(SourceFile:82)
at com.bitmovin.player.v.f.a(SourceFile:3)
at com.bitmovin.player.v.f.a(SourceFile:1)
at com.bitmovin.player.v.f.get(SourceFile:1)
at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at com.bitmovin.player.a.d.a(SourceFile:1)
at com.bitmovin.player.a.d.get(SourceFile:1)
at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at com.bitmovin.player.r.d.getPlayer(SourceFile:1)
at com.bitmovin.player.a.c.a(SourceFile:87)
at com.bitmovin.player.a.c.a(SourceFile:55)
at com.bitmovin.player.api.Player$Companion.create(SourceFile:1)
at com.bitmovin.player.PlayerView.<init>(SourceFile:690)
at com.bitmovin.player.PlayerView.<init>(SourceFile:342)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:607)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at com.riivi.riivi.databinding.ActivityPlayerBinding.inflate(ActivityPlayerBinding.java:153)
at com.riivi.riivi.databinding.ActivityPlayerBinding.inflate(ActivityPlayerBinding.java:147)
at com.riivi.riivi.ui.player.PlayerActivity.onCreate(PlayerActivity.kt:130)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
2022-09-30 10:13:35.249 3934-4004/com.riivi.riivi D/EGL_emulation: eglMakeCurrent: 0x72bad25ba0: ver 2 0 (tinfo 0x72baf65b00)
Here is the XML
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/parentPlayer"
android:animateLayoutChanges="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.bitmovin.player.PlayerView
android:id="@+id/bitmovinPlayerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</com.bitmovin.player.PlayerView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent">
<RelativeLayout
android:layout_width="400dp"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:background="@android:color/transparent"
android:id="@+id/playerContainer">
</RelativeLayout>
</RelativeLayout>
<RelativeLayout
android:id="@+id/playerUI"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:animateLayoutChanges="true"
android:focusable="true">
<ImageButton
android:id="@+id/playButton"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_centerInParent="true"
android:background="@android:color/transparent"
android:contentDescription="@null"
android:foreground="@drawable/ripple_button_player"
android:insetLeft="0dp"
android:insetTop="0dp"
android:insetRight="0dp"
android:insetBottom="0dp"
android:src="@drawable/ic_play_button" />
<com.google.android.material.button.MaterialButton
android:id="@+id/buttonBack"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:insetLeft="0dp"
android:insetTop="0dp"
android:insetRight="0dp"
android:insetBottom="0dp"
app:backgroundTint="@android:color/transparent"
app:cornerRadius="25dp"
app:icon="@drawable/ic_button_back"
app:iconGravity="textStart"
app:iconPadding="0dp"
app:iconSize="50dp"
app:iconTint="@android:color/white"
app:rippleColor="@color/brand_primary_opacity_input" />
<com.google.android.material.button.MaterialButton
android:id="@+id/buttonToStart"
style="@style/Widget.MaterialComponents.Button.TextButton.Icon"
android:layout_width="186dp"
android:layout_height="52dp"
android:layout_marginStart="21dp"
android:layout_marginTop="8dp"
android:layout_toEndOf="@+id/buttonBack"
android:contentDescription="@null"
android:text="@string/fromBeginning"
android:textAllCaps="false"
android:textColor="@android:color/white"
android:textSize="14sp"
android:visibility="gone"
app:backgroundTint="#14FFFFFF"
app:cornerRadius="21dp"
app:icon="@drawable/ic_goback"
app:iconSize="14dp"
app:iconTint="@android:color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:rippleColor="@color/brand_primary_opacity_input"
app:shapeAppearance="@style/fromBeginning"
tools:visibility="visible" />
<ImageView
android:id="@+id/riiviLogo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginTop="12dp"
android:layout_marginEnd="16dp"
android:src="@drawable/ic_riivi_logo_player" />
<TextView
android:id="@+id/playerTitle"
style="@style/PlayerTitle"
android:layout_width="wrap_content"
android:layout_height="28dp"
android:layout_above="@+id/playerSerieTitle"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:gravity="center_vertical|start"
tools:text="Título de Contenido" />
<TextView
android:id="@+id/playerSerieTitle"
style="@style/PlayerSerieTitle"
android:layout_width="wrap_content"
android:layout_height="24dp"
android:gravity="center_vertical|start"
android:layout_above="@+id/playerControl"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:text=""
android:visibility="gone"
tools:text="Título de Contenido" />
<com.google.android.material.card.MaterialCardView
android:id="@+id/buttonNextEp"
style="@null"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/playerControl"
android:layout_alignParentEnd="true"
android:layout_marginEnd="16dp"
android:clickable="true"
android:focusable="true"
android:visibility="gone"
android:layout_marginTop="6dp"
app:cardCornerRadius="8dp"
app:cardElevation="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/selector_button_next_ep">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@android:color/transparent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@android:color/transparent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/poppins_semibold"
android:gravity="center"
android:padding="6dp"
android:background="@android:color/transparent"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:layout_marginStart="8dp"
android:text="@string/btnNextEpisode"
android:textColor="@android:color/white"
android:textSize="16sp"
android:textStyle="bold" />
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:background="@drawable/ic_play_margin_left" />
</LinearLayout>
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>
<RelativeLayout
android:id="@+id/thumbnail"
android:layout_above="@+id/playerControl"
android:layout_width="102dp"
android:layout_height="62dp"
android:visibility="invisible"
android:background="@drawable/thumbnail_frame">
<ImageView
android:id="@+id/thumbnailImg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:layout_margin="2dp"
android:scaleType="centerCrop" />
</RelativeLayout>
<LinearLayout
android:id="@+id/playerControl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:layout_marginTop="8dp"
android:gravity="center_horizontal"
android:orientation="vertical"
android:layout_alignParentBottom="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/positionView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textStyle="bold"
android:paddingStart="16dp"
android:paddingEnd="4dp"
android:includeFontPadding="false"
android:textColor="@android:color/white"
android:text="00:00" />
<SeekBar
android:id="@+id/seekbar"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="14dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:background="@android:color/transparent"
android:thumb="@drawable/ic_thumb"
android:progressDrawable="@drawable/gradient_player_seekbar"
tools:progress="30"
tools:secondaryProgress="40"/>
<TextView
android:id="@+id/durationView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textStyle="bold"
android:paddingStart="4dp"
android:paddingEnd="16dp"
android:includeFontPadding="false"
android:textColor="@android:color/white"
android:text="00:00" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageButton
android:id="@+id/buttonSubtitle"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginStart="12dp"
android:background="@android:color/transparent"
android:foreground="@drawable/ripple_button_player"
android:visibility="gone"
android:src="@drawable/ic_subs"
tools:visibility="visible"/>
<androidx.mediarouter.app.MediaRouteButton
android:id="@+id/buttonChromecast"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentEnd="true"
android:layout_marginEnd="16dp"
android:background="@android:color/transparent"
android:foreground="@drawable/ripple_button_player"
android:src="@drawable/ic_chromecast"
android:visibility="gone"
tools:visibility="visible" />
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/containerSuggestEpisode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="vertical"
android:visibility="gone"
tools:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0">
<include
android:id="@+id/itemSuggestEpisode"
layout="@layout/item_suggest_episode"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<RelativeLayout
android:id="@+id/loader"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black">
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/loaderLottie"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_centerInParent="true"
android:background="@android:color/transparent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:lottie_autoPlay="true"
app:lottie_fileName="loader.json"
app:lottie_loop="true"
app:lottie_speed="1" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
Thanks in advance