【问题标题】:Xamarin proguard.ParseException: Unknown option '' in line 1 of file 'Properties/proguard.cfg'Xamarin proguard.ParseException:文件“Properties/proguard.cfg”的第 1 行中的未知选项“”
【发布时间】: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)

有什么想法吗?

【问题讨论】:

    标签: android xamarin xamarin.android android-proguard


    【解决方案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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多