我正在嘗試將java庫實現到xamarin中。為此,我創建了一個 java 綁定庫并將 dll 引用到我的 xamarin.android 項目中?;旧?JBL 生成的代碼如下所示。正如你所看到的,它沒有帶有 0 個參數的構造函數。public abstract class SAAgent : Service{ [Register(".ctor", "(Ljava/lang/String;)V", "")] protected SAAgent(string p0); protected SAAgent(IntPtr javaReference, JniHandleOwnership transfer); [Register(".ctor", "(Ljava/lang/String;Ljava/lang/Class;)V", "")] protected SAAgent(string p0, Class p1);我實現了一個繼承此生成的 SAAgent 類的類。 [Service(Exported = true, Name = "WearCompanion.Droid.ProviderService")] public class ProviderService : SAAgent { public ProviderService() : base("ProviderService", SASOCKET_CLASS) { }當我執行代碼時,我收到一個異常Java.Lang.RuntimeException Message=無法實例化服務 WearCompanion.Droid.ProviderService:java.lang.InstantiationException:java.lang.Class 沒有零參數構造函數所以它期望我有 0 個參數構造函數。Samsung Tizen 網站上有一個示例,他們的 java 示例如下所示public class ProviderService extends SAAgent { private static final String TAG = "HelloAccessory(P)"; private static final Class<ServiceConnection> SASOCKET_CLASS = ServiceConnection.class; public ProviderService() { super(TAG, SASOCKET_CLASS); }但是當我查看 xamarin.android 項目的 obj 文件夾時,發現生成了 ProviderClass.java 文件。它看起來像下面這樣,public class ProviderService extends com.samsung.android.sdk.accessory.SAAgent implements mono.android.IGCUserPeer{ public ProviderService (java.lang.String p0, java.lang.Class p1) { super (p0, p1); if (getClass () == ProviderService.class) mono.android.TypeManager.Activate ("WearCompanion.Droid.ProviderService, WearCompanion.Android", "System.String, mscorlib:Java.Lang.Class, Mono.Android", this, new java.lang.Object[] { p0, p1 }); }我不明白如何使 xamarin 從帶有 0 個構造函數的 C# 生成 java 類?這是java綁定的問題嗎?PS,我已經反編譯了jar來查看SAAgent java實現,它與C#實現相同。所以java綁定庫做了正確的工作。我不確定是否應該自己手動添加無參數構造函數?
1 回答

長風秋雁
TA貢獻1757條經驗 獲得超7個贊
最后我找到了解決方案。Xamarin 實際上在其文檔中包含了有關缺少構造函數的信息。正如所解釋的,應該使用導出屬性。因此,如果我按如下方式更改 C# 類構造函數。它使用零參數構造函數按預期生成準確的 java 類。
[Export(SuperArgumentsString?=?"\"ProviderService\",?ProviderService_ProviderServiceSocket.class")] ????????public?ProviderService()?:?base("ProviderService",?SASOCKET_CLASS) ????????{ ????????}
- 1 回答
- 0 關注
- 161 瀏覽
添加回答
舉報
0/150
提交
取消