【官網翻譯】android NDK

原文:http://developer.android.com/intl/zh-cn/tools/sdk/ndk/index.html#Installing

概述
NDK是一個工具集,可以允許你使用諸如c/c++這些機器本地語言來編寫你的應用程序的某些部分。對於有些特定類型的應用,你可以重複使用這些語言編寫的現有代碼庫,但大多數的android應用程序並不需要Android NDK。

在下載NDK的之前,你應該明白NDK對大多數應用程序沒有用處,作爲開發人員,你應當平衡比較它的優勢和弊端。值得注意的是,使用android原生代碼,一般不會導致明顯的性能改進,但總是增加你的應用程序的複雜性。一般情況下,只有在有必要的時候使用NDK,而不是因爲你喜歡使用c/c++編程。

使用NDK的典型場景是CPU密集型工作負載的程序,比如遊戲引擎,信號處理,物理模擬等等。當使用NDK寫作本地代碼的時候,想想你的需求,看看Android框架API已經提供給你需要的功能

省略翻譯“下載”和“版本”兩個章節,請讀者自行閱讀

系統和軟件需求
下面章節描述了使用NDK的系統和軟件需求,以及影響使用NDK生產庫的平臺兼容性的考慮

The Android SDK

  • 一個完整的Android SDK安裝(包括所有的依賴項)
  • Android 1.5 SDK或者更晚的版本

支持的操作系統

  • Windows XP (32-bit) or Vista (32- or 64-bit)
  • Mac OS X 10.4.8 or later (x86 only)
  • Linux (32 or 64-bit; Ubuntu 8.04, or other Linux distributions using GLibc 2.7 or later)

需要的開發工具

  • 對於所有的開發平臺, 需要GNU Make 3.81或者更晚的版本. 更早的版本也許可以工作但沒有被測試過。
  • 一個近期版本的awk (either GNU Awk or Nawk)。
  • 對於Windows平臺,需要 Cygwin 1.7或者更高的版本。如果使用Cygwin 1.5,NDK將不會工作
Android平臺兼容性
Android NDK創建的本地庫只能運行特定的最小的Android平臺版本。要求的最低平臺版本取決於你的目標設備的CPU架構,下圖展示了相關的細節。



爲了確保兼容性,使用NDK之前必須在清單文件中聲明<uses-sdk>元素,設置 android:minSdkVersion屬性值,例如:
<manifest>
  <uses-sdk android:minSdkVersion="3" />
  ...
</manifest>
</pre>如果你使用NDK創建一個本地庫來使用OpenGL ES APIs,則必須按如下圖聲明最小版本</div><div dir="ltr"><span style="font-size:18px"><img src="https://img-blog.csdn.net/20141216162030843" alt="" /></span></div><div dir="ltr"><span style="font-size:18px">此外,使用OpenGL ES API必須在清單文件中聲明<uses-feature>元素,使用android:glEsVersion屬性來指定最小的OpenGL ES版本,這將確保谷歌只會對支持你應用的設備播放你的應用程序,如下</span></div><div dir="ltr"><span style="font-size:18px"></span><pre name="code" class="html"><manifest>

  <uses-feature android:glEsVersion="0x00020000" />
  ...
</manifest>
如果你使用NDK創建一個本地庫來使用API訪問Android位圖像素緩衝區或者本地Activity。包含庫的應用程序只能部署到運行Android2.2(API 8)或者更高版本的設備,爲了確保兼容性,請在你的應用程序清單文件中使用<use-sdk android:minSdkVersion="8">屬性

安裝NDK
在你的開發計算機上安裝NDK很簡單,涉及從下載包中提取NDK。

在你開始之前,首先確保你下載了最新的Android SDK和升級了應用程序和環境。NDK是與舊版本的平臺兼容,但不是和舊版本的SDK工具兼容。此外,花一點時間來審查是否符合NDK的系統和軟件要求。

要安裝NDK,首先下載適合你開發平臺相關的包

