意外字符$ - Java绑定错误

时间:2016-10-11 10:24:57

标签: java android xamarin

我正在尝试java绑定到Xamarin表单项目,并且jar包含具有$的类名,以及带有$的变量名。我收到“Unexpected Character $”错误。我试图通过编辑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

得到的

提前致谢,

1 个答案:

答案 0 :(得分:0)

您尝试的示例会禁用某些类型或成员的模糊处理。但$并不一定意味着代码已被混淆。以下是在这种情况下如何做的常见流程:

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

    1. 如果您的代码中不需要此类型或成员,请使用remove-node元数据元素删除它。如上所述,从生成的源中获取path值。请记住,如果您不需要,可以删除错误成员或整个类型。
    2. 如果您确实需要此成员,请在元数据中定义重命名转换,如下所示:<attr path="<copied_from_sources>" name="managedName">ValidNameHere</attr>
    3. 有时您需要清理obj文件夹才能应用更改。通常它的工作正常。