最近開發項目用到了多個C語言編寫的動態連接庫so,期間遇到不少問題,項目開發完畢後,我以爲有必要把開發中的一些知識點總結下來,並結合我手邊的一本經典教程《Pro
Android C++ with the NDK》,寫下這個系列的文章,分享給你們,但願給想入門Android NDK開發的朋友帶來幫助。shell
Android NDK(Native Development Kit )是一套工具集合,容許你用像C/C++語言那樣實現應用程序的一部分。同時,Android NDK對於Android SDK只是個組件,它能夠幫咱們生成的JNI兼容的共享庫能夠在大於Android1.5平臺的ARM CPU上運行,將生成的共享庫拷貝到合適的程序工程路徑的位置上,以保證它們自動的添加到你的apk包中。數據庫
Google僅在極少數狀況下建議使用NDK,有以下使用場景:
● 必須提升性能(例如,對大量數據進行排序)。
● 使用第三方庫。舉例說明:許多第三方庫由C/C++語言編寫,而Android應用程序須要使用現有的第三方庫,如Ffmpeg、OpenCV這樣的庫。
● 底層程序設計(例如,應用程序不依賴Dalvik Java虛擬機)。編程
1.運行效率高
2.利於充分發揮軟硬件優點
3.利於代碼複用
4.下降版本控制成本
5.下降開發成本分佈式
1.開發難度相對較高
2.調試難度相對較高
3.增長開發團隊規模工具
JNI是一種在Java虛擬機控制下執行代碼的標準機制。代碼被編寫成彙編程序或者C/C++程序,並組裝爲動態庫。也就容許了非靜態綁定用法。這提供了一個在Java平臺上調用C/C++的一種途徑,反之亦然。它容許Java類的某些方法原生實現,同時讓它們可以像普通Java方法同樣被調用和使用。性能
JNI是Java Native Interface的縮寫,它提供了若干的API實現了Java和其餘語言的通訊(主要是C&C++)。學習
一、JAVA程序和本地程序使用TCP/IP或者IPC進行交互。 二、當用JAVA程序鏈接本地數據庫時,使用JDBC提供的API。
三、JAVA程序可使用分佈式對象技術,如JAVA IDL API。
這些方案的共同點是,JAVA和C處於不一樣的線程,或者不一樣的機器上。這樣,當本地程序崩潰時,不會影響到JAVA程序。ui