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.Forms 和 Xamarin Native 有啥区别? [关闭]
Xamarin SQLite教程Xamarin.iOS项目添加引用
新的 Xamarin 项目不使用最新的 Xamarin 版本
当 Xamarin.ios Uitest 从 Xamarin Studio 运行时,在 Xamarin 测试云上面临“停滞的错误”