清理项目后,FirebaseAnalytics 导致 ClassNotFoundException 崩溃

After clean project, FirebaseAnalytics causes a crash for ClassNotFoundException

从昨天开始,我就无法解决这个错误。我在“清理”失败后开始发现这个错误,因为 Visual Studio 的“冻结”我被迫停止了这个过程。 这是错误堆栈:

11-14 10:57:30.210 I/mono-stdout(20645): Java.Lang.ClassNotFoundException: com.google.firebase.analytics.FirebaseAnalytics ---> Java.Lang.ClassNotFoundException: Didn't find class "com.google.firebase.analytics.FirebaseAnalytics" on path: DexPathList[[zip file "/data/app/com.myappname.packagename-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myappname.packagename-1/lib/arm, /data/app/com.myappname.packagename-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]
Java.Lang.ClassNotFoundException: com.google.firebase.analytics.FirebaseAnalytics ---> Java.Lang.ClassNotFoundException: Didn't find class "com.google.firebase.analytics.FirebaseAnalytics" on path: DexPathList[[zip file "/data/app/com.myappname.packagename-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myappname.packagename-1/lib/arm, /data/app/com.myappname.packagename-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]
11-14 10:57:30.217 I/mono-stdout(20645):    --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---
11-14 10:57:30.217 I/mono-stdout(20645):   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Users/builder/jenkins/workspace/xamarin-android/xamarin-android/external/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:151 
11-14 10:57:30.218 I/mono-stdout(20645):   at Java.Interop.JniEnvironment+StaticMethods.CallStaticObjectMethod (Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00069] in <ea989c10241f4c8a9adb15ef93d69358>:0 
11-14 10:57:30.218 I/mono-stdout(20645):   at Android.Runtime.JNIEnv.CallStaticObjectMethod (System.IntPtr jclass, System.IntPtr jmethod, Android.Runtime.JValue* parms) [0x00000] in /Users/builder/data/lanes/4986/fb018c56/source/xamarin-android/src/Mono.Android/Android.Runtime/JNIEnv.g.cs:562 
11-14 10:57:30.218 I/mono-stdout(20645):   at Android.Runtime.JNIEnv.CallStaticObjectMethod (System.IntPtr jclass, System.IntPtr jmethod, Android.Runtime.JValue[] parms) [0x00017] in /Users/builder/data/lanes/4986/fb018c56/source/xamarin-android/src/Mono.Android/Android.Runtime/JNIEnv.g.cs:568 
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Users/builder/jenkins/workspace/xamarin-android/xamarin-android/external/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:151 
  at Java.Interop.JniEnvironment+StaticMethods.CallStaticObjectMethod (Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00069] in <ea989c10241f4c8a9adb15ef93d69358>:0 
  at Android.Runtime.JNIEnv.CallStaticObjectMethod (System.IntPtr jclass, System.IntPtr jmethod, Android.Runtime.JValue* parms) [0x00000] in /Users/builder/data/lanes/4986/fb018c56/source/xamarin-android/src/Mono.Android/Android.Runtime/JNIEnv.g.cs:562 
  at Android.Runtime.JNIEnv.CallStaticObjectMethod (System.IntPtr jclass, System.IntPtr jmethod, Android.Runtime.JValue[] parms) [0x00017] in /Users/builder/data/lanes/4986/fb018c56/source/xamarin-android/src/Mono.Android/Android.Runtime/JNIEnv.g.cs:568 
  at Android.Runtime.J
