“Java.exe”以代码 1 退出(Proguard 问题)

Posted

技术标签:

【中文标题】“Java.exe”以代码 1 退出(Proguard 问题)【英文标题】:"Java.exe" exited with code 1 (Proguard issue) 【发布时间】:2016-11-04 00:12:11 【问题描述】:

在 Release 中构建 Xamarin.android 应用时出现以下错误。

"Java.exe" exited with code 1

这是输出...

...    
1> java.io.IOException: Can't read [C:\Users\FranciscoJavier\AppData\Local\Android\android-sdk\platforms\android-24\android.jar] (Can't process class [java/nio/charset/CharsetDecoder.class] (Unsupported class version number [52.0] (maximum 51.0, Java 1.7)))
1> at proguard.InputReader.readInput(InputReader.java:230)
1> at proguard.InputReader.readInput(InputReader.java:200)
1> at proguard.InputReader.readInput(InputReader.java:178)
1> at proguard.InputReader.execute(InputReader.java:100)
1> at proguard.ProGuard.readInput(ProGuard.java:196)
1> at proguard.ProGuard.execute(ProGuard.java:78)
1> at proguard.ProGuard.main(ProGuard.java:492)
1> Caused by: java.io.IOException: Can't process class [java/nio/charset/CharsetDecoder.class] (Unsupported class version number [52.0] (maximum 51.0, Java 1.7))
1> at proguard.io.ClassReader.read(ClassReader.java:112)
1> at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
1> at proguard.io.JarReader.read(JarReader.java:65)
1> at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)
1> at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)
1> at proguard.InputReader.readInput(InputReader.java:226)
1> ... 6 more
1> Caused by: java.lang.UnsupportedOperationException: Unsupported class version number [52.0] (maximum 51.0, Java 1.7)
1> at proguard.classfile.util.ClassUtil.checkVersionNumbers(ClassUtil.java:140)
1> at proguard.classfile.io.LibraryClassReader.visitLibraryClass(LibraryClassReader.java:89)
1> at proguard.classfile.LibraryClass.accept(LibraryClass.java:301)
1> at proguard.io.ClassReader.read(ClassReader.java:86)
1> ... 11 more
1> Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
1>C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2118,3): error MSB6006: "java.exe" exited with code 1.
1>Done executing task "Proguard" -- FAILED.
1>Done building target "_CompileToDalvikWithDx" in project "Elfo.VisionShop.Droid.csproj" -- FAILED.
1>
1>Build FAILED.

读取输出消息,ProGuard 似乎有问题,有人知道我该怎么办吗?

【问题讨论】:

问题是您正在为不支持的 Java 8 进行编译:Unsupported class version number [52.0] (maximum 51.0, Java 1.7) 好的,但是...我怎样才能改变它以使用 Java 1.7 进行编译? ***.com/q/11364761/3788176 我不明白那个解决方案... Xamarin Android ProGuard Enable的可能重复 【参考方案1】:

只需从官方网站http://proguard.sourceforge.net/更新proguard (替换 $SDK_DIR/tools/proguard/ 中的文件夹)

【讨论】:

【参考方案2】:

你可以在这里看到问题:

Caused by: java.io.IOException: Can't process class [java/nio/charset/CharsetDecoder.class] (Unsupported class version number [52.0] (maximum 51.0, Java 1.7))

解决方案: 将您的 Java 目标更改为 7 (1.7)。

【讨论】:

安装 jdk 1.7 从文件 -> 项目结构更改它 Giannisf,我不明白你的意思...文件 -> 项目来自哪里?视觉工作室?请给我更多的细节。提前非常感谢:-) @Fran_gg7 在 Android Studio 中。如果您使用的是Xamarin,请参阅论坛forums.xamarin.com/discussion/16210/…的这篇帖子 我刚刚检查过我已经在使用 SDK 1.7...,如您所见:s31.postimg.org/xqvxi9tqz/Untitled.png 还要确保你有最新的proguard。默认的 android sdk 没有最新的 proguard。您需要在 android sdk 文件夹中下载并手动替换【参考方案3】:
**Error : while running app “Java.exe” exited with code**

我通过手动覆盖 java 堆大小解决了这个问题:在 Visual Studio 中:

    右键单击项目 点击Android 属性 点击Android 选项 选择高级选项卡然后高级android构建设置 将 Java 最大堆大小设置为 1G(或更大,如果需要)

项目现在构建。

【讨论】:

这对我有用。如果您在输出中看到类似-1073740791 的错误代码,这应该是解决方案。 -1073740791 实际上是0xC0000409,实际上是Stack buffer overflow,这是……站点的名称。 :-)【参考方案4】:

遇到同样的问题,对我来说,以下工作有效(这是导致此错误的特定情况 - 可能不是唯一的):

将构建日志详细程度设置为详细:在 VS2017 中 -> 工具 -> 选项 -> 项目和解决方案 -> 构建并运行 ->MSBuild 项目构建输出详细程度 -> 详细(最低)

开始构建。 在输出日志中(例如在输出窗口中)搜索

proguard.ParseException:

如果日志包含以下内容:

proguard.ParseException: 文件 'proguard.cfg' 第 1 行中的未知选项 '´╗┐-keep'

然后只需在文本编辑器中打开您的文件并在没有 BOM 的情况下保存它。

例如。在 Notepad++ Encoding -> Encode in UTF8 (确保不要选择 Encode in UTF8-BOM) ...并保存

重建您的项目/解决方案。它应该有效 - 至少它对我有效。

【讨论】:

你不需要说你知道帖子是旧的:你可以回答一个问题(假设它是一个实际的答案,这是)帖子是 2 分钟,还是 2岁。也需要定期更新 我在构建日志中注意到了这个错误,但我不知道为什么会这样。非常感谢编码提示。

以上是关于“Java.exe”以代码 1 退出(Proguard 问题)的主要内容,如果未能解决你的问题,请参考以下文章

ProGuard:“java.exe”在添加 ModernHTTPClient 后以代码 1 退出

Xamarin Java.exe 以代码 1 退出(Proguard 问题)

错误 MSB6006:启用 ProGuard 时“java.exe”以代码 1 退出

为啥我的 Xamarin.Android 项目不能在启用 Proguard 的情况下构建:“java.exe”退出代码 1

Xamarin.Forms Java.exe退出,代码为1

Xamarin Forms error MSB6006: “java.exe”已退出,代码为 2 解决办法