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

时间:2019-04-06 21:22:40

标签: c# android xamarin xamarin.android proguard

与Xamarin的另一天!甚至无法建立我的第一个Hello World项目!不足为奇吧?

因此,全新的Xamarin.Android空白项目。启用 ProGuard ,链接到仅SDK组件,然后继续构建项目。还有 wallah !! !有个错误!(等等,我不应该感到惊讶,对吧?毕竟是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 相关的问题。因此,搜索了google并应用了我到目前为止找到的所有修复程序:

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

但是,仍然存在指向同一ProGuard标签的相同错误。现在,在有人开始抨击我说我可以弄乱proguard配置文件之前,这是指向它的链接:

我已经读到这是Xamarin中非常普遍的问题。因此,我想也许有人想出了一个真正可行的解决方案!。那么,关于我可能会缺少的任何修补程序或想法?

3 个答案:

答案 0 :(得分:1)

  1. 确保您添加的proguard文件不是Unicode文本文件(U + FEFF字节顺序标记(BOM)),因为proguard将会失败...

  2. 启用诊断。级别的MSBuild日志记录并获取完整的错误消息。

  3. Proguard已被Google的R8取代

如果您使用的是最新版本的Xamarin,请以以下博客文章开头:

有关各种D8 / R8项目配置的详细信息,可以在Xamarin.Android存储库中找到:

答案 1 :(得分:0)

Proguard 可能会有些痛苦。通常的症状是

  

java以代码1退出

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

解除
  1. 下载最新版本的 Proguard
  2. 找到您的 Android SDK 的安装位置(类似于/ android-sdk / tools / proguard”)。要找到SDK,请转到Tools->Options->Xamarin
  3. 用新版本替换旧版本的 Proguard 。为此,将当前文件夹重命名为“ Proguard-pointless”,然后将新文件夹复制到tools文件夹。
  4. 请确保将新版本的文件夹重命名为“ proguard”。
  5. 确保还将所有配置文件也复制到新的 Proguard 文件夹中。对我来说,这是proguard-android-optimize.txtproguard-android.txtproguard-project.txt
  6. 将新文件添加到您的 Android 项目的根目录中,名为proguard.cfg

    注意:因为 Xamarin 很聪明,所以它会用UTF-8将这个新文件保存在BOM中,您需要对此进行更改。最好在记事本中创建文件,然后将其包含在程序中。 这是必需的,因为Proguard不会以UTF-8编码读取文件。

  7. 在VS中右键单击,然后选择属性。对于“构建操作”,选择 ProguardConfiguration
  8. 在文件中添加不带引号的相关keepdontwarn子句(这取决于您的警告),例如,可能是这样的……
    • “-dontwarn com.google.android.gms。**”
    • “-保持com.google.android.gms类。**”
  9. 完成这些步骤后,请再次尝试构建。
  10. 希望这次会更加成功。如果不成功,请检查您的构建输出,并查看 Proguard 给您的警告和注意事项。

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

答案 2 :(得分:0)

将Proguard升级到较新版本后,我没有添加文件:roguard-android-optimize.txt,proguard-android.txti proguard-project.txt,这就是问题所在。添加文件后,项目将正确构建。