我正在嘗試將java庫實(shí)現(xiàn)到xamarin中。為此,我創(chuàng)建了一個 java 綁定庫并將 dll 引用到我的 xamarin.android 項(xiàng)目中?;旧?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);我實(shí)現(xiàn)了一個繼承此生成的 SAAgent 類的類。 [Service(Exported = true, Name = "WearCompanion.Droid.ProviderService")] public class ProviderService : SAAgent { public ProviderService() : base("ProviderService", SASOCKET_CLASS) { }當(dāng)我執(zhí)行代碼時,我收到一個異常Java.Lang.RuntimeException Message=無法實(shí)例化服務(wù) 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); }但是當(dāng)我查看 xamarin.android 項(xiàng)目的 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實(shí)現(xiàn),它與C#實(shí)現(xiàn)相同。所以java綁定庫做了正確的工作。我不確定是否應(yīng)該自己手動添加無參數(shù)構(gòu)造函數(shù)?
1 回答

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