使用Multidex

时间:2017-08-31 23:26:40

标签: android xamarin multidex

编辑 - 缩小到问题的根源

启用Multi-Dex时,我收到此错误。

  

CREATEMULTIDEXMAINDEXCLASSLIST:错误:期望类路径分隔符':'之前' .jar'在参数2中

我已将其跟踪到包含在ProGuard命令行中的此jar文件:

obj/Debug/__library_projects__/DeviceAPI_Android/library_project_imports/DeviceAPI_Android.Jars.cw-deviceapi(2016.05.16).jar

它是文件名中导致错误的括号。我已经通过删除此jar文件的终端提示符中运行命令证明了这一点,并且一切正常。

所以问题 - 这个文件来自哪里?它在包中吗?我无法在那里看到它。

如果我能找到我应该能够更正名称并构建项目。

我已将其追踪到名为DeviceAPI_Android.dll的第三方绑定库,该库包装了一个用于控制硬件条形码扫描程序的jar文件。 jar文件确实在文件名中包含括号和日期。

所以解决方案是以下一个或多个:

  • 从供应商处获取一个新版本的绑定库,其中包含更好的命名jar文件。

  • 使用更好的命名jar文件自行重建库。可能存在问题,因为我必须从头开始创建变换等。

  • 调整构建工具/ makefile,使ProGuard命令行对奇怪命名的jar文件更具弹性。

示例问题的示例项目在GitHub here上。

版本信息: ===适用于Mac的Visual Studio社区2017 ===

版本7.1(版本1297) 安装UUID:650b4c91-c7f5-4ee5-ad70-6f178f314906 运行:     单声道5.2.0.215(d15-3 / da80840)(64位)     GTK + 2.24.23(罗利主题)

Package version: 502000215

=== NuGet ===

版本:4.3.0.2418

=== .NET Core ===

运行时:未安装 SDK:未安装 MSBuild SDKs:/ Library/Frameworks/Mono.framework/Versions/5.2.0/lib/mono/msbuild/15.0/bin/Sdks

=== Xamarin.Profiler ===

版本:1.5.5 地点:/ Applications / Xamarin Profiler.app/Contents/MacOS/Xamarin Profiler

=== Xamarin.Android ===

版本:7.4.0.21(Visual Studio社区) Android SDK:/ Users / jameslavery / Library / Developer / Xamarin / android-sdk-macosx     支持的Android版本:         2.3(API级别10)         4.0.3(API级别15)         4.1(API级别16)         4.3(API级别18)         4.4(API级别19)         5.0(API级别21)         5.1(API级别22)         6.0(API级别23)         7.0(API级别24)         7.1(API级别25)

SDK工具版本:25.2.5 SDK平台工具版本:25.0.5 SDK Build Tools版本:25.0.3

Java SDK:/ Library / Java / JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home java版" 1.8.0_144" Java(TM)SE运行时环境(版本1.8.0_144-b01) Java HotSpot(TM)64位服务器VM(版本25.144-b01,混合模式)

此处提供的Android Designer EPL代码: https://github.com/xamarin/AndroidDesigner.EPL

=== Apple Developer Tools ===

Xcode 8.0(11246) 建立8A218a

=== Xamarin.iOS ===

版本:10.12.0.20(Visual Studio Community) 哈希:80b8487d 分公司:d15-3 建设日期:2017-08-18 16:07:26-0400

=== Xamarin.Mac ===

版本:3.6.0.19(Visual Studio社区)

=== Xamarin Inspector ===

版本:1.2.2 哈希:b71b035 分公司:d15-1 建造日期:2017年4月21日星期五17:57:12 GMT

===建立信息===

发布ID:701001297 Git修订版:9c5299666538b2f8baf501418a5c064d784d64da 建设日期:2017-08-07 11:29:35-04 Xamarin插件:3bb0c32a14f1b7e368bf5ac53a84c3581c019391 修建车道:monodevelop-lion-d15-3

===操作系统===

Mac OS X 10.11.6 达尔文15.6.0 Darwin内核版本15.6.0     2016年4月23日星期四18:25:34     root:xnu-3248.60.10~1 / RELEASE_X86_64 x86_64

===启用用户安装的插件===

LiveXAML 1.0 Redth的Addins 1.0.9

2 个答案:

答案 0 :(得分:0)

我已针对此问题报告了以下错误:

https://bugzilla.xamarin.com/show_bug.cgi?id=59237

请随时自行决定此问题,以便在修复后收到通知。目前,您必须通过以某种方式重命名.jar来解决此问题。

我希望这有帮助!

答案 1 :(得分:0)

这是因为有一个带有嵌入式Jar文件的绑定库,其文件名中包含括号 - 这会导致ProGuard的命令行失败。

@jondouglas已为此提交了Xamarin bug 59237。希望修复方法是使ProGuard的命令行对奇怪命名的文件更具弹性。

与此同时,我将不得不抓住一个更新的绑定库,嵌入式jar文件中没有带括号的名称(或其他破坏命令行的字符)。

感谢@jondouglas帮助诊断问题。