将 Xamarin 映射 nuget 包添加到我的应用程序后,我得到了 Java.exe 已退出并显示代码 2 错误。我在安卓选项中启用了多 dex,现在出现以下错误:
在"\Android\android-sdk\build-tools\26.0.0-preview\lib\shrinkedAndroid.jar"之前需要类路径分隔符";">
我重新安装了Android SDK,并确保我拥有最新版本,但是我仍然收到错误。我花了很多时间在谷歌上搜索这个问题并尝试不同的解决方案,但是我还没有找到一个可以工作的解决方案
在当前版本中,multi-dex 存在一些问题。更新到 Visual Studio 2017 13.2 可能会解决您提到的问题。如果没有,您可以尝试两件事:
- 要修复类路径分隔符错误,请将您的 Android SDK 放在没有空格的路径中,即:
C:android-sdk
并更改 Tools>Options>Xamarin>Android SDK 位置中的路径。
如果不想移动 SDK,可以使用命令行创建链接:
mklink /D "C:android-sdk" "C:Program Files (x86)Androidandroid-sdk"
- 即使启用了 Multi-dex,它也不会运行:
当您在Android项目属性中勾选"启用Multi-Dex"选项时,您将看到更改反映在csproj中,如您所期望的那样
<AndroidEnableMultipleDex>true</AndroidEnableMultipleDex>
但是,如果您仔细观察,还有另一个类似的 xml 节点将其值保留为 false:
<AndroidEnableMultiDex>false</AndroidEnableMultiDex>
注意"MultiDex"和"MultipleDex"之间的区别将第二个更改为 true 将成功。
我在将带有 nuget 包的地图添加到我的应用程序时遇到了同样的问题。
只需从链接更改最新的ProGuard.jar文件并从您的Android SDK->工具中恢复>ProGuard->lib->progaurd.jar
和右键单击您的Android项目->选择选项->构建->Android构建->启用Proguard并启用Multidex以及转到高级->java堆大小放1G。
我在运行Visual Studio 2017 v 15.2时遇到了同样的问题。
如前所述,当您向解决方案添加了足够的 nuget 和包以超过标准 dex 文件中的 65k 方法限制时,会出现这种情况,这需要您启用多 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 的位置移动到没有空格的路径。