在 Xamarin Android 中启用 Multi-Dex 后出错

本文关键字:Multi-Dex 出错 启用 Xamarin Android | 更新日期: 2023-09-27 17:55:40

在创建 Xamarin Android 应用程序时,在添加对 Infragistics Chart 控件和 Google Play 服务的引用后,我们必须启用"Enable Multi-Dex"属性才能true(因为该应用程序达到了 65K 的 dex 方法限制)。我们收到错误

..'CREATEMULTIDEXMAINDEXCLASSLIST: Error: Expecting class path
separator ';' before
''Android'android-sdk'build-tools'21.1.1'lib'shrinkedAndroid.jar' in
argument number 8

我正在使用Xamarin Studio 版本 5.9(内部版本 431)Xamarin.Android 版本: 5.1.0

请帮助修复 Xamarin 中的此问题。

在 Xamarin Android 中启用 Multi-Dex 后出错

我们在构建服务器上遇到了同样的问题,我们不得不将 Android SDK 移动到没有空格的路径,例如 C:'android-sdk'...

显然,我们需要将ANDROID_HOME环境变量更新为新路径,并在 Xamarin Studio 和 Visual Studio 中设置 SDK 路径。

这为我们解决了问题。

对于那些不想更改Android SDK实际位置加上ANDROID_HOME env变量的人来说,一个简单的链接就足够了:

mklink /D "C:'android-sdk" "C:'Program Files (x86)'Android'android-sdk"

为了将来参考,如果你安装了JDK 1.8,还有一个错误。

查看此线程https://bugzilla.xamarin.com/show_bug.cgi?id=44013

不幸的是,公众无法访问实际的错误。https://bugzilla.xamarin.com/show_bug.cgi?id=42669

每当我进行更改或安装新的构建工具文件夹的更新时,我都会遇到这个问题。因此,我决定将解决方案存储在这里,以便谁可以从该解决方案中受益。

任何人都无法访问其他解决方案或评论中的某些 bugzilla 链接。原因是Windows机器上的Android SDK存在问题。需要将以下修补程序应用于生成服务器和开发人员计算机:

  1. 解决方法是在 Android SDK 中调整 mainDexClasses.bat。搜索此文件并将修补程序应用于所有实例。第一件事是找到文件夹android-sdk和子构建工具。例如,我的路径是C:''Users''YOURUSERNAME''AppData''Local''Android''android-sdk''build-tools''检查以版本号命名的文件夹,例如 xx.x.x(例如 24.0.1)
  2. 因此,在 mainDexClasses.bat 文件中找到以下文本块:

如果定义输出转到重定向
call "%java_exe%" -Djava.ext.dirs="%frameworkdir%" com.android.multidex.MainDexListBuilder "%disableKeepAnnotated%" "%tmpJar%" "%params%"
goto afterClassReferenceListBuilder
:重定向call "%java_exe%" -Djava.ext.dirs="%frameworkdir%" com.android.multidex.MainDexListBuilder "%disableKeepAnnotated%" "%tmpJar%" "%params%" 1>"%output%"
:afterClassReferenceListBuilder

并替换为:

SET 参数=%

参数:'=%
如果定义输出转到重定向
call "%java_exe%" -Djava.ext.dirs="%frameworkdir%" com.android.multidex.MainDexListBuilder %disableKeepAnnotated% "%tmpJar%" %params%
goto afterClassReferenceListBuilder
:重定向call "%java_exe%" -Djava.ext.dirs="%frameworkdir%" com.android.multidex.MainDexListBuilder %disableKeepAnnotated% "%tmpJar%" %params% 1>"%output%"
:afterClassReferenceListBuilder

  1. 清洁并重新构建。

请将您的 SDK 放入可用空间充足的位置,然后将您的 jar 或 dll 文件放在那里,它将起作用。

我遇到了同样的问题。要解决此问题,您必须转到项目的属性,然后在选项中Android Options打包中禁用Multi-Dex 。在调试器选项中选择 Xamarin 或不Microsoft .我认为它解决了你的问题。