SmartJNI —— 更簡潔更高效的JNI介面封裝__android

來源:互聯網
上載者:User
引入       平時我們在android NDK開發過程中,碰到最多的情況就是通過JNI回調java的API。JNI可以理解為java反射架構的本地版本。JNI所提供的原生介面,如果需要通過反射擷取methodID或fieldID,需要先寫出寫函數和欄位的簽名(sign),而且調用過程極其繁瑣,詳細的使用說明,可以參考連結  JNI使用教程。       另外,相比之下,JAVA層下的反射API,使用起來簡潔方便得多, 可參考連結  JAVA反射教程。       而SmartJNI的引入,目的主要有兩個:        其一,屏避掉JAVA和JNI兩套反射API在使用上的差異;        其二,採用物件導向的方式封裝JNI的原生API, 大大減少開發代碼量,而且可讀性更強。
實現原理 SmartJNI實現的技術要點,主要有如下兩點: 其一,就是屏避掉函數簽名的細節, 不需要調用方編寫簽名字串; 詳細的實現,請參見源碼 Method.cpp。
其二,本地代碼中可變參數與Java層可變參數之間的傳遞; 詳細的實現,請參見源碼 Method.cpp。
樣本對比 原生的JNI調用樣本就不提供了,網上很多,下面是採用SmartJNI和Java API的樣本對比:


                                               SmartJNI調用樣本




                                                    JAVA 調用樣本
通過SmartJNI的封裝,兩者在使用上,除了本身文法上的一些限制,基本上已經一致了。
最後說明       目前SmartJNI還不能完成替代JNI,但基本可以用。要完全替換掉JNI,還需要花些時間慢慢完善,SmartJNI項目已經在googlecode上開源,地址是http://code.google.com/p/smart-jni/,大家可以通過 svn checkout下來。另外,如果有興趣跟我一起完善SmartJNI的話,也可以私下找我,我開通讀寫權限。
PS:如果你有什麼好的建議,可以直接在 googlecode 上的Wiki上給我反饋,謝謝。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.