当前位置: 首页 > 知识库问答 >
问题:

在Xamarin Studio中启用MultiDex或ProGuard时出错

戚兴思
2023-03-14

我最近打破了64K参考的Dalvik限制(https://developer.android.com/studio/build/multidex.html

/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/XamarinAndroid。Common.targets:错误:工具退出代码:2.输出:麻烦写入输出:字段引用过多:77369;max为65536。您可以尝试使用--Multi-dex选项。

更新MonoDroid 7的某些NUGET后出错。

当我在android设置中打开MultiDex选项并编译我的项目时,我得到-

/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets:错误:工具退出代码:10。输出:错误:无法读取[/库/框架/Xamarin。ndroid.framework/Versions/7.0.1-3/lib/xbuild-frameworks/MonoAndroid/v7.0/mono.android.jar](不能处理类[android/app/ActivityTracker.class](不支持的类版本号[52.0](最大51.0,Java1.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如这些答案中详述的那样-

沙马林。Android Proguard-不支持的类版本号52.0

Xamarin Android ProGuard启用

并克服由此产生的任何问题。

然而,Xamarin Studio在proguard选项旁边的(i)信息框中明确告诉我们,不建议为调试构建运行proguard,我们应该在尝试proguard之后才运行multidex。

这是否意味着我们在启用后不能有效地调试?但是我不能调试无论如何(我甚至不能运行一个发布构建,即使我认为可能有帮助的链接)现在没有启用它?

是否有某种Xamarin支持,或者我是否需要考虑以某种方式减少我们使用的软件包等(我不确定我能做什么,因为大部分都与Google Play服务相关)。

任何帮助都很感激。

来自Xamarin Studio帮助的其他信息

JavaSDK: /usrjava版本"1.8.0_112"Java(TM)SE运行时环境(构建1.8.0_112-b16)JavaHotSpot(TM)64位服务器VM(构建25.112-b16,混合模式)

共有3个答案

韶镜
2023-03-14

在Xamarin工作室之下-

东门胤
2023-03-14

为了向未来的读者阐明我的观点-

a)52.0错误是由于包含Xamarin的ProGuard版本需要更新到最新版本(即使在我将JDK升级到1.8之后)-

沙马林。Android Proguard-不支持的类版本号52.0

注意:AFAIIA:如果不先修复proguard错误,我无法运行multi-dex。

b) 不幸的是,Xamarin Studio允许您为调试构建勾选pro guard,但反过来又不会为调试构建实际运行ProGuard,如果您非常不熟悉如何使用ProGuard来解决问题,就会造成混乱。

xamarin文档在检查时告诉您这一点,这可能是VS的情况-

默认情况下禁用ProGuard。只有当项目设置为发布模式时,启用ProGuard选项才可用。除非选中启用ProGuard,否则将忽略所有ProGuard构建操作。

c) 因此,当达到多指标极限时;为了进步-

调试-仅启用多路复用,这应该(在工作时,我仍在使用XS)允许您按预期绕过64K错误,调试将按预期工作。对于调试生成,您应该像往常一样将链接器设置为“无链接”。

释放-首先启用ProGuard,看看您是否可以配置它来降低您的方法计数,而不需要开销或多德克斯,因为它在运行时引入了次要方法。如果你不想弄乱ProGuard配置,那么作为一个中间步骤,你从DEBUG进行的Multidex设置应该在完全测试后适用于你的版本。

当任何文档说明您应该首先尝试ProGuard,然后尝试multidex时,这意味着只针对一个版本,而不是调试构建。

更新:我还必须通过Xamarin支持来构建我的Multi-dex,但从https://releases.xamarin.com/stable-release-cycle-8-service-release-1/这是现在工作良好。我在XS中的Android项目有一个自定义应用程序类,当勾选multidex时,构建工具没有从所需的multidex类正确继承该类。

皇甫卓君
2023-03-14

不支持的类版本号[52.0](最多51.0,Java 1.7)

1)您得到的错误是因为没有安装Java v8和/或配置Xamarin来使用它。

Ref: java ang不支持Xamarin Studio中的ClassVersion错误

第二)MultiDex可以在没有Proguard的情况下使用,并且仅在API-20及以下版本上需要。启用Multi-Dex可以让Android SDK工具根据需要创建尽可能多的辅助性文件

第3)如果您正在启用Proguard,则应考虑更换Proguard。jar在您的android idk中使用Facebook版本,因为它要快得多;-)

裁判:https://github.com/facebook/proguard

或者使用基于SourceForge的版本:

参考:Xamarin。Android ProGuard-不支持的类版本号52.0

 类似资料:
  • 我得到以下错误: 找不到[Android/view/view](有2个已知超级类)和[com/rey/Material/widget/listpopupwindow$DropDownListView](有2个已知超级类)的通用超级类

  • 问题内容: 我的应用程序在没有启用proguard的情况下可以完美运行,但是当我启用它时,该应用程序立即崩溃。我尝试了配置中的许多组合都无济于事。 有什么我应该保留的东西,我丢失了吗? proguard配置:https : //gist.github.com/hanleyhansen/99fc07807950bae8e4f5 完整的日志:https ://gist.github.com/hanle

  • 这几天我试图解决这个问题,但还是没有成功。如果我建立发布版本没有proGuard然后一切都好。 我读了许多关于可能问题的话题,但对我来说没有任何帮助。到目前为止,我做了如下: Java最大堆大小-1G 一般Android-dontwarnorg.apache.http.**-dontwarnandroid.net.http.Android HttpClient -保持课堂秩序。支持多重索引。多索引

  • 你好,我想缩小我的apk文件在反应本地与proGuard.后启用proGuard在我的bulid.gradle文件: def ENABLEPROGUARDINRELEASEBILDS=true 运行此代码后,我遇到错误: 错误: F:\awesomeproject\android\app\build\intermediates\transform\proguard\release\0。ja:D8:

  • 在发布模式下,当我只启用multi-dex时,我的应用程序大小为33.30MB,这相当大。经过一系列的研究,我意识到PROGUARD缩小了apk的大小。在我的解决方案中启用proguard,会出现此错误。PROGUARD的解决方案中可能缺少什么(缩小我的应用程序大小)? proguard.cfg

  • 我正在工作xamarin应用程序。当我启用"ProGuard"在Android属性,而建立的应用程序,我得到以下错误: 开发环境: Visual Studio 2015 Xamarin 4.0。4.4