本文荚坞,是在Xamarin官網(wǎng)的綁定基礎(chǔ)上盖灸,以友盟推送的綁定做使用說(shuō)明盟榴,希望對(duì)大家有幫助酬诀。
Xamarin鏈接:https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/customizing-bindings/java-bindings-metadata/
- 從官網(wǎng)下載U-Push的SDK(Android)脏嚷,會(huì)有以下jar包:
- 新建好Android綁定項(xiàng)目后,將以上文件加入到Jars文件夾下:
3.直接編譯瞒御,會(huì)出現(xiàn)以下問(wèn)題父叙,下面我們就一個(gè)個(gè)問(wèn)題來(lái)解決
3.1. 找不到類(lèi):The type or namespace name 'XXX' does not exist in the namespace 'XXXX':
這個(gè)時(shí)候,我們?cè)谀夸沷bj\Debug\generated\src下確實(shí)找不到對(duì)應(yīng)的類(lèi)文件肴裙。這種情況就是在源代碼中趾唱,類(lèi)的訪問(wèn)級(jí)別不是public導(dǎo)致的,那知道原因后蜻懦,我們就可以在Metadata.xml文件中甜癞,修改對(duì)應(yīng)類(lèi)的訪問(wèn)級(jí)別:
修改前后,目錄obj\Debug\generated\src下文件對(duì)比:
文件有了宛乃,但還沒(méi)完悠咱。
打開(kāi)生成的類(lèi)文件會(huì)發(fā)現(xiàn)蒸辆,與其他的還是有些許差別的。
自動(dòng)生成的同一命名空間下的類(lèi)析既,聲明部分是這樣的:
但是我們改完之后躬贡,生成的類(lèi)文件中是這樣的:
你沒(méi)有看錯(cuò),就是一個(gè)是暗色的眼坏,一個(gè)是亮色的區(qū)別拂玻。我們都知道,暗色表示的是可以簡(jiǎn)化調(diào)用的意思空骚,表明該類(lèi)已經(jīng)引用過(guò)命名空間纺讲,不需要在調(diào)用的時(shí)候在加前綴的意思。雖然我不知道這是在哪兒用的囤屹,但是至少表明我們新生成的類(lèi)文件熬甚,與本身生成的文件,是不在一起的肋坚∠缋ǎ看錯(cuò)誤列表也可以看出,問(wèn)題還在智厌。
這個(gè)時(shí)候套鹅,我們要做的就是講剛剛生成的類(lèi)文件拿出來(lái)枕荞,放在Additions目錄下:
再將我們?cè)贛etadata.xml文件中添加的修改該類(lèi)訪問(wèn)級(jí)別的語(yǔ)句去掉,再編譯,發(fā)現(xiàn)OK藻治。(不去掉訪問(wèn)修飾符的修改,會(huì)報(bào)重復(fù))
3.2. 'XXX'不實(shí)現(xiàn)接口成員'XXXX'峭咒。
新增缺少的成員:
3.3. 有一些問(wèn)題圣拄,實(shí)在是無(wú)法通過(guò)Metadata修改,比如:有一個(gè)方法Call合溺,要求將返回類(lèi)型由string修改為Java.Lang.Object卒密,但是在方法ShowMe中,有調(diào)用Call方法棠赛,且要求返回的就是string哮奇,你那么這時(shí)候,我們可以在ShowMe中修改Call的調(diào)用為Call().ToString()睛约,這種修改鼎俘,無(wú)法Metadata.xml中修改(也許是我不知道),這個(gè)時(shí)候呢辩涝,我們就可以先直接修改Call().ToString()而芥,然后把這個(gè)文件類(lèi)文件加到Additions目錄下,再在Metadata.xml文件中呢膀值,將這個(gè)類(lèi)的訪問(wèn)修飾符修改為private棍丐,編譯误辑,搞定。