Linux and Mac OS X (Darwin):
1、下載相關的包
2、打開一個終端窗口
3、進入你的下載包的目錄
4、在你下載的包上運行 chmod a+x
5、執行包,例如:
ndk$ chmod a+x android-ndk-r10c-darwin-x86_64.bin
ndk$ ./android-ndk-r10c-darwin-x86_64.bin
          

windows
1、下載相應的包
2、導航到你下載包的文件夾
3、雙擊下載的文件,從NDK的文件夾中提取本身

當未被壓縮的時候,NDK文件都包含一個名爲Android-ndk-<version>的目錄。如有必要可以重新命名NDK目錄,你可以將它移動到電腦的任何位置。好的,現在可以開始NDK的工作。

NDK入門
一旦你成功安裝NDK,花幾分鐘閱讀包含在NDK中的文檔,你可以在<NDK>/docs/directory中找到這個文件。特別請閱讀OVERVIEW.html(譯者注:新版沒看見這個html,看見一個starthere的文檔),讓你瞭解NDK的意圖和如何使用它

如果你使用以前版本的NDK,花點時間審查NDK的變化,在change.html文件中。

這是你的NDK工作的大致框架
1、放置你的native代碼在<項目>/jni/文件夾下面
2、創建<項目>/jni/Android.mk來對NDK系統描述你的本地代碼
3、可選:創建<項目>/jni/Application.mk
4、通過運行‘ndk-build’腳本來創建你項目目錄中的本地代碼,它位於NDK的頂層目錄
cd <project>
<ndk>/ndk-build
構建工具會複製共享庫到你的應用程序需要的適當位置
5、最後,使用sdk工具像往常一樣編譯你的應用程序,該sdk構建工具會將共享庫打包到apk文件中

使用NDK
Android的框架層提供了兩種方式來使用native代碼
1、採用Android框架編寫應用程序,並使用JNI來訪問Android NDK提供的API。這種技術可以發揮Android框架的便利優勢,但仍然有可能讓你編寫native代碼。如果使用這種方式,你的應用程序必須針對具體的,最小的Android平臺。
2、寫一個native Activity,它可以讓你實現在native代碼中生命週期回調。Android SDK提供了NativeActivity類,這個類提供了方便的本地代碼生命週期回調(onCreate(),onPause(),onResume()等等)。你可以在你的native代碼中實現這些回調來處理事件。使用這種方式必須在Android2.3(API 9)以及更高的版本上運行。你不能訪問諸如Service和Content Providers,如果你想使用它們或者任何其他的框架,你仍然可以編寫JNI代碼。

NDK的內容
NDK包含APIs,文檔,和應用例子,來幫助你寫你的native代碼,具體的:
  • 一組構建c/c++源碼到native代碼庫的工具
  • 一種把native庫嵌入到應用程序包文件(apk文件)的方法
  • 一組將在所有的Android未來版本都支持的原生系統頭文件和庫,從Android1.5開始,使用native Acitivity將從Android2.3或者更高版本開始
  • 文檔,示例和教程
NDk的最新版本支持以下指令集:
  • ARMv5TE,包括Thumb- 1的說明
  • ARMv7 -A ,其中包括Thumb- 2和VFPv3 -D16的指令,與NEON / VFPv3的- D32的指令可選支持
  • x86指令
  • MIPS指令
用ARMv5TE的機器代碼將運行於所有基於ARM的Android設備。ARMv7-A僅在諸如Version Droid或者谷歌的Nexus One兼容的CPU設備上運行

NDK提供一個文檔的libc的頭文件(c庫),libm(數學庫),OpenGL ES(3D圖形庫),JNI接口和其他的庫,將在開發工具部分列出。

開發工具
NDK包含了一套交叉工具鏈(編譯器,連接器等等),可以在Linux,OS X和Windows(Cygwin)上生成原生的ARM二進制文件

它提供了一套穩定的本地API系統,保證對平臺所有後續版本的支持

  • libc (C library) headers
  • libm (math library) headers
  • JNI interface headers
  • libz (Zlib compression) headers
  • liblog (Android logging) header
  • OpenGL ES 1.1 and OpenGL ES 2.0 (3D graphics libraries) headers
  • libjnigraphics (Pixel buffer access) header (for Android 2.2 and above).
  • A Minimal set of headers for C++ support
  • OpenSL ES native audio libraries
  • Android native application APIS
