Android之JNI和NDK的那些事

來源:互聯網
上載者:User

NDK(Native Development Kit)“原生”也就是二進位

android常用的開發方式是java封裝的庫,而這些庫的底層實現是由C/C++實現,如媒體,圖形庫等

java調用這樣實現就需要用JNI(Java Native Interface)

平時用的也就是google給我們封裝的好的庫,即便是底層實現用的不是Java,但都有統一的Java介面

而NDK的作用是“我們自己寫本地代碼”(C/C++),自己用JNI封裝成Java介面

比如我們想做個計算,二這不是Java的強項,可以用C/C++來寫實現,返回一個運算結果就行了

NDKr5已經實現了不用寫一行Java代碼開發程式了,只不過還是用到了虛擬機器,細節被封裝隱藏起來了而已

對於JNI和NDK很多Android開發初學者沒有搞明白這個問題

JNI是Java調用Native機制,是Java語言自己的特性全稱為 Java Native Interface,類似的還有微軟.Net Framework上的p/invoke,可以讓C#或Visual Basic.Net可以調用C/C++的API,所以說JNI和Android沒有關係,在PC上開發Java的應用,如果運行在Windows平台使用 JNI是是經常的,比如說讀寫Windows的註冊表。

NDK是Google公司推出的協助Android開發人員通過C/C++本地語言編寫應用的開發包,包含了C/C++的標頭檔、庫檔案、說明文檔和樣本 代碼,我們可以理解為Windows Platform SDK一樣,是純C/C++編寫的,但是Android並不支援純C/C++編寫的應用,同時NDK提供的庫和函數功能很有限,僅僅處理些演算法效率敏感的 問題,所以Android123推薦初學者學好Java後再學習JNI。

NDK其實多了一個把.so和.apk打包的工具,這個是很重要的。

而JNI開發並沒有打包,只是把.so檔案放到檔案系統的特定位置。

如果是做應用開發,則需要NDK工具,不然你開發的應用程式怎麼給使用者用呢?難道幫他重新編譯檔案系統?

其他至於實現,java調用本地C/C++函數,及其編寫方式,我覺得JNI和NDK沒有什麼區別。

還有一個我個人理解,NDK開發C/C++只能能使用NDK內建的有限的標頭檔,而使用JNI則可以使用檔案系統中帶的標頭檔,比如utils/Log.h

而後者的資源更多,當然NDK正在努力開發中,以便支援更豐富的介面。

 

問:NDK 是什麼  

1、NDK 是一系列工具的集合。

  • NDK提供了一系列的工具,協助開發人員快速開發
    C (或
    C++ )的動態庫,並能自動將
    so 和
    java 應用一起打包成
    apk 。這些工具對開發人員的協助是巨大的。
  • NDK整合了交叉編譯器,並提供了相應的
    mk 檔案隔離
    CPU 、平台、
    ABI 等差異,開發人員只需要簡單修改
    mk 檔案(指出
    “ 哪些檔案需要編譯
    ” 、
    “ 編譯特性要求
    ” 等),就可以建立出
    so 。
  • NDK可以自動地將
    so 和
    Java 應用一起打包,極大地減輕了開發人員的打包工作。

2、NDK 提供了一份穩定、功能有限的API標頭檔聲明。

Google明確聲明該API
是穩定的,在後續所有版本中都穩定支援當前發布的
API。從該版本的
NDK 中看出,這些
API 支援的功能非常有限,包含有:
C 標準庫(
libc )、標準數學庫(
libm )、壓縮庫(
libz )、
Log 庫(
liblog )。


 

問:NDK帶來什麼

1、NDK 的發布,使“Java+C”的開發方式終於轉正,成為官方支援的開發方式。

  • 使用NDK
    ,我們可以將要求高效能的應用邏輯使用 C
    開發,從而提高應用程式的執行效率。
  • 使用NDK
    ,我們可以將需要保密的應用邏輯使用 C
    開發。畢竟, Java
    包都是可以反編譯的。
  • NDK促使專業
    so 組件商的出現。(樂觀猜想,要視乎
    Android 使用者的數量)

2、NDK 將是Android平台支援C開發的開端。

NDK提供了的開發工具集合,使開發人員可以便捷地開發、發布C
組件。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.