Xamarin Android启用Multi-Dex失败,构建报错求助
解决Xamarin Android启用Multi-Dex后的CreateMultiDexMainDexClassList错误
从你提供的错误日志来看,核心问题是命令行参数解析失败——脚本把路径中意外的内容([2598:39D0][2016-11-22T22:11:15]i001:)当成了未知选项,这大概率是因为你的路径中包含空格(比如C:\Users\Muhammad Tayyab),导致mainDexClasses.bat无法正确解析带空格的文件路径。下面是几个针对性的解决方案:
解决方案1:迁移Android SDK到无空格路径
当前你的Build Tools路径是C:\Users\Muhammad Tayyab\AppData\Local\Android\android-sdk\build-tools\23.0.3\,路径里的空格是导致参数解析混乱的主要原因。你可以:
- 把Android SDK整个移动到没有空格的目录下,比如
C:\Android\android-sdk - 在Visual Studio中更新Android SDK路径:工具 > 选项 > Xamarin > Android设置,将SDK位置改为新的路径
- 删除项目的
obj和bin目录,清理后重新构建
解决方案2:手动指定Main Dex列表文件
跳过自动生成multidex.keep的步骤,手动创建并配置:
- 在项目根目录创建一个
multidex.keep文件,添加必须放在主Dex中的类(比如你的Application类、MultiDex相关类,以及第三方库的核心类),格式示例:com/yourcompany/yourapp/MainApplication.class android/support/multidex/MultiDex.class - 右键项目 > 属性 > Android选项 > 高级,在"Custom Main Dex List Files"中添加你创建的
multidex.keep文件路径 - 重新构建项目
解决方案3:升级Android Build Tools版本
你当前使用的Build Tools 23.0.3版本比较老旧,存在一些Multi-Dex相关的已知问题。建议升级到更高版本(比如28.0.3,选择与你的Xamarin.Android版本兼容的版本):
- 在Android SDK管理器中卸载23.0.3,安装更高版本的Build Tools
- 在项目属性中指定使用新的Build Tools版本
解决方案4:排查环境变量干扰
日志中显示传递了JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8,虽然这个变量本身没问题,但偶尔会和Xamarin的构建脚本产生冲突。你可以暂时移除这个环境变量,重启Visual Studio后尝试构建,看是否解决问题。
附加步骤:清理并重建项目
无论尝试哪个方案,都建议先执行以下操作:
- 删除项目的
obj和bin目录 - 重启Visual Studio
- 执行"清理解决方案"再"重建解决方案"
错误日志参考
MultiDexMainDexListFile: obj\Debug\multidex.keep 1> CustomMainDexListFiles: 1> ToolExe: mainDexClasses.bat 1> ToolPath: C:\Users\Muhammad Tayyab\AppData\Local\Android\android-sdk\build-tools\23.0.3\\ 1> ProguardHome: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Xamarin\Android\proguard\ 1> Environment Variables passed to tool: 1> PROGUARD_HOME=C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Xamarin\Android\proguard\ 1> JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8 1> C:\Users\Muhammad Tayyab\AppData\Local\Android\android-sdk\build-tools\23.0.3\\mainDexClasses.bat --output obj\Debug\multidex.keep "'C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ReferenceAssemblies\Microsoft\Framework\MonoAndroid\v7.0\mono.android.jar';'C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Xamarin\Android\android-support-multidex.jar';'obj\Debug\__library_projects__\Telerik.Xamarin.Android.Common\library_project_imports\bin\Common.jar';'obj\Debug\__library_projects__\Telerik.Xamarin.Android.Data\library_project_imports\bin\Data.jar';'obj\Debug\__library_projects__\Telerik.Xamarin.Android.Gauges\library_project_imports\bin\Gauges.jar';'obj\Debug\__library_projects__\Telerik.Xamarin.Android.Input\library_project_imports\bin\Input.jar';'obj\Debug\__library_projects__\Telerik.Xamarin.Android.List\library_project_imports\bin\List.jar';'obj\Debug\__library_projects__\Telerik.Xamarin.Android.Primitives\library_project_imports\bin\Primitives.jar';'obj\Debug\__library_projects__\TwilioClient.Android\library_project_imports\bin\classes.jar';'obj\Debug\__library_projects__\TwilioClient.Android\library_project_imports\libs\org.apache.http.legacy.jar';'obj\Debug\__library_projects__\Xamarin.Android.Support.Animated.Vector.Drawable\library_project_imports\bin\classes.jar';'obj\Debug\__library_projects__\Xamarin.Android.Support.Compat\library_project_imports\bin\classes.jar';'obj\Debug\__library_projects__\Xamarin.Android.Support.Core.UI\library_project_imports\bin\classes.jar';'obj\Debug\__library_projects__\Xamarin.Android.Support.Core.Utils\library_project_imports\bin\classes.jar';'obj\Debug\__library_projects__\Xamarin.Android.Support.Design\library_project_imports\bin\classes.jar';'obj\Debug\__library_projects__\Xamarin.Android.Support.Fragment\library_project_imports\bin\classes.jar';'obj\Debug\__library_projects__\Xamarin.Android.Support.Media.Compat\library_project_imports\bin\classes.jar';'obj\Debug\__library_projects__\Xamarin.Android.Support.Transition\library_project_imports\bin\classes.jar';'obj\Debug\__library_projects__\Xamarin.Android.Support.v4\library_project_imports\bin\classes.jar';'obj\Debug\__library_projects__\Xamarin.Android.Support.v7.AppCompat\library_project_imports\bin\classes.jar';'obj\Debug\__library_projects__\Xamarin.Android.Support.v7.RecyclerView\library_project_imports\bin\classes.jar';'obj\Debug\__library_projects__\Xamarin.Android.Support.Vector.Drawable\library_project_imports\bin\classes.jar';'obj\Debug\__library_projects__\Xamarin.Firebase.Common\library_project_imports\classes.jar';'obj\Debug\__library_projects__\Xamarin.Firebase.Iid\library_project_imports\classes.jar';'obj\Debug\__library_projects__\Xamarin.Firebase.Messaging\library_project_imports\classes.jar';'obj\Debug\__library_projects__\Xamarin.GooglePlayServices.Base\library_project_imports\classes.jar';'obj\Debug\__library_projects__\Xamarin.GooglePlayServices.Basement\library_project_imports\classes.jar';'obj\Debug\__library_projects__\Xamarin.GooglePlayServices.Tasks\library_project_imports\classes.jar';'C:\Users\Muhammad Tayyab\AppData\Local\Xamarin\Xamarin.Android.Support.CustomTabs\23.3.0.0\embedded\classes.jar';'obj\Debug\android\bin\classes'" 1>CREATEMULTIDEXMAINDEXCLASSLIST : error : Unknown option '[2598:39D0][2016-11-22T22:11:15]i001:' in line 1 of file 'C:\Users\Muhammad', 1> included from argument number 13 1> Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8 1> Invalid option 1> Usage: 1> 1> Short version: Don't use this. 1> 1> Slightly longer version: This tool is used by mainDexClasses script to build 1> the main dex list. 1> Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8 1> The command exited with code -1. 1>Done executing task "CreateMultiDexMainDexClassList" -- FAILED. 1>Done building target "_CompileToDalvikWithDx" in project "VoipApp.csproj" -- FAILED. 1> 1>Build FAILED.
内容的提问来源于stack exchange,提问作者u_1826
相关产品推荐
相关产品推荐