NDK還提供了一個構建系統,可以讓你更高效開發源碼,而無需處理工具鏈/平臺/CPU/ABI等細節。你只需創建很短的文件來描述編譯哪些源和哪些地方Android程序將使用它們——構建系統將編譯這些源,並將編譯得到的共享庫直接放入應用程序的項目中

重要提示:除了上面這些庫,Android系統還有一些不穩定的庫,可能在未來的平臺版本中會改變。所以你的應用程序只應利用這個NDK提供的穩定的原生系統庫

文檔一章不翻譯了,發現有些不一樣的地方

示例應用程序
NDK包括的示例應用程序,說明如何在你的應用程序中使用native代碼

  • hello-jni — 一個簡單的應用程序,加載用native方法實現的共享庫中的字符串,然後在應用程序中顯示出來。
  • two-libs — 一個簡單的應用程序,動態加載共享庫並調用庫提供的一個native方法,在這種情況下,該方法是由共享庫導入靜態庫中實現的。
  • san-angeles — 一個簡單的應用程序,通過調用native OpenGL ES APIs 實現用GLSurfaceView object來管理活動的生命週期。
  • hello-gl2 — 一個簡單的應用程序,使用OpenGL ES2.0呈現三角形
  • hello-neon — 一個簡單的應用程序,展示如何使用cpufeatures庫檢測CPU在運行時的功能。具體而言,應用程序實現了兩個版本,c版本和NEON優化版本(如果設備支持)
  • bitmap-plasma — 一個簡單的應用程序,演示如何通過native代碼訪問Android Bitmap對象的像素緩衝區,並使用此生成一個“等離子”效果。
  • native-activity — 一個簡單的應用程序,演示如何通過native靜態庫創建一個native Activity
  • native-plasma — 另一個版本的等離子位圖,通過natice Activity來實現
對於每一個例子,NDK包含相應的c源碼和必要的Android.mk和Application.mk文件。都位於<ndk>/samples/<name>/目錄中,源碼可以在<ndk>/samples/<name>/jni/目錄中發現

通過調用ndk-build命令,你可以爲示例應用創建共享庫,一般生成的共享庫位於<ndk>/samples/<name>/libs/

接下來,創建使用共享庫的樣例Android應用程序

如果你使用Eclipse ADT開發,使用“導入項目”爲每個例子創建一個新的Android工程,從<ndk>/samples/<name>/目錄導入源文件,啓動AVD,在模擬器中運行應用
如果你使用ant來開發,在每個示例<ndk>/samples/<name>/中使用android工具創建一個構造文件,然後運行AVD,在模擬器中運行它。

探索hello-jni示例
hello-jni是一個簡單應用程序,從一個c函數接收一個字符串並用textview顯示出來。
該示例的主要組成包括:
  • android應用程序的基本結構(包括AndroidManifest.xml文件,一個src/res目錄,以及一個main Activity)
  • jni/目錄,其中包括native代碼實現的源文件和Android.mk文件
  • 一個test/目錄包含單元測試代碼

1、在eclispe內
  • 點擊 File > New Android Project...
  • 選擇從已有的源中創建項目
  • 選擇任何大於1.5的Android APi
  • 選擇 <ndk-root>/samples/hello-jni 目錄.
  • 完成
2、使用命令行
  • 導航到<ndk-root>/samples/hello-jni目錄
  • 運行一下命令行創建build.xml
android update project -p . -s
  • 使用ndk-build編譯native代碼
cd <ndk-root>/samples/hello-jni
<ndk_root>/ndk-build

建立和安裝應用程序,如果你使用eclipse,運行應用程序,以構建和在設備上安裝。
如果你使用Ant,請使用以下命令
ant debug
adb install bin/HelloJni-debug.apk

後面的native-Activity項目類似



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章