我正在尝试为LINE SDK(在亚洲地区流行的SNS服务)构建一个Android绑定库。我将SDK中的jar文件添加到我的项目中,但无法编译,因为SDK的创建者恰好对类及其属性使用相同的名称。
这是项目从jar文件
生成的C#代码的一部分public partial class AccessToken : global::Java.Lang.Object {
// Metadata.xml XPath field reference: path="/api/package[@name='jp.line.android.sdk.model']/class[@name='AccessToken']/field[@name='accessToken']"
[Register ("accessToken")]
public string AccessToken {
get { /* ... */ }
set { /* ... */ }
}
//...
}
现在简单地说,我想知道如何重命名此属性“AccessToken”。我尝试在Metadata.xml中添加一些命令,但它没有任何效果。这是我写的参考文献
<attr path="/api/package[@name='jp.line.android.sdk.model']/class[@name='AccessToken']/field[@name='accessToken']" name="propertyName">AccessTokenString</attr>
如果有人可以帮助我,我将不胜感激。我完全迷失在这里。
答案 0 :(得分:2)
我认为唯一的问题是“propertyName”应该只是“name”:
<attr path="/api/package[@name='jp.line.android.sdk.model']/class[@name='AccessToken']/field[@name='accessToken']" name="name">AccessTokenString</attr>
答案 1 :(得分:1)
@SuavePirate建议不会完全起作用(至少现在不行)。
如果您使用name
,则还会将Register
属性参数重命名为[Register ("AccessTokenString")]
,而不是[Register ("accessToken")]
。因此,当它指出here时,Xamarin.Android绑定类将不再可能访问该属性,因为它没有绑定到现有的Java成员。
要正确更改包装成员的托管名称,必须设置managedName
属性,即:
<attr path="/api/package[@name='jp.line.android.sdk.model']/class[@name='AccessToken']/field[@name='accessToken']" name="managedName">AccessTokenString</attr>