2016-08-03 45 views
4

我试图在Xamarin中使用proguard。 所以我启用了它在项目选项(选中Enable ProGuard),我在属性中创建的文件proguard.cfg,(如新的文本文件,是不是?) 和检查BuildAction的 - > ProguardConfigurationXamarin proguard.ParseException:文件'Properties/proguard.cfg'的第1行中的未知选项''

Proguard file config

proguard文件只包含一个-keep配置和一个注释。无论我离开或删除评论,我总是得到第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.** {*;} 

我得到一个Unknown option '' in line 1错误。

/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)

任何想法?

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

回答

8

我加入了文档一段时间回来的这部分一提的是,你需要删除的BOM(字节顺序标记:

+0

谢谢! Notepad ++使用“UTF-8编码(无BOM)”效果很好! –

+0

如果这个过程更加完善,那会很好。在项目设置中启用proguard时,它应该自动在UTF-8编码的项目根目录下创建一个proguard.cfg。 proguard.cfg文件应该包含一些用于保存谷歌播放服务类的标准命令等等......这样,并不需要每个开发人员4-8小时才能正确设置proguard。 – Justin

+0

尽管UTF-8是一个Visual Studio问题(我们正在为Xamarin专门开发一个修补程序),但Proguard默认保留项目确实会拉下Google Play服务和Android支持'proguard.keep'文件并将其包含在'Proguard'任务。 –

2

字节顺序标记,也可以从该文件与下面的Perl命令删除):

注:如果你得到像下面这样的错误,那么你的配置文件中包含一个字节顺序标记(BOM),其中ProGuard的工具无法处理:

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

要避免此问题,请从文本编辑器保存您的自定义配置文件,以便您省略BOM。例如,如果您正在从Notepad ++进行保存,则可以使用编码> UTF-8中的编码(无BOM)选项来保存不带BOM的ProGuard配置文件。

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

通过一切意味着您可以使用自己喜欢的任意方法来删除BOM。 Notepad ++使它非常简单。在此添加完整的解决方案以帮助其他人查看。

编辑:

正确的链接可以在这里找到:

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

相关问题