Xamarin proguard.ParseException:文件“Properties/proguard.cfg”的第 1 行中的未知选项“”

Posted

技术标签:

【中文标题】Xamarin proguard.ParseException:文件“Properties/proguard.cfg”的第 1 行中的未知选项“”【英文标题】:Xamarin proguard.ParseException: Unknown option '' in line 1 of file 'Properties/proguard.cfg' 【发布时间】:2016-12-09 04:09:09 【问题描述】:

我正在尝试将 proguard 与 Xamarin 一起使用。 所以我在项目选项中启用了它(选中Enable ProGuard),并在属性中创建了一个文件proguard.cfg(作为新的文本文件,对吗?) 并检查了 BuildAction -> ProguardConfiguration

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: 错误:工具退出,代码:1。输出:proguard.ParseException: 文件“Properties/proguard.cfg”的第 1 行中的未知选项“” 包含在第 10 个参数中 proguard.ConfigurationParser.parse(ConfigurationParser.java:191) 在 proguard.ProGuard.main(ProGuard.java:484) (WheezMe.Droid)

有什么想法吗?

【问题讨论】:

【参考方案1】:

我不久前添加了这部分文档,提到您需要删除 BOM(字节顺序标记):

注意:如果您收到如下错误,则说明您的配置文件包含字节顺序标记 (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

【讨论】:

谢谢! Notepad++ 使用“以 UTF-8 编码(无 BOM)”效果很好! 如果这个过程能再细一些就好了。在项目设置中启用 proguard 时,它应该自动在项目的根目录中以 UTF-8 编码创建 proguard.cfg。 proguard.cfg 文件应该包含一些用于保持 google play 服务类等的标准命令......这样每个开发人员都不需要 4-8 小时来正确设置 proguard。 虽然 UTF-8 是一个 Visual Studio 问题(我们正在专门针对 Xamarin 进行修复),但 Proguard 默认保留项目实际上确实拉低了 Google Play 服务和 Android 支持proguard.keep文件并将其包含在Proguard 任务中。【参考方案2】:

也可以使用以下 perl 命令从文件中删除字节顺序标记:

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

【讨论】:

以上是关于Xamarin proguard.ParseException:文件“Properties/proguard.cfg”的第 1 行中的未知选项“”的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.forms(或)xamarin.ios/xamarin.android(或)本机

Xamarin挖墙脚系列:Xamarin的核心

Xamarin.Forms 和 Xamarin Native 有啥区别? [关闭]

Xamarin SQLite教程Xamarin.iOS项目添加引用

新的 Xamarin 项目不使用最新的 Xamarin 版本

当 Xamarin.ios Uitest 从 Xamarin Studio 运行时,在 Xamarin 测试云上面临“停滞的错误”