c# - Xamarin.Forms (droid build) MultiDex 选项导致应用程序崩溃

标签 c# android xamarin xamarin.android xamarin.forms

我们的 Xamarin.Forms 项目已扩展到包括方法计数 >= 64k 的库,因此我们必须启用 MultiDex。 自启用它以来,机器人构建在部署到我的 Android 模拟器后立即崩溃。

我在网上搜索过,发现的唯一解决方案是卸载设备上的所有 xamarin.android 和 mono 运行时,我已经这样做了。这并没有解决它。

应用程序崩溃后,我的设备日志显示以下错误:

01-10 08:38:44.593 5" KitKat (4.4) XXHDPI Phone Error 1966 memtrack Couldn't load memtrack module (No such file or directory)
01-10 08:38:44.593 5" KitKat (4.4) XXHDPI Phone Error 1966 android.os.Debug failed to load memtrack module: -2
01-10 08:38:44.565 5" KitKat (4.4) XXHDPI Phone Error 1966 cutils-trace Error opening trace file: No such file or directory (2)
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime at android.app.ActivityThread.main(ActivityThread.java:5001)
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime Caused by: java.lang.ClassNotFoundException: Didn't find class "md5ca27074e405277e6c40e6a6588077a84.MainApplication" on path: DexPathList[[zip file "/data/app/com.cii.patrollive-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.cii.patrollive-1, /system/lib]]
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime at android.os.Looper.loop(Looper.java:136)
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime ... 11 more
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime at android.app.ActivityThread.access$1500(ActivityThread.java:135)
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime at android.app.LoadedApk.makeApplication(LoadedApk.java:507)
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime at java.lang.reflect.Method.invoke(Method.java:515)
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime at android.os.Handler.dispatchMessage(Handler.java:102)
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime at android.app.Instrumentation.newApplication(Instrumentation.java:975)
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime Process: com.cii.patrollive, PID: 1948
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4301)
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime java.lang.RuntimeException: Unable to instantiate application md5ca27074e405277e6c40e6a6588077a84.MainApplication: java.lang.ClassNotFoundException: Didn't find class "md5ca27074e405277e6c40e6a6588077a84.MainApplication" on path: DexPathList[[zip file "/data/app/com.cii.patrollive-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.cii.patrollive-1, /system/lib]]
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime at java.lang.reflect.Method.invokeNative(Native Method)
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime FATAL EXCEPTION: main
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime at dalvik.system.NativeStart.main(Native Method)
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime at android.app.LoadedApk.makeApplication(LoadedApk.java:502)
01-10 08:38:39.201 5" KitKat (4.4) XXHDPI Phone Error 1948 AndroidRuntime at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
01-10 08:38:38.917 5" KitKat (4.4) XXHDPI Phone Error 1938 memtrack Couldn't load memtrack module (No such file or directory)
01-10 08:38:38.917 5" KitKat (4.4) XXHDPI Phone Error 1938 android.os.Debug failed to load memtrack module: -2
01-10 08:38:38.845 5" KitKat (4.4) XXHDPI Phone Error 1938 cutils-trace Error opening trace file: No such file or directory (2)
01-10 08:38:38.541 5" KitKat (4.4) XXHDPI Phone Error 1926 cutils-trace Error opening trace file: No such file or directory (2)
01-10 08:38:38.469 5" KitKat (4.4) XXHDPI Phone Error 1926 memtrack Couldn't load memtrack module (No such file or directory)
01-10 08:38:38.469 5" KitKat (4.4) XXHDPI Phone Error 1926 android.os.Debug failed to load memtrack module: -2
01-10 08:38:34.757 5" KitKat (4.4) XXHDPI Phone Error 1896 android.os.Debug failed to load memtrack module: -2
01-10 08:38:34.757 5" KitKat (4.4) XXHDPI Phone Error 1896 memtrack Couldn't load memtrack module (No such file or directory)
01-10 08:38:34.729 5" KitKat (4.4) XXHDPI Phone Error 1896 cutils-trace Error opening trace file: No such file or directory (2)
01-10 08:38:34.445 5" KitKat (4.4) XXHDPI Phone Error 1880 android.os.Debug failed to load memtrack module: -2
01-10 08:38:34.445 5" KitKat (4.4) XXHDPI Phone Error 1880 memtrack Couldn't load memtrack module (No such file or directory)
01-10 08:38:34.421 5" KitKat (4.4) XXHDPI Phone Error 1880 cutils-trace Error opening trace file: No such file or directory (2)
01-10 08:38:34.145 5" KitKat (4.4) XXHDPI Phone Error 1866 android.os.Debug failed to load memtrack module: -2
01-10 08:38:34.145 5" KitKat (4.4) XXHDPI Phone Error 1866 memtrack Couldn't load memtrack module (No such file or directory)
01-10 08:38:34.113 5" KitKat (4.4) XXHDPI Phone Error 1866 cutils-trace Error opening trace file: No such file or directory (2)

最佳答案

您的应用程序崩溃的原因可能有两个:

  1. 您的 MainApplication 没有 ACW 名称,因此会为您生成一个。

Android Callable Wrappers will be based on the MD5SUM of the assembly-qualified name of the type being exported.

在您发布的示例中,我们看到了 md5ca27074e405277e6c40e6a6588077a84.MainApplication。因此,当我们在 dexlist 上查找 MainApplication 时,我们希望得到准确的名称。因此,将名称更改为更理想的名称(例如包名称)会有所帮助。

https://developer.xamarin.com/releases/android/xamarin.android_5/xamarin.android_5.1/#Android_Callable_Wrapper_Naming

  1. MainApplication 类未放在主 classes.dex 列表中,因此在启动时,它会尝试查找该类但找不到,因为它在辅助列表中classes2.dex 文件。在初始化 Multidex 之前,不会加载辅助 .dex 文件。您可以在此处阅读有关 Multidex 的更多信息:

http://www.jon-douglas.com/2016/09/05/xamarin-android-multidex/

http://www.jon-douglas.com/2016/09/23/xamarin-android-multidex-keep/

关于c# - Xamarin.Forms (droid build) MultiDex 选项导致应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41621933/

相关文章:

c# - 将字符串拆分为多个元素

c# - 使用泛型实现类型安全的枚举模式

ios - Xamarin 中的 IBInspectable

android - 非自定义签名的 APK(通过调试生成)运行正常但自定义签名的 APK(发布)不起作用的可能原因是什么?

ios - Xamarin iOS 应用程序仅在 Release模式下启动时崩溃。 xamarin_initialize EXC_BAD_ACCESS

c# - 匈牙利字符的邮件问题

c# - 无法从 MySQL 获取值并打印到 TextBox

java - 关于 Bitmap 以不同方式转换为 ByteArray 的困惑

安卓权限 : Opposite to "Full Internet Access"

java - 运行代码时出错,我尝试了 MultidexEnabled 但没有成功