更改时 Xamarin + Mvvmcross + Multidex 崩溃 on/offline
Xamarin + Mvvmcross + Multidex crash when change on/offline
来自世界各地的同事们问候 xamarin.我需要帮助。
我使用 Mvvmcross 4.4 和 Firebase 在 Xamarin 中开发了一个应用程序。在 Android 项目中,我必须实施 multidex。出现的问题是当应用程序 运行 并且连接丢失(飞行模式、wifi 关闭等)时,反之亦然。
在构建 multidex 的自定义列表中,所有对 Firebase 的主要依赖项、应用程序本身和框架都放在主文件中。
然而报告的崩溃表达了这一点:
java.lang.RuntimeException: Unable to instantiate receiver com.developer.appname.Reachability: java.lang.ClassNotFoundException: Didn't find class "com.developer.appname.Reachability" on path: DexPathList[[zip file "/data/app/com.developer.appname-1/base.apk"],nativeLibraryDirectories=[/data/app/com.developer.appname-1/lib/arm, /vendor/lib, /system/lib]]
android.app.ActivityThread.handleReceiver()ActivityThread.java:2926
android.app.ActivityThread.access00()ActivityThread.java:172
android.app.ActivityThread$H.handleMessage()ActivityThread.java:1499
android.os.Handler.dispatchMessage()Handler.java:102
android.os.Looper.loop()Looper.java:145
android.app.ActivityThread.main()ActivityThread.java:5832
java.lang.reflect.Method.invoke(Native Method)
java.lang.reflect.Method.invoke()Method.java:372
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run()ZygoteInit.java:1399
com.android.internal.os.ZygoteInit.main()ZygoteInit.java:1194
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.developer.appname.Reachability" on path: DexPathList[[zip file "/data/app/com.developer.appname-1/base.apk"],nativeLibraryDirectories=[/data/app/com.developer.appname-1/lib/arm, /vendor/lib, /system/lib]]
dalvik.system.BaseDexClassLoader.findClass()BaseDexClassLoader.java:56
java.lang.ClassLoader.loadClass()ClassLoader.java:511
java.lang.ClassLoader.loadClass()ClassLoader.java:469
android.app.ActivityThread.handleReceiver()ActivityThread.java:2921
... 9 more
可达性检查连接状态并从核心使用:
public class Reachability : BroadcastReceiver, IReachability { ... }
<application android:name=".appname" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:allowBackup="true">
<receiver android:name=".Reachability">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
如果应用程序离线启动,它会被正确检测到并继续显示缓存中的预期数据。当应用程序启动时也会发生同样的情况,并且连接数据从 firebase 实时显示。 强调一下,根据之前的状态,只有在连接打开或关闭时才会失败。
非常感谢,欢迎任何帮助。
Unable to instantiate receiver com.developer.appname.Reachability: java.lang.ClassNotFoundException: Didn't find class "com.developer.appname.Reachability"
我已经重现了您的问题并找到了解决方案。正如 SushiHangover 所说,Xamarin . Xamarin uses Attributes
in code to fill in the Manifest
when building. Here 是关于如何使用 Attributes
.
创建 BraoadcastReceiver
的文档
当您将 Attributes
用于 BroadcastReceiver
时:
[BroadcastReceiver(Enabled = true, Exported = false)]
[IntentFilter(new[] { Android.Net.ConnectivityManager.ConnectivityAction })]
public class Reachability : BroadcastReceiver { ... }
注册您的 BroadcastReceiver
:
Reachability mReceiver = new Reachability ();
RegisterReceiver(mReceiver, new IntentFilter(ConnectivityManager.ConnectivityAction));
它工作正常。
来自世界各地的同事们问候 xamarin.我需要帮助。
我使用 Mvvmcross 4.4 和 Firebase 在 Xamarin 中开发了一个应用程序。在 Android 项目中,我必须实施 multidex。出现的问题是当应用程序 运行 并且连接丢失(飞行模式、wifi 关闭等)时,反之亦然。
在构建 multidex 的自定义列表中,所有对 Firebase 的主要依赖项、应用程序本身和框架都放在主文件中。
然而报告的崩溃表达了这一点:
java.lang.RuntimeException: Unable to instantiate receiver com.developer.appname.Reachability: java.lang.ClassNotFoundException: Didn't find class "com.developer.appname.Reachability" on path: DexPathList[[zip file "/data/app/com.developer.appname-1/base.apk"],nativeLibraryDirectories=[/data/app/com.developer.appname-1/lib/arm, /vendor/lib, /system/lib]]
android.app.ActivityThread.handleReceiver()ActivityThread.java:2926
android.app.ActivityThread.access00()ActivityThread.java:172
android.app.ActivityThread$H.handleMessage()ActivityThread.java:1499
android.os.Handler.dispatchMessage()Handler.java:102
android.os.Looper.loop()Looper.java:145
android.app.ActivityThread.main()ActivityThread.java:5832
java.lang.reflect.Method.invoke(Native Method)
java.lang.reflect.Method.invoke()Method.java:372
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run()ZygoteInit.java:1399
com.android.internal.os.ZygoteInit.main()ZygoteInit.java:1194
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.developer.appname.Reachability" on path: DexPathList[[zip file "/data/app/com.developer.appname-1/base.apk"],nativeLibraryDirectories=[/data/app/com.developer.appname-1/lib/arm, /vendor/lib, /system/lib]]
dalvik.system.BaseDexClassLoader.findClass()BaseDexClassLoader.java:56
java.lang.ClassLoader.loadClass()ClassLoader.java:511
java.lang.ClassLoader.loadClass()ClassLoader.java:469
android.app.ActivityThread.handleReceiver()ActivityThread.java:2921
... 9 more
可达性检查连接状态并从核心使用:
public class Reachability : BroadcastReceiver, IReachability { ... }
<application android:name=".appname" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:allowBackup="true">
<receiver android:name=".Reachability">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
如果应用程序离线启动,它会被正确检测到并继续显示缓存中的预期数据。当应用程序启动时也会发生同样的情况,并且连接数据从 firebase 实时显示。 强调一下,根据之前的状态,只有在连接打开或关闭时才会失败。
非常感谢,欢迎任何帮助。
Unable to instantiate receiver com.developer.appname.Reachability: java.lang.ClassNotFoundException: Didn't find class "com.developer.appname.Reachability"
我已经重现了您的问题并找到了解决方案。正如 SushiHangover 所说,Xamarin Attributes
in code to fill in the Manifest
when building. Here 是关于如何使用 Attributes
.
BraoadcastReceiver
的文档
当您将 Attributes
用于 BroadcastReceiver
时:
[BroadcastReceiver(Enabled = true, Exported = false)]
[IntentFilter(new[] { Android.Net.ConnectivityManager.ConnectivityAction })]
public class Reachability : BroadcastReceiver { ... }
注册您的 BroadcastReceiver
:
Reachability mReceiver = new Reachability ();
RegisterReceiver(mReceiver, new IntentFilter(ConnectivityManager.ConnectivityAction));
它工作正常。