Search code examples
androidandroid-sourceandroidx

ClassCastException ContentFrameLayout androidx vs. support.v7 in system app


Strange Exception I am getting on a system app when I am using just FrameLayout in my SampleActivity.

Caused by: java.lang.ClassCastException: androidx.appcompat.widget.ContentFrameLayout cannot be cast to android.support.v7.widget.ContentFrameLayout
05-22 08:41:05.357 10520 10520 E AndroidRuntime: at android.support.v7.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:685)
05-22 08:41:05.357 10520 10520 E AndroidRuntime: at android.support.v7.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:516)
05-22 08:41:05.357 10520 10520 E AndroidRuntime: at android.support.v7.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:464)
05-22 08:41:05.357 10520 10520 E AndroidRuntime: at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
05-22 08:41:05.357 10520 10520 E AndroidRuntime: at com.sample.SampleActivity.onCreate(SampleActivity.java:98)

So I looked into the source code of AppCompatDelegateImpl present here : AppCompatDelegateImpl

imports in SampleActivity.java:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

While this class is part of android appcompat.v7 but internally it is importing androidx.appcompat.widget.ContentFrameLayout Does it imply that appcompat.v7 internally use androidx dependencies ? If yes, then why I am getting this exception ?

Note: Please avoid giving gradle based solutions since it is a system app.


Solution

  • Fix was to include androidx dependencies in Android.mk file.

    Also had to change all import of support library classes to androidx as suggested in Android developer site: https://developer.android.com/jetpack/androidx/migrate