xamarin / AndroidSupportComponents

Xamarin bindings for Android Support libraries - For AndroidX see https://github.com/xamarin/AndroidX
MIT License
146 stars 56 forks source link

Error inflating class com.google.android.material.AppBarLayout #234

Closed Paul-N closed 4 years ago

Paul-N commented 4 years ago

Xamarin 16.4.000.308 (d16-4@4755fb3)

Xamarin Designer 16.4.0.475 (remotes/origin/d16-4@ac250f5aa)

Xamarin.Android SDK 10.1.3.7 (d16-4/d66aed0)

Xamarin.Android Reference Assemblies and MSBuild support.

Mono: fd9f379
Java.Interop: xamarin/java.interop/d16-4@c4e569f
ProGuard: xamarin/proguard/master@905836d
SQLite: xamarin/sqlite/3.28.0@46204c4
Xamarin.Android Tools: xamarin/xamarin-android-tools/master@9f4ed4b

Operating System & Version: Windows 8.1

Support Libraries Version (eg: 23.3.0): xamarin.google.android.material 1.1.0-preview06

Describe your Issue:

Calling of AppCompatActivity.SetContentView() throws an exception when xml layout file contains com.google.android.material.AppBarLayout tag.

Steps to Reproduce (with link to sample solution if possible):

Try my demo project to reproduce: https://github.com/Paul-N/AppBarLayoutBugDemo

Include any relevant Exception Stack traces, build logs, adb logs:

Exception text:

Android.Views.InflateException: 'Binary XML file line #1 in com.companyname.appbarlayoutbugdemo:layout/activity_main: Binary XML file line #1 in com.companyname.appbarlayoutbugdemo:layout/activity_main: Error inflating class com.google.android.material.AppBarLayout'

Exception StackTrace:

at Java.Interop.JniEnvironment+InstanceMethods.CallNonvirtualVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue args) [0x0008e] in :0 at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue parameters) [0x0005d] in :0 at Android.App.Activity.SetContentView (System.Int32 layoutResID) [0x00022] in :0 at AppBarLayoutBugDemo.MainActivity.OnCreate (Android.OS.Bundle savedInstanceState) [0x00009] in C:\Projects\AppBarLayoutBugDemo\AppBarLayoutBugDemo\MainActivity.cs:14 at Android.App.Activity.n_OnCreate_Landroid_osBundle (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_savedInstanceState) [0x00011] in :0 at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.3(intptr,intptr,intptr) --- End of managed Android.Views.InflateException stack trace --- android.view.InflateException: Binary XML file line #1 in com.companyname.appbarlayoutbugdemo:layout/activity_main: Binary XML file line #1 in com.companyname.appbarlayoutbugdemo:layout/activity_main: Error inflating class com.google.android.material.AppBarLayout Caused by: android.view.InflateException: Binary XML file line #1 in com.companyname.appbarlayoutbugdemo:layout/activity_main: Error inflating class com.google.android.material.AppBarLayout Caused by: java.lang.ClassNotFoundException: com.google.android.material.AppBarLayout at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:454) at android.view.LayoutInflater.createView(LayoutInflater.java:815) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1006) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084) at android.view.LayoutInflater.inflate(LayoutInflater.java:682) at android.view.LayoutInflater.inflate(LayoutInflater.java:534) at android.view.LayoutInflater.inflate(LayoutInflater.java:481) at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) at crc6411d0a0c8bf8511ef.MainActivity.n_onCreate(Native Method) at crc6411d0a0c8bf8511ef.MainActivity.onCreate(MainActivity.java:37) at android.app.Activity.performCreate(Activity.java:7802) at android.app.Activity.performCreate(Activity.java:7791) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.material.AppBarLayout" on path: DexPathList[[zip file "/data/app/com.companyname.appbarlayoutbugdemo-sJrJulG2TvzUwzP7t8eazA==/base.apk"],nativeLibraryDirectories=[/data/app/com.companyname.appbarlayoutbugdemo-sJrJulG2TvzUwzP7t8eazA==/lib/x86_64, /data/app/com.companyname.appbarlayoutbugdemo-sJrJulG2TvzUwzP7t8eazA==/base.apk!/lib/x86_64, /system/lib64, /system/product/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) ... 29 more

moljac commented 4 years ago

@Paul-N Thanks for the feedback

Shouldn't that be com.google.android.material.appbar.AppBarLayout?

https://developer.android.com/reference/com/google/android/material/appbar/AppBarLayout

According to:

https://github.com/Paul-N/AppBarLayoutBugDemo/blob/master/AppBarLayoutBugDemo/AppBarLayoutBugDemo.csproj

you are using Xamarin.Google.Android.Material and that is AndroidX related artifact/nuget, meaning it is in AndroidX repo.

https://github.com/xamarin/AndroidX

moljac commented 4 years ago

yeah. Wrong classname in

Closing this one.

Paul-N commented 4 years ago

Sorry. Shame on me :(

moljac commented 4 years ago

@Paul-N Cmon that's what friends are for... 8)