【问题标题】:Xamarin.Android release build crash on startup with r8使用 r8 启动时 Xamarin.Android 版本构建崩溃
【发布时间】:2021-06-04 19:26:58
【问题描述】:

编辑: 请注意,使用 Proguard 或调试时不会出现以下问题。仅在发行版中出现 R8 问题

重现步骤:

  • 创建一个新的空白 Xamarin.Android 应用程序
  • 不做任何更改,只需在调试中运行,确保项目编译并运行
  • 启用 r8 和多 dex:

  • 创建发布 APK

运行release APK时,会在启动时崩溃并报错:

2021-06-04 11:35:01.818 20194-20194/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.companyname.app1, PID: 20194
    java.lang.RuntimeException: Unable to instantiate application androidx.multidex.MultiDexApplication: java.lang.ClassNotFoundException: Didn't find class "androidx.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/com.companyname.app1-S2R0G2ABxfLbmKhyk54SLg==/base.apk"],nativeLibraryDirectories=[/data/app/com.companyname.app1-S2R0G2ABxfLbmKhyk54SLg==/lib/x86, /data/app/com.companyname.app1-S2R0G2ABxfLbmKhyk54SLg==/base.apk!/lib/x86, /system/lib, /system/product/lib]]
        at android.app.LoadedApk.makeApplication(LoadedApk.java:1226)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6431)
        at android.app.ActivityThread.access$1300(ActivityThread.java:219)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1859)
        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 "androidx.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/com.companyname.app1-S2R0G2ABxfLbmKhyk54SLg==/base.apk"],nativeLibraryDirectories=[/data/app/com.companyname.app1-S2R0G2ABxfLbmKhyk54SLg==/lib/x86, /data/app/com.companyname.app1-S2R0G2ABxfLbmKhyk54SLg==/base.apk!/lib/x86, /system/lib, /system/product/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:76)
        at android.app.Instrumentation.newApplication(Instrumentation.java:1148)
        at android.app.LoadedApk.makeApplication(LoadedApk.java:1218)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6431) 
        at android.app.ActivityThread.access$1300(ActivityThread.java:219) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1859) 
        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) 

我玩过链接选项,但它们都产生相同的结果。

可以在这里找到一个简单的项目: https://drive.google.com/file/d/1oihKvJnRjxGiOaa2JS0FYKlQYI615p91/view?usp=sharing

非常感谢任何帮助!

【问题讨论】:

  • 关注multidex官方文档:Configure your app for multidex
  • 嗨@CherryBu-MSFT 我遇到了Xamarin 问题,而不是原生Android。谢谢。
  • 只是我能够使用具有相同项目的 Mac 构建的更新......所以我怀疑这是 Visual Studio 的问题。在 Mac 上,执行清理然后构建 APK 工作正常。
  • 也许,我有时也会遇到同样的问题,很高兴听到您解决了问题。

标签: android xamarin android-r8


【解决方案1】:

启用 multidex 时,必须使用正确的 multidex 库(com.android.support:multidex:1.0.3androidx.multidex:multidex:2.0.1)。由于类 androidx.multidex.MultiDexApplication 缺失,请使用 androidx.multidex:multidex:2.0.1。可能是 Xamarin 中的项目模板默认为com.android.support:multidex:1.0.3

详情请见Multidex support prior to Android 5.0

【讨论】:

猜你喜欢
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
  • 2020-05-13
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 2022-10-07
相关资源
最近更新 更多