VSTS - Xamarin Proguard 版本和 JDK 1.8 的问题

Posted

技术标签:

【中文标题】VSTS - Xamarin Proguard 版本和 JDK 1.8 的问题【英文标题】:VSTS - Problems with Xamarin Proguard Version and JDK 1.8 【发布时间】:2017-05-23 05:48:25 【问题描述】:

我有一个 Xamarin Forms 项目,我正在尝试使用与 VSTS 的持续集成来与 HockeyApps 集成。 我的应用程序使用 Java 1.8 编译,它使用 ProGuard 来缩小 android apk 文件。 但是当java尝试编译应用程序时,发现proguard的Installed版本与Java 1.8不兼容 错误如下: ... 无法处理类 [android/app/ActivityTracker.class] 不支持的类版本号 [52.0] 最大 51.0,Java 1.7... 在我本地的 Visual Studio 安装中,我 fixed 它替换了 Xamarin 为最新的 5.x 安装的默认 proguard 版本...

有人知道如何使用 VSTS 吗?

详细错误:

_CompileToDalvikWithDx:
  C:\Program Files\Java\jdk1.8.0_102\\bin\java.exe -jar C:\java\androidsdk\android-sdk\tools\proguard\lib\proguard.jar -include C:\java\androidsdk\android-sdk\tools\proguard\proguard-android.txt -include obj\Release\proguard\proguard_xamarin.cfg -include obj\Release\proguard\proguard_project_references.cfg -include obj\Release\proguard\proguard_project_primary.cfg -include proguard.cfg "-injars 'obj\Release\proguard\__proguard_input__.jar';'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v7.0\mono.android.jar';'obj\Release\__library_projects__\FormsViewGroup\library_project_imports\formsviewgroup.jar';'obj\Release\__library_projects__\HockeySDK.AndroidBindings\library_project_imports\bin\classes.jar';'C:\Users\buildguest\AppData\Local\Xamarin\Xamarin.Android.Support.Animated.Vector.Drawable\23.3.0.0\embedded\classes.jar';'C:\Users\buildguest\AppData\Local\Xamarin\Xamarin.Android.Support.Design\23.3.0.0\embedded\classes.jar';'C:\Users\buildguest\AppData\Local\Xamarin\Xamarin.Android...
  java.io.IOException: Can't read [C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v7.0\mono.android.jar] (Can't process class [android/app/ActivityTracker.class] (Unsupported class version number [52.0] (maximum 51.0, Java 1.7)))
    at proguard.InputReader.readInput(InputReader.java:230)
    at proguard.InputReader.readInput(InputReader.java:200)
    at proguard.InputReader.readInput(InputReader.java:178)
    at proguard.InputReader.execute(InputReader.java:78)
    at proguard.ProGuard.readInput(ProGuard.java:196)
    at proguard.ProGuard.execute(ProGuard.java:78)
    at proguard.ProGuard.main(ProGuard.java:492)
  Caused by: java.io.IOException: Can't process class [android/app/ActivityTracker.class] (Unsupported class version number [52.0] (maximum 51.0, Java 1.7))
    at proguard.io.ClassReader.read(ClassReader.java:112)
    at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
    at proguard.io.JarReader.read(JarReader.java:65)
    at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)
    at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)
    at proguard.InputReader.readInput(InputReader.java:226)
    ... 6 more
  Caused by: java.lang.UnsupportedOperationException: Unsupported class version number [52.0] (maximum 51.0, Java 1.7)
    at proguard.classfile.util.ClassUtil.checkVersionNumbers(ClassUtil.java:140)
    at proguard.classfile.io.ProgramClassReader.visitProgramClass(ProgramClassReader.java:88)
    at proguard.classfile.ProgramClass.accept(ProgramClass.java:346)
    at proguard.io.ClassReader.read(ClassReader.java:91)
    ... 11 more
  Picked up JAVA_TOOL_OPTIONS:  -Dfile.encoding=UTF8
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2025,3): Error MSB6006: "java.exe" exited with code 1.

【问题讨论】:

您使用的是托管构建代理吗? 是的,我添加到问题中的详细错误错误消息仅在我将 system.debug 变量设置为 true 时显示,如果我不这样做,则错误描述性要少得多 我刚刚更新了 Visual Studio 的 Xamarin 并且 proguard 在我的 PC 中再次开始失败,我检查并发现 xamarin 再次将 proguard 从较新版本 (~5.2) 更新到旧版本 (4.7)跨度> 【参考方案1】:

恐怕没有任何解决方法可以解决您使用 Hosted Build Agent 的问题,因为用户无权更新 Hosted Machine 上已安装的软件。

您需要deploy your own build agent,然后手动替换文件。

【讨论】:

【参考方案2】:

原因是它使用了不兼容的JDK 1.7。您可以指定 Xamarin 构建步骤的 JDK 版本:

【讨论】:

我就是这么做的。如果我离开 JDK 7,则项目在到达编译 proguard 之前失败,当我选择 JDK 8 时,尝试编译 Proguard 失败。在我的电脑上也是这样,不同的是在我的电脑上我可以替换 xamarin 安装的 android SDK,但是在 VSTS 中我做不到。 @Boanerge 你的意思是如果使用 JDK 8,它仍然会抛出同样的错误吗?在此处提供详细的错误消息。 (你原帖的错误信息太简单了) 我对项目做了一些修改,让我回滚,这样我可以再次重现错误......

以上是关于VSTS - Xamarin Proguard 版本和 JDK 1.8 的问题的主要内容,如果未能解决你的问题,请参考以下文章

错误CS1703:已导入具有等效标识的多个程序集 - Xamarin + VSTS

Xamarin.Android VSTS 持续集成

Xamarin.iOS VSTS 无法将临时钥匙串添加到钥匙串搜索路径

如何在 VSTS 中为 Xamarin iOS 和 Android 部署添加快速通道工具

启用 PROGUARD - Xamarin.Android

Xamarin/Visual Studio 2015:自定义 Proguard 配置