我最近打破了Dalvik限制(https://developer.android.com/studio/build/multidex.html) 当我开始得到64K参考时
将一些nugets更新到MonoDroid 7后出现/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/ Xamarin.Android.Common.targets:错误:工具退出代码:2。 输出:写入输出错误:字段引用太多:77369;最大 是65536.您可以尝试使用--multi-dex选项。
错误。
当我在android设置中打开MultiDex选项并编译我的项目时,我得到了 -
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets: 错误:退出代码的工具:10。输出:错误:无法读取 [/Library/Frameworks/Xamarin.Android.framework/Versions/7.0.1-3/lib/xbuild-frameworks/MonoAndroid/v7.0/mono.android.jar] (不能处理类[android / app / ActivityTracker.class](不支持 类版本号[52.0](最大51.0,Java 1.7))) (pjr.mob.android)
我可以看到与此相关的BUG -
https://bugzilla.xamarin.com/show_bug.cgi?id=44187
https://bugzilla.xamarin.com/show_bug.cgi?id=44013
https://bugzilla.xamarin.com/show_bug.cgi?id=33052
https://bugzilla.xamarin.com/show_bug.cgi?id=35491
看起来我必须手动下载并安装ProGuard 5.X,详见这些答案 -
Xamarin.Android Proguard - Unsupported class version number 52.0
Xamarin Android ProGuard Enable
并克服由此引起的任何问题。
然而,Xamarin Studio在proguard选项旁边的(i)信息框中明确告诉我们,不建议为DEBUG构建运行proguard,并且我们应该首先尝试proguard后运行multidex。
这是否意味着我们在启用后无法有效调试?但是我无论如何都无法进行DEBUG(我甚至无法使用我认为可能有帮助的链接器运行发布版本)现在没有启用它?
是否有某种Xamarin支持,或者我需要以某种方式减少我们使用的软件包等(我不确定我能做什么,因为大部分都与Google Play服务有关)。
感谢任何帮助。
来自Xamarin Studio帮助的其他信息>约
Java SDK:/ usr java版本" 1.8.0_112" Java(TM)SE运行时环境(版本1.8.0_112-b16) Java HotSpot(TM)64位服务器VM(版本25.112-b16,混合模式)
答案 0 :(得分:5)
Unsupported class version number [52.0] (maximum 51.0, Java 1.7)
1st)你得到的错误是没有安装Java v8 和/或Xamarin配置使用它。
参考:java Lang UnsupportedClassVersion Error in Xamarin Studio
2nd)MultiDex
可以在没有Proguard
的情况下使用,仅在API-20及以下版本中使用。启用Multi-Dex
可使Android SDK工具根据需要创建尽可能多的第二性别文件。
第3条)如果您启用Proguard
,则应该考虑将proguard.jar
中的android-idk
替换为Facebook版本,因为它的速度要快得多; - )
参考:https://github.com/facebook/proguard
或使用基于SourceForge的:
参考:Xamarin.Android Proguard - Unsupported class version number 52.0
答案 1 :(得分:2)
为了明确我未来读者所处的位置 -
a)52.0错误是因为包含的带有Xamarin的ProGuard版本需要更新到最新版本(即使在我将JDK升级到1.8之后) -
Xamarin.Android Proguard - Unsupported class version number 52.0
注意:AFAIIA:我没有先修复proguard错误就无法运行multi-dex。
b)不幸的是,Xamarin Studio允许你为调试构建提供专业保护,但是反过来实际上并没有为调试版本运行ProGuard,如果你是一个非常新的使用它并试图弄清楚事情是如何挂在一起造成混淆。 / p>
xamarin docs在检查时会告诉你这一点,这可能是VS的情况 -
默认情况下禁用ProGuard。启用ProGuard选项是 仅在项目设置为“释放”模式时可用。所有ProGuard 除非选中“启用ProGuard”,否则将忽略构建操作。
c)因此,当达到MultiDex限制时;为了进步 -
DEBUG - 仅启用Multiplex,这应该(在工作时,我仍然在XS中工作)允许您按预期绕过64K错误并且调试将按预期工作。 您应该像往常一样将链接器保留为No Linking以进行调试构建。
RELEASE - 首先启用ProGuard以查看是否可以将其配置为降低方法计数而不需要开销或多重索引,因为它在运行时引入了辅助方法。 如果您不想使用Proguard配置,那么作为一个中间步骤,DEBUG的multidex设置应该在完全测试后适用于您的版本。
当任何文档声明你应首先尝试ProGuard然后再使用multidex时,它意味着只用于RELEASE而不是用于调试版本。
更新:我还必须通过Xamarin支持来构建我的Multi-dex,但从https://releases.xamarin.com/stable-release-cycle-8-service-release-1/开始,现在工作正常。我在XS中的Android项目有一个自定义应用程序类,当勾选Multidex时,所需的multidex类中的构建工具没有正确地继承它。
答案 2 :(得分:0)
在Xamarin Studio下 - >偏好 - >项目 - > SDK位置 - > Andorid指向了一个我不再使用的目录,用于更新的SDK更新。将其更改为指向正确的SDK目录并构建成功。