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

Posted

技术标签:

【中文标题】错误 MSB6006:启用 ProGuard 时“java.exe”以代码 1 退出【英文标题】:Error MSB6006: "java.exe" exited with code 1 when ProGuard enabled 【发布时间】:2018-03-12 15:26:21 【问题描述】:

我最近几天尝试解决此问题,但仍然没有成功。 如果我在没有 proguard 的情况下构建发布版本,那么一切都很好。

我阅读了许多有关可能问题的主题,但对我的情况没有任何帮助。 到目前为止,我做了如下:

    Java 最大堆大小 - 1G 使用“mklink” - mklink /j C:\android-sdk “C:\Program Files (x86)\Android\android-sdk” 创建了自己的 proguard.cfg 内容:

一般安卓 -不要警告 org.apache.http.** -dontwarn android.net.http.AndroidHttpClient

Android 支持库

-保持类android.support.multidex.MultiDexApplication

-保持类android.support.v4.**

-保持类 android.support.v7.** 民众 *;

Google Play 结算

-保留类 com.android.vending.billing.**

Google Play 服务

-dontwarn com.google.android.gms.internal.*

-keep 类 * 扩展 java.util.ListResourceBundle 受保护的 java.lang.Object[][] getContents();

    手动将 ProGuard 更新到最新版本。

结果是 0 个警告和 1 个错误。

错误: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1929,3): 错误 MSB6006:“java.exe”以代码 1 退出。

我还能做什么? 请帮忙。

更新。 我创建了全新的应用程序“Xamarin Hello World”,并且“ProGuard”工作。因此,我的应用程序而不是系统一定有问题。 但是除了 Java 代码 1 之外,Visual Studio 没有向我显示任何其他错误。那么如何跟踪问题出在哪里?

更新 问题出在我的“proguard.cfg”文件中。我从其他来源复制内容,一行应该有评论,但事实并非如此。所以这个问题就没有了。但是现在出现了一些警告:

2>PROGUARD : warning : can't write resource [META-INF/MANIFEST.MF](Duplicate zip entry [classes.jar:META-INF/MANIFEST.MF]) 
2>Copying resources from program jar [G:\ApkiC-Sharp\GNote\GNote\GNote.Android\obj\Release\__library_projects__\Xamarin.GooglePlayServices.Basement\library_project_imports\classes.jar](TaskId:345) 
2>PROGUARD : warning : can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [classes.jar:META-INF/MANIFEST.MF]) 
2>Copying resources from program jar [G:\ApkiC-Sharp\GNote\GNote\GNote.Android\obj\Release\__library_projects__\Xamarin.GooglePlayServices.Maps\library_project_imports\classes.jar] (TaskId:345) 
2>PROGUARD : warning : can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [classes.jar:META-INF/MANIFEST.MF]) 
2>Copying resources from program jar [G:\ApkiC-Sharp\GNote\GNote\GNote.Android\obj\Release\__library_projects__\Xamarin.GooglePlayServices.Tasks\library_project_imports\classes.jar] (TaskId:345) 
2>PROGUARD : warning : can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [classes.jar:META-INF/MANIFEST.MF])

这是什么意思?有什么好担心的吗? 如何检查“ProGuard”是否正常工作?

【问题讨论】:

请参考:***.com/questions/39514518/… 我以前读过。没有帮助。 尝试使用Diagnostic MSBuild Output查找更完整的错误消息。 谢谢。它有所帮助,但其他事情出来了。详情见上。 您是否在使用任何正在添加它的 3rd-party 库?似乎某些Xamarin.GooglePlayServices被包含两次Proguard 正在优化的代码集中,这是不允许的。 【参考方案1】:

我在 Windows 10 x64 和 Visual Studio 2015 上也遇到了同样的问题。我在 Visual Studio 工具 -> 选项 ->xamarin ->java 开发工具包位置的 android 设置下将 JDK 路径设置为 JDK 1.8。它指向“C:\Program Files (x86)\Java\jdk1.7.0_55”,我将它指向“C:\Program Files\Java\jdk1.8.0_31”,问题已得到修复。

【讨论】:

【参考方案2】:

尝试启用 Multi-Dex 编译选项。

【讨论】:

以上是关于错误 MSB6006:启用 ProGuard 时“java.exe”以代码 1 退出的主要内容,如果未能解决你的问题,请参考以下文章

使用 C/C++ 获取错误消息 MSB6006 错误代码 2

当代码在 Visual Studio C++ 中正常工作时出现 MSB6006 错误

使用VS自带OpenMP时出现“错误 MSB6006 CL.exe 已退出,代码为2”

错误MSB6006:“cmd.exe”退出,运行QT应用程序的代码1

错误 MSB6006:“CL.exe”以代码 2 退出

错误 MSB6006:“lc.exe”以代码 -1 退出