2016-08-03 22 views
4

Ich versuche Proguard mit Xamarin zu verwenden. So ermöglichte ich es in Projektoptionen (geprüft Enable ProGuard), und ich erstellt eine Datei proguard.cfg in Eigenschaften (als neue Textdatei, ist es richtig?) und überprüfte die Buildaction -> ProguardConfigurationXamarin proguard.ParseException: Unbekannte Option '' in Zeile 1 der Datei 'Properties/proguard.cfg'

Proguard file config

Die Proguard-Datei enthält nur eine -keep-Konfiguration mit einem Kommentar. Ob ich den Kommentar verlassen oder entfernen, habe ich immer einen Parse Fehler in Zeile 1:

# test comment 
-keep class !android.support.v7.view.menu.**, !android.support.design.internal.NavigationMenu, !android.support.design.internal.NavigationMenuPresenter, !android.support.design.internal.NavigationSubMenu, android.support.** {*;} 

ich einen Unknown option '' in line 1 Fehler.

/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets: Error: Tool exited with code: 1. Output: proguard.ParseException: Unknown option '' in line 1 of file 'Properties/proguard.cfg'
included from argument number 10 at proguard.ConfigurationParser.parse(ConfigurationParser.java:191) at proguard.ProGuard.main(ProGuard.java:484) (WheezMe.Droid)

Irgendwelche Idee?

Antwort

8

Ich habe diesen Abschnitt der docs eine Weile zurück zu erwähnen, dass Sie die BOM (Byte Order Mark entfernen müssen):

Hinweis: Wenn Sie einen Fehler wie den folgenden erhalten, dann die Konfigurationsdatei eine Bytereihenfolgemarkierung (BOM) enthält, die das ProGuard Werkzeug nicht verarbeiten kann:

Unknown option '-keep' in line 1 of file 'proguard.cfg'

Um dieses Problem zu vermeiden, speichern Sie Ihre benutzerdefinierte Konfigurationsdatei aus einem Texteditor, mit dem Sie die Stückliste weglassen können. Wenn Sie beispielsweise aus Notepad ++ speichern, können Sie die ProGuard-Konfigurationsdatei ohne Stückliste mit der Option Encoding> Encoding in UTF-8 Without BOM speichern.

https://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/publishing_an_application/part_1_-_preparing_an_application_for_release/#ProGuard

Mit allen Mitteln Sie welche Methode verwenden, können Sie möchten die Stückliste entfernen. Notepad ++ macht es ziemlich einfach. Fügen Sie hier die vollständige Lösung hinzu, um anderen zur Sichtbarkeit zu verhelfen.

EDIT:

der entsprechende Link finden Sie hier:

https://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/proguard/#File_Issues

+0

Dank! Notepad ++ mit "Encode in UTF-8 (ohne BOM)" funktioniert gut! –

+0

Es wäre schön, wenn dieser Prozess raffinierter wäre. Wenn proguard in den Projekteinstellungen aktiviert wird, sollte automatisch eine proguard.cfg im Wurzelverzeichnis des Projekts in der UTF-8-Codierung erstellt werden. Die proguard.cfg-Datei sollte einige Standardbefehle enthalten, um Google Play-Dienstklassen usw. beizubehalten ... Auf diese Weise braucht nicht jeder Entwickler 4-8 Stunden, um den Proguard richtig einzurichten. – Justin

+0

Obwohl die UTF-8-Sache ein Visual-Studio-Problem ist (wir arbeiten gerade an einem Fix für Xamarin), ziehen die Proguard-Standard-Aufbewahrungselemente tatsächlich die Google Play Services- und Android-Support-Dateien "proguard.keep" herunter und fügen sie ein die 'Proguard'-Aufgabe. –

2

Die Bytereihenfolgemarkierung kann auch mit dem folgenden Perl-Befehl aus der Datei entfernt werden:

perl -e 's/\xef\xbb\xbf//;' -pi~ proguard.cfg