【问题标题】:Unexpected Character $ - Java Binding error意外字符 $ - Java 绑定错误
【发布时间】:2016-10-11 10:24:57
【问题描述】:

我正在尝试将 java 绑定到 Xamarin 表单项目,并且 jar 包含具有 $ 的类名以及具有 $ 的变量名。我收到“意外字符 $”错误。我试图通过编辑 metadata.xml 文件来解决它。看来我做错了,请检查以下条目,

对于包含 $ 的类名。我正在使用,

<attr path="/api/package[@name='com.wed.therace']/class[@name='CarDetails$']" 
    name="obfuscated">false</attr>

对于包含$的变量,

<attr path="/api/package[@name='com.wed.therace']/class[@name='CarDetails$']/fie    ld[@name='machineParts$']" 
name="obfuscated">false</attr>

正确的方法是什么?我是从https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/customizing-bindings/java-bindings-metadata得到这个的

提前致谢,

【问题讨论】:

  • 我从未使用过 Xamarin,但它似乎使用了一些 XPaths,并且可能在内部使用了 XSL 转换,并且美元符号在 XSL 中具有特殊含义,因此请尝试使用 \$ 转义它。您提供的链接上也有一些说明,请参阅:developer.xamarin.com/guides/android/advanced_topics/…
  • $ 代表 Java 中的匿名内部类。因此,您需要在此处使用全名,例如 CarDetails${ClassName}。如果您可以上传MCVE,我可以帮助您调查这些问题。 注意:我编写了 Sergi 引用的部分文档

标签: java android xamarin


【解决方案1】:

您尝试的示例禁用了对某些类型或成员的混淆。但$ 并不一定意味着代码已被混淆。以下是您在这种情况下应该做什么的常见流程:

  1. 导航到错误源以查看生成的输出 C# 代码。在您的错误消息中,您很可能会看到类似Error: obj/Debug/src/234.cs (30, 50) 的内容。查看此文件并查看第 30 行中发生的情况。在您的情况下,您将看到名称中包含 $ 的字段,这会导致编译错误。注意这个文件中有一个以// Metadata.xml XPath ... path="/api/package[@name=...]"开头的生成器注释行,像这样。您只需复制 path="..." 部分即可将其用于 manifest.xml 中的配置。
  2. 查看位于obj/Debug(或obj/Release,取决于您当前的配置)中生成的api.xml 文件。尝试查找您遇到问题的成员定义。您应该能够在那里找到您的字段、方法或其他成员及其所有属性,例如staticdeprecatedobfuscated 等。这就是您可以使用元数据影响的内容转换。

现在根据您的情况尝试以下方法之一:

  1. 如果您的代码中不需要此类型或成员,只需使用remove-node 元数据元素将其删除即可。如上所述,从生成的源中获取 path 值。请记住,如果不需要,您可以删除错误成员或整个类型。
  2. 如果您确实需要此成员,请在元数据中定义重命名转换,如下所示:&lt;attr path="&lt;copied_from_sources&gt;" name="managedName"&gt;ValidNameHere&lt;/attr&gt;

有时您需要清理obj 文件夹才能应用更改。但通常它工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-18
    • 2012-01-21
    • 1970-01-01
    • 2013-09-14
    • 2014-01-13
    • 2017-10-31
    • 1970-01-01
    相关资源
    最近更新 更多