NIEnv.FindClass (System.String classname) [0x00007] in /Users/builder/data/lanes/4986/fb018c56/source/xamarin-android/src/Mono.Android/Android.Runtime/JNIEnv.cs:602 
11-14 10:57:30.219 I/mono-stdout(20645):   at Android.Runtime.JNIEnv.FindClass (System.String classname) [0x00007] in /Users/builder/data/lanes/4986/fb018c56/source/xamarin-android/src/Mono.Android/Android.Runtime/JNIEnv.cs:602 
11-14 10:57:30.219 I/mono-stdout(20645):   at Android.Runtime.JNIEnv.FindClass (System.String className, System.IntPtr& cachedJniClassHandle) [0x00011] in /Users/builder/data/lanes/4986/fb018c56/source/xamarin-android/src/Mono.Android/Android.Runtime/JNIEnv.cs:616 
11-14 10:57:30.219 I/mono-stdout(20645):   at Firebase.Analytics.FirebaseAnalytics.get_class_ref () [0x00000] in <0d9bc83400c247fbb8133267b3bc506d>:0 
11-14 10:57:30.220 I/mono-stdout(20645):   at Firebase.Analytics.FirebaseAnalytics.GetInstance (Android.Content.Context context) [0x00014] in <0d9bc83400c247fbb8133267b3bc506d>:0 
11-14 10:57:30.220 I/mono-stdout(20645):   at com.meba.ui.EXAApplication.InitializeEXAApplication (com.meba.ui.android.controls.EXAActivity MainActivity) [0x00022] in C:\Progetti\com.meba\com.meba.ui.android\controls\EXAApplication.cs:677 
11-14 10:57:30.220 I/mono-stdout(20645):   --- End of managed Java.Lang.ClassNotFoundException stack trace ---
  at Android.Runtime.JNIEnv.FindClass (System.String className, System.IntPtr& cachedJniClassHandle) [0x00011] in /Users/builder/data/lanes/4986/fb018c56/source/xamarin-android/src/Mono.Android/Android.Runtime/JNIEnv.cs:616 
  at Firebase.Analytics.FirebaseAnalytics.get_class_ref () [0x00000] in <0d9bc83400c247fbb8133267b3bc506d>:0 
  at Firebase.Analytics.FirebaseAnalytics.GetInstance (Android.Content.Context context) [0x00014] in <0d9bc83400c247fbb8133267b3bc506d>:0 
  at com.meba.ui.EXAApplication.InitializeEXAApplication (com.meba.ui.android.controls.EXAActivity MainActivity) [0x00022] in C:\Progetti\com.meba\com.meba.ui.android\controls\EXAApplication.cs:677 
  --- End of managed Java.Lang.ClassNotFoundException stack trace ---
java.lang.ClassNotFoundException: com.google.firebase.analytics.FirebaseAnalytics
11-14 10:57:30.220 I/mono-stdout(20645): java.lang.ClassNotFoundException: com.google.firebase.analytics.FirebaseAnalytics
11-14 10:57:30.221 I/mono-stdout(20645):    at java.lang.Class.classForName(Native Method)
11-14 10:57:30.221 I/mono-stdout(20645):    at java.lang.Class.forName(Class.java:324)
    at java.lang.Class.classForName(Native Method)
    at java.lang.Class.forName(Class.java:324)
    at md5a8add535933d47bad1d9f0eed06bba35.MainActivity.n_onCreate(Native Method)
    at md5a8add535933d47bad1d9f0eed06bba35.MainActivity.onCreate(MainActivity.java:29)
    at android.app.Activity.performCreate(Activity.java:6301)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2519)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2654)
    at android.app.ActivityThread.-wrap11(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488)
    at android.os.Handler.dispatchMessage(Handler.java:111)
    at android.os.Looper.loop(Looper.java:207)
    at android.app.ActivityThread.main(ActivityThread.java:5728)
