多DEX Xamarin地图 Android问题

3
在将Xamarin地图NuGet包添加到我的应用程序后,我遇到了Java.exe已退出代码2错误。我在Android选项中启用了multi-dex,现在出现以下错误: 期望类路径分隔符';'在'\Android\android-sdk\build-tools\26.0.0-preview\lib\shrinkedAndroid.jar'之前。 我重新安装了Android SDK,并确保我拥有最新版本,但我仍然遇到错误。我花了很多时间搜索这个问题并尝试不同的解决方案,但我没有找到一个可行的方法。

不包括Maps NuGet时,它是否有效?我不确定这是否与问题有关。 - Steven Thewissen
3个回答

2

当前版本存在多dex问题。升级到Visual Studio 2017 13.2可能会解决你提到的问题。如果不能,你可以尝试以下两个方法:

  1. 为了修复类路径分隔符错误,请将Android SDK放在没有空格的路径中,例如:C:\android-sdk\并在Tools>Options>Xamarin>Android SDK Location中更改路径。

如果您不想移动SDK,可以通过命令行创建链接:

mklink /D "C:\android-sdk" "C:\Program Files (x86)\Android\android-sdk"
  1. 如果启用了Multi-dex,但仍无法运行:

当您在Android项目属性中勾选“启用Multi-Dex”选项时,您会看到如预期的在csproj文件中反映出相应的更改。

<AndroidEnableMultipleDex>true</AndroidEnableMultipleDex>

但是如果您仔细看,还有另一个类似的XML节点将其值保持为false:

<AndroidEnableMultiDex>false</AndroidEnableMultiDex>

注意“MultiDex”和“MultipleDex”的区别,将第二个更改为true将解决问题。

更新Proguard、启用Multidex,最重要的是重新定位Android SDK,这些组合解决了我所有的问题。谢谢。 - c.r
1
今天早上转到一个新项目后,创建了一个新项目并添加Telerik nuget包后,这个错误再次出现。当我去编辑.csproj文件时,根本没有<AndroidEnableMultiDex>标签。手动添加后,项目可以正常构建。只是提供这个信息,以防有人遇到类似的问题。 - c.r

1

在我的应用程序中使用NuGet包添加地图时,遇到了相同的问题。

只需从链接更改最新的proguard.jar文件,并替换您的Android SDK ->工具 -> proguard -> lib -> progaurd.jar

然后,右键单击您的Android项目 ->选择选项 ->构建 -> Android构建 -> 启用ProGuard并启用multidex,然后转到高级 -> Java堆大小设置为1G。


0

我在运行Visual Studio 2017 v15.2时遇到了同样的问题。

正如之前提到的那样,当您向解决方案添加了足够的NuGet和包以超过标准dex文件中的65k方法限制时,就会出现这种情况,需要启用multi-dex。

正如其他人所指出的,启用multi-dex并不总是解决问题,因为它会在.csproj文件中打开一个名为“AndroidEnableMutipleDex”的标志。因此,如上所建议,我添加了节点

<AndroidEnableMultiDex>true</AndroidEnableMultiDex>

但是,由于我对.csproj文件的格式不太熟悉,所以我忘记在两个地方都添加它。

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
 ... 

     <AndroidEnableMultipleDex>true</AndroidEnableMultipleDex> 
     <AndroidEnableMultiDex>true</AndroidEnableMultiDex>
</PropertyGroup>

并且

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
 ... 

     <AndroidEnableMultipleDex>true</AndroidEnableMultipleDex> 
     <AndroidEnableMultiDex>true</AndroidEnableMultiDex>
</PropertyGroup>

是的,这是一个基本错误,但如果你不习惯手动编辑 .csproj 文件,特别是如果你第一次涉足这个领域并且甚至不确定错误来自哪里,那么很容易犯错。

另外,正如其他人指出的那样,你需要将 Android sdk 的位置移动到没有空格的路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接