Xamarin Java.exe退出代码1(Proguard Issue)

问题描述 投票:-1回答:2

与Xamarin的另一天!甚至无法建立我的第一个Hello World项目!不奇怪,是吗?

所以,新的Xamarin.Android空白项目。启用ProGuard,仅链接到SDK Assemblies并继续构建项目。还有哈拉!有一个错误!(等等,我不应该感到惊讶,对吧?毕竟,这是Xamarin)。这是错误:

“java.exe”退出代码1

双击该异常将打开Xamarin.Android.Common.Targets文件并指向ProGuard标记,如下所示:

<Proguard
Condition="'$(AndroidEnableProguard)' == 'True' and '$(_ProguardProjectConfiguration)' != ''"
ProguardJarPath="$(ProguardJarPath)"
AndroidSdkDirectory="$(_AndroidSdkDirectory)"
JavaToolPath="$(JavaToolPath)"
ProguardToolPath="$(ProguardToolPath)"
ToolExe="$(ProguardToolExe)"
UseProguard="$(UseProguard)"
JavaPlatformJarPath="$(JavaPlatformJarPath)"
ClassesOutputDirectory="$(IntermediateOutputPath)android\bin\classes"
AcwMapFile="$(_AcwMapFile)"
ProguardCommonXamarinConfiguration="$(IntermediateOutputPath)proguard\proguard_xamarin.cfg"
ProguardGeneratedReferenceConfiguration="$(_ProguardProjectConfiguration)"
ProguardGeneratedApplicationConfiguration="$(IntermediateOutputPath)proguard\proguard_project_primary.cfg"
ProguardConfigurationFiles="$(ProguardConfigFiles)"
JavaLibrariesToEmbed="@(_JarsToProguard);@(_InstantRunJavaReference)"
ExternalJavaLibraries="@(AndroidExternalJavaLibrary)"
DoNotPackageJavaLibraries="@(_ResolvedDoNotPackageAttributes)"
ProguardJarOutput="$(IntermediateOutputPath)proguard\__proguard_output__.jar"
EnableLogging="$(ProguardEnableLogging)"
DumpOutput="$(IntermediateOutputPath)proguard\dump.txt"
PrintSeedsOutput="$(IntermediateOutputPath)proguard\seeds.txt"
PrintUsageOutput="$(IntermediateOutputPath)proguard\usage.txt"
PrintMappingOutput="$(IntermediateOutputPath)proguard\mapping.txt"
ProguardInputJarFilter="$(_AndroidProguardInputJarFilter)"
/>

所以,我最好的猜测是它可能是与ProGuard相关的问题。所以,搜索谷歌并应用我发现到目前为止的所有修复:

  • 更新了Android SDK
  • 将Java堆大小设置为1G(甚至5G)
  • 启用Multi-Dex
  • 更新了ProGuard
  • 在解决方案中创建了一个新的proguard.cfg文件(当然将build action设置为ProGuardConfiguration并添加了必要的自定义行。

但是,同样的错误指向相同的ProGuard标签。现在在任何人开始抨击我说我可能搞乱了proguard配置文件之前,这里是它的链接:

我已经读到这是Xamarin中一个非常常见的问题。所以,我想,有人可能想出一个真正有效的解决方案!那么,关于我可能缺少的任何修正或想法?

c# android xamarin xamarin.android proguard
2个回答
2
投票
  1. 确保您添加的proguard文件不是Unicode文本文件(U + FEFF字节顺序标记(BOM)),因为proguard将失败...
  2. 启用诊断。 MSBuild的级别日志记录并获取完整的错误消息。
  3. Proguard正在被谷歌的R8取代

如果您使用的是最新版本的Xamarin,请参考此博客文章作为开头:

有关各种D8 / R8项目配置的详细信息,请参见Xamarin.Android回购:


0
投票

Proguard可能有点痛苦。通常的症状是这样的

java退出代码1

对我有用的步骤(我将这些笔记存储在我的解决方案中,因为它并不明显)。从this site解除

  1. 下载最新版的Proguard
  2. 找到Android SDK的安装位置(类似于/ android-sdk / tools / proguard)。要找到sdk,请访问Tools->Options->Xamarin
  3. 用新的Proguard换掉旧版本的Proguard。为此,将当前文件夹重命名为“Proguard-pointless”,并将新文件夹复制到tools文件夹中。
  4. 请务必将新版本的文件夹重命名为“proguard”。
  5. 确保所有配置文件也被复制到新的Proguard文件夹中。对我来说,这是proguard-android-optimize.txtproguard-android.txtproguard-project.txt
  6. 将新文件添加到名为proguard.cfg的Android项目的根目录中 注意:因为Xamarin很聪明,它使用UTF-8将这个新文件保存在BOM中,你需要更改它。可能最好在记事本中创建文件,然后将其包含在您的程序中。这是必需的,因为Proguard不会读取文件,除非它是UTF-8编码。
  7. 在VS中右键单击该文件,然后选择“属性”。对于Build Action,选择ProguardConfiguration。
  8. 将相关的keepdontwarn子句添加到没有引号的文件中(这取决于你的警告),例如它可能是这样的...... “-dontwarn com.google.android.gms。**” “-keep class com.google.android.gms。**”
  9. 完成这些步骤后,再次尝试构建。
  10. 希望这次会更成功。如果不成功,请检查您的构建输出,看看Proguard给您的警告和注释。

从这个阶段开始,需要确定需要对自定义Proguard文件进行哪些修改,一旦工作,构建就会成功。

© www.soinside.com 2019 - 2024. All rights reserved.