一次xamarin綁定安卓庫(kù)的記錄
由于xx原因,我這里用到了一個(gè)叫AgentWeb的安卓庫(kù),在此記錄一下綁定的過(guò)程。
由于他是安卓庫(kù),所以我們需要先去下載一下他的jar和aar。
github地址:https://github.com/Justson/AgentWeb
然后我們就得到了兩個(gè)文件(不會(huì)下載的可以去問(wèn)問(wèn)百度)。

先隨便建一個(gè)項(xiàng)目

然后添加一個(gè)安卓綁定庫(kù)項(xiàng)目

然后把jar和aar文件添加到綁定庫(kù)項(xiàng)目的Jars文件夾中(記得右鍵改一下生成操作)。
然后去隨便寫(xiě)個(gè)xml文件。
寫(xiě)上一些基礎(chǔ)代碼
然后基礎(chǔ)部分就結(jié)束了,開(kāi)始踩大坑了。
先嘗試生成一下項(xiàng)目,會(huì)發(fā)現(xiàn)一堆報(bào)錯(cuò),我們來(lái)一個(gè)一個(gè)解決。

很明前,前五個(gè)都是同類(lèi)報(bào)錯(cuò),均為未實(shí)現(xiàn)xx接口。

我們隨便點(diǎn)一個(gè)進(jìn)去看看。


我們能發(fā)現(xiàn)這些接口都是實(shí)現(xiàn)了的,只是類(lèi)型不一致。
因?yàn)檫@些類(lèi)都是部分類(lèi)(partial),所以我們可以去手動(dòng)改一下他的返回類(lèi)型。
類(lèi)似下面這樣,懂的都懂。
寫(xiě)好五個(gè)文件之后,報(bào)錯(cuò)就少一大半了。


還有最后一個(gè)報(bào)錯(cuò),我們點(diǎn)進(jìn)去看看。

感覺(jué)好麻煩的樣子,我直接把他刪了吧。
在方法的上邊可以獲取到他的信息,然后復(fù)制到metadata.xml文件中。

就像是下邊這樣。
生成終于不報(bào)錯(cuò)了,然而并沒(méi)有結(jié)束,還有一個(gè)坑。


假如我們要js調(diào)用C#,根據(jù)官網(wǎng)上我們可以這樣寫(xiě)。
在這個(gè)AndroidInterface類(lèi)中的方法上需要添加JavascriptInterface特性。
然后我就添加上了,結(jié)果一運(yùn)行就報(bào)一大堆錯(cuò)。

那么問(wèn)題來(lái)了,我不是加上JavascriptInterface了嗎,為什么他會(huì)找不到呢?
這里我們可以去看看源碼。

然后我們也getMethods試試,順便對(duì)比一下java和C#反射的區(qū)別。


很明顯java的反射比c#的少很多內(nèi)容,看樣子需要我們手動(dòng)暴露一下這個(gè)方法。
添加一下這個(gè)引用。

然后啟動(dòng)也就不報(bào)錯(cuò)了。

到此結(jié)束了。