2016-10-11 55 views
2

我正在嘗試將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

由於提前,

+0

我從來沒有使用Xamarin,但它似乎使用了一些XPaths,可能是XSL轉換,而美元符號在XSL中有特殊含義,所以試着用'\ $'轉義它。 還有一些關於您提供的鏈接的說明,請參閱:https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/customizing-bindings/java-bindings-metadata/#obfuscated – Sergi

+0

'$'表示Java中的匿名內部類。因此,您需要在這裏輸入全名,例如「CarDetails $ {ClassName}」。如果您可以上傳[MCVE](http://stackoverflow.com/help/mcve),我可以幫助您調查這些問題。 *注意:我寫了部分Sergi提到的文檔* –

回答

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,取決於您的當前配置)。嘗試尋找你有問題的成員定義。你應該能夠找到你的領域,方法或其他成員,其所有的屬性,如static,deprecated, obfuscated等這就是你可以影響元數據轉換。

現在,根據您的情況請嘗試以下之一:

  • 如果你不需要在你的代碼這種類型或成員,只是得到由擺脫它使用remove-node元數據元素。如上所述從生成的源獲取path值。請記住,如果您不需要它,可以刪除錯誤成員或整個類型。
  • 如果您確實需要此成員,請在元數據中定義重命名轉換,如下所示:<attr path="<copied_from_sources>" name="managedName">ValidNameHere</attr>
  • 有時您需要清理obj文件夾才能應用更改。通常它工作正確,但。