我正在嘗試將java庫實現(xiàn)到xamarin中。為此,我創(chuàng)建了一個 java 綁定庫并將 dll 引用到我的 xamarin.android 項目中?;旧?JBL 生成的代碼如下所示。正如你所看到的,它沒有帶有 0 個參數(shù)的構(gòu)造函數(shù)。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);我實現(xiàn)了一個繼承此生成的 SAAgent 類的類。 [Service(Exported = true, Name = "WearCompanion.Droid.ProviderService")] public class ProviderService : SAAgent { public ProviderService() : base("ProviderService", SASOCKET_CLASS) { }當我執(zhí)行代碼時,我收到一個異常Java.Lang.RuntimeException Message=無法實例化服務 WearCompanion.Droid.ProviderService:java.lang.InstantiationException:java.lang.Class 沒有零參數(shù)構(gòu)造函數(shù)所以它期望我有 0 個參數(shù)構(gòu)造函數(shù)。Samsung Tizen 網(wǎng)站上有一個示例,他們的 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 文件夾時,發(fā)現(xiàn)生成了 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 個構(gòu)造函數(shù)的 C# 生成 java 類?這是java綁定的問題嗎?PS,我已經(jīng)反編譯了jar來查看SAAgent java實現(xiàn),它與C#實現(xiàn)相同。所以java綁定庫做了正確的工作。我不確定是否應該自己手動添加無參數(shù)構(gòu)造函數(shù)?
1 回答

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