Android NDK學習筆記1-基礎知識篇

引言

最近開發項目用到了多個C語言編寫的動態連接庫so,期間遇到不少問題,項目開發完畢後,我以爲有必要把開發中的一些知識點總結下來,並結合我手邊的一本經典教程《Pro
Android C++ with the NDK》,寫下這個系列的文章,分享給你們,但願給想入門Android NDK開發的朋友帶來幫助。shell

什麼是 Android NDK?

Android NDK(Native Development Kit )是一套工具集合,容許你用像C/C++語言那樣實現應用程序的一部分。同時,Android NDK對於Android SDK只是個組件,它能夠幫咱們生成的JNI兼容的共享庫能夠在大於Android1.5平臺的ARM CPU上運行,將生成的共享庫拷貝到合適的程序工程路徑的位置上,以保證它們自動的添加到你的apk包中。數據庫

什麼時候使用NDK?

Google僅在極少數狀況下建議使用NDK,有以下使用場景:
● 必須提升性能(例如,對大量數據進行排序)。
● 使用第三方庫。舉例說明:許多第三方庫由C/C++語言編寫,而Android應用程序須要使用現有的第三方庫,如Ffmpeg、OpenCV這樣的庫。
● 底層程序設計(例如,應用程序不依賴Dalvik Java虛擬機)。編程

NDK開發有何優勢?

1.運行效率高
2.利於充分發揮軟硬件優點
3.利於代碼複用
4.下降版本控制成本
5.下降開發成本分佈式

NDK開發有何缺點?

1.開發難度相對較高
2.調試難度相對較高
3.增長開發團隊規模工具

Android NDK系統文件的結構以下

  • ndk-build:該shell腳本是Android NDK構建系統的起始點。
  • ndk-gdb:該shell腳本容許用GUN調試器調試原生組件。
  • ndk-stack:該shell腳本能夠幫助分析原生組件崩潰時的堆棧追蹤。
  • build:該目錄包含了Android NDK構建系統的全部模塊。
  • platforms:該目錄包含了支持不一樣Android目標版本的頭文件和庫文件。Android NDK構建系統會根據具體的Android版本自動引用這些文檔。
  • samples:該目錄包含了一些示例應用程序,這些程序能夠體現AndroidNDK的性能。有利於學習如何使用Android NDK的特性。
  • sorces:該目錄包含了可供開發人員導入到現有的Android NDK項目的一些共享模塊。
  • toolchains:該目錄包含目前Android NDK支持的不一樣目標機體系結構的交叉編譯器。Android NDK目前支持ARM、X86和MIPS機體系結構。Android NDK 構建系統根據選定的體系結構使用不一樣的交叉編譯器。

什麼是JNI?

JNI是一種在Java虛擬機控制下執行代碼的標準機制。代碼被編寫成彙編程序或者C/C++程序,並組裝爲動態庫。也就容許了非靜態綁定用法。這提供了一個在Java平臺上調用C/C++的一種途徑,反之亦然。它容許Java類的某些方法原生實現,同時讓它們可以像普通Java方法同樣被調用和使用。性能

JNI有什麼優點?

JNI是Java Native Interface的縮寫,它提供了若干的API實現了Java和其餘語言的通訊(主要是C&C++)。學習

什麼時候使用JNI?

一、JAVA程序和本地程序使用TCP/IP或者IPC進行交互。 二、當用JAVA程序鏈接本地數據庫時,使用JDBC提供的API。
三、JAVA程序可使用分佈式對象技術,如JAVA IDL API。
這些方案的共同點是,JAVA和C處於不一樣的線程,或者不一樣的機器上。這樣,當本地程序崩潰時,不會影響到JAVA程序。ui

相關文章
相關標籤/搜索