11-14 10:57:30.221 I/mono-stdout(20645):    at md5a8add535933d47bad1d9f0eed06bba35.MainActivity.n_onCreate(Native Method)
11-14 10:57:30.222 I/mono-stdout(20645):    at md5a8add535933d47bad1d9f0eed06bba35.MainActivity.onCreate(MainActivity.java:29)
11-14 10:57:30.222 I/mono-stdout(20645):    at android.app.Activity.performCreate(Activity.java:6301)
11-14 10:57:30.222 I/mono-stdout(20645):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113)
11-14 10:57:30.222 I/mono-stdout(20645):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2519)
11-14 10:57:30.222 I/mono-stdout(20645):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2654)
11-14 10:57:30.222 I/mono-stdout(20645):    at android.app.ActivityThread.-wrap11(ActivityThread.java)
11-14 10:57:30.223 I/mono-stdout(20645):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488)
11-14 10:57:30.223 I/mono-stdout(20645):    at android.os.Handler.dispatchMessage(Handler.java:111)
11-14 10:57:30.223 I/mono-stdout(20645):    at android.os.Looper.loop(Looper.java:207)
11-14 10:57:30.223 I/mono-stdout(20645):    at android.app.ActivityThread.main(ActivityThread.java:5728)
11-14 10:57:30.223 I/mono-stdout(20645):    at java.lang.reflect.Method.invoke(Native Method)
11-14 10:57:30.223 I/mono-stdout(20645):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
11-14 10:57:30.223 I/mono-stdout(20645):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
11-14 10:57:30.224 I/mono-stdout(20645): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.analytics.FirebaseAnalytics" on path: DexPathList[[zip file "/data/app/com.myappname.packagename-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myappname.packagename-1/lib/arm, /data/app/com.myappname.packagename-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]
11-14 10:57:30.224 I/mono-stdout(20645):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
11-14 10:57:30.224 I/mono-stdout(20645):    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
11-14 10:57:30.224 I/mono-stdout(20645):    at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
11-14 10:57:30.224 I/mono-stdout(20645):    ... 16 more
11-14 10:57:30.224 I/mono-stdout(20645):    Suppressed: java.lang.ClassNotFoundException: com.google.firebase.analytics.FirebaseAnalytics
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.analytics.FirebaseAnalytics" on path: DexPathList[[zip file "/data/app/com.myappname.packagename-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myappname.packagename-1/lib/arm, /data/app/com.myappname.packagename-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
    ... 16 more
    Suppressed: java.lang.ClassNotFoundException: com.google.firebase.analytics.FirebaseAnalytics
        at java.lang.Class.classForName(Native Method)
        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
        a
t java.lang.ClassLoader.loadClass(ClassLoader.java:504)
        ... 17 more
    Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
11-14 10:57:30.224 I/mono-stdout(20645):        at java.lang.Class.classForName(Native Method)
11-14 10:57:30.224 I/mono-stdout(20645):        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
11-14 10:57:30.225 I/mono-stdout(20645):        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
11-14 10:57:30.225 I/mono-stdout(20645):        at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
11-14 10:57:30.225 I/mono-stdout(20645):        ... 17 more
11-14 10:57:30.225 I/mono-stdout(20645):    Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

我已经尝试重新清理、重建、构建、检查参考资料(一切正常),尝试不同的设备(华为 Android 7.0,thl Android 6.0),更新 SDK 和公司从 Android SDK Manager,更新 Xamarin 和 VS。 我试图在另一台机器上通过SVN移动一切,但在另一台机器上也发现了问题。

有什么想法或帮助吗?

I replaced my package name in output with a fake.

Before I found the error I updated the device OS (Huawei P9), but the error is also found on a THL with different OS

在遇到同样的问题几天后,我明白了:

如果您已经从 Nuget 下载了库,您需要确定以下几点:

1) XAMARIN.DOWNLOAD.BUILD 从 Android SDK Manager 更新对 Xamarin Binders 没有用,这是因为 VS 在编译过程中使用(我想)Xamarin.Download.Build 来对齐 jar。这就是您始终需要在项目中包含此组件的原因(如果您使用一些 Xamarin Binders)。

要检查您是否已下载所有 jar 并了解缺少哪些组件,请浏览 obj 文件夹中的文件夹 library_projects\。 如果一切正常,你会发现 classes.jar

不要手动维护此文件夹,因为任何 CLEAN 操作都会删除该文件夹的内容。

2) 调整版本依赖关系 所有 Google 个库都属于同一个 "Service package" 如果你使用不同的 google 服务(firebase、地图、云平台) 如果不对齐组件,请确保您使用的所有组件都是相同版本并且组件具有相同的依赖关系。如果您不修复它,您可能会遇到关于 jar 文件中缺少方法的奇怪编译错误。我假设发生这种情况是因为这些库具有相同的依赖性但版本不同。

3) 始终使用 NUGET 始终对 add/remove 个组件使用 NUGET。当我手动引用以前用NUGET下载的不同版本的组件来解决同样的问题时,我不断出现编译错误。这是因为如果您在项目文件 (.prj) 中手动引用库(并手动删除以前的引用),仍然 "Import instructions" 错误引用。

4) 检查编译输出 如果你不明白编译错误。检查编译过程的完整详细日志(您可以在 VS 选项中设置)。通常一个奇怪的错误取决于先前未在默认输出模式中列出的警告。