Xamarin Java.exe завершен с кодом 1 (проблема Proguard) - PullRequest
0 голосов
/ 07 апреля 2019

Еще один день с Xamarin! Не могу даже построить мой первый Hello World проект! Не удивительно, а?

Итак, новый новый Xamarin.Android пустой проект. Включил ProGuard , ссылку на Только сборки SDK и продолжил сборку проекта. И Уолла !! Ошибка! (Подожди, я не удивлюсь, верно? В конце концов, это Ксамарин). Вот ошибка:

"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. Так что, думаю, кто-то мог бы придумать решение, которое действительно работает! . Итак, какие-нибудь исправления или идеи о том, чего мне не хватает?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2019
  1. Убедитесь, что добавленный вами файл proguard НЕ является текстовым файлом Unicode (метка порядка байтов U + FEFF (BOM)), так как proguard завершится ошибкой ...

  2. Включить диаг. логирование уровня для MSBuild и получение полного сообщения об ошибке.

  3. Proguard заменяется Google R8

Если вы используете последнюю версию Xamarin, обратитесь к этому сообщению в блоге как к началу:

Подробную информацию о различных конфигурациях проекта D8 / R8 можно найти в репозитории Xamarin.Android здесь:

0 голосов
/ 07 апреля 2019

Proguard может быть немного болезненным.Обычный симптом - что-то вроде

java, завершенный с кодом 1

Шаги, которые работали для меня (у меня были эти заметки, сохраненные в моем решении, потому что это не было очевидно).Поднято с этого сайта

  1. Загрузите последнюю версию Proguard
  2. Найдите, где установлен ваш Android SDK (что-то вроде / android-sdk / tools / proguard »).Чтобы найти SDK, перейдите на Tools->Options->Xamarin
  3. Замените старую версию Proguard на новую.Для этого переименуйте текущую папку во что-то вроде «Proguard-pointless» и скопируйте новую в папку инструментов.
  4. Обязательно переименуйте папку, чтобы новая версия была просто «proguard».
  5. Убедитесь, что все файлы конфигурации также скопированы в новую папку Proguard ,Для меня это были proguard-android-optimize.txt, proguard-android.txt и proguard-project.txt.
  6. Добавление нового файла в корень вашего Android проекта под названием proguard.cfg

    ПРИМЕЧАНИЕ. Поскольку Xamarin является умным, он сохраняет этот новый файл в UTF-8 с BOM, , поэтому вам нужно будет изменить это .Вероятно, лучше всего создать файл в блокноте, а затем включить его в свою программу. Это необходимо, поскольку Proguard не будет считывать файл, если он не в кодировке UTF-8.

  7. В VS Щелкните правой кнопкой мыши на файле и выберите Свойства .В поле «Действия при сборке» выберите ProguardConfiguration .
  8. Добавьте в файл соответствующие выражения keep или dontwarn без кавычек (это зависит от ваших предупреждений), например, это может быть что-то вродеэто ...
    • "- dontwarn com.google.android.gms. **"
    • "- сохранить класс com.google.android.gms. **"
  9. После того, как вы выполнили эти шаги, попробуйте сборку еще раз.
  10. Надеюсь, на этот раз это будет более успешным.Если это не удастся, проверьте вывод вашей сборки и посмотрите, какие предупреждения и примечания Proguard дает вам.

На этом этапе необходимо определить, какие изменения необходимо внести в пользовательский файл Proguard , после того как сборка будет выполнена успешно.

...