【问题标题】:Error after Enable Multi-Dex in Xamarin Android在 Xamarin Android 中启用 Multi-Dex 后出错
【发布时间】:2015-06-11 09:36:07
【问题描述】:

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

..\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 中的此问题。

【问题讨论】:

  • 你已经浏览过docs了吗?
  • 遇到同样的错误...您是如何解决的?
  • 我一直在阅读将 Android SDK 安装在没有空格的非默认目录(例如 C:\Android)的建议,因为默认目录位于 C:\Program Files (x86)\Android 中包含 2 个空格,这些空格与某些命令行对命令行参数结束位置的划分相混淆。在我打开 Multi-Dex 支持之前,我对默认目录没有任何问题。

标签: c# android xamarin xamarin.android


【解决方案1】:

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

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

这为我们解决了问题。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      看到这个帖子 https://bugzilla.xamarin.com/show_bug.cgi?id=44013

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

      【讨论】:

        【解决方案4】:

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

        任何人都无法访问其他解决方案或 cmets 中的某些 bugzilla 链接。 原因是 Windows 机器上的 Android SDK 存在问题。 需要对构建服务器和开发人员机器应用以下修复:

        1. 修复方法是调整 Android SDK 中的 ma​​inDexClasses.bat。搜索此文件并将修复应用于所有实例。首先是找到文件夹 android-sdk 和子 build-tools。我的路径是例如 C:\Users\YOURUSERNAME\AppData\Local\Android\android-sdk\build-tools\ 检查以 xx.x.x 等版本号命名的文件夹(例如 24.0.1)
        2. 所以在 ma​​inDexClasses.bat 文件中找到以下文本块:

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

        并替换为:

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

        1. 清理并重新构建。

        【讨论】:

        • 这不是解决我的问题.. 对你有帮助吗?
        【解决方案5】:

        请将您的 SDK 放到有足够空间的地方,然后将您的 jar 或 dll 文件放到那里它会起作用。

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-03-10
            • 1970-01-01
            • 1970-01-01
            • 2018-06-10
            • 1970-01-01
            • 1970-01-01
            • 2018-01-20
            • 2016-07-03
            相关资源
            最近更新 更多