Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android開發中淺談NDK

Android開發中淺談NDK

編輯:Android開發實例

  介紹:
  Android SDK是一個允許Android應用開發人員使用C或C++源文件編譯並嵌入到本機源代碼中的應用程序包的一組工具。

  重要說明:
  Android NDK只能用於android 1.5以上版本

  1.Android NDK的目的:
  Android虛擬機允許你的應用程序源代碼通過JNI調用在本地實現的源代碼,簡單的說,這就意味著:

  你的應用程序將聲明一個或多個用’native’關鍵字的方法用來指明它們是通過本地代碼實現的
  例如:native byte[] loadFile(String filePath)

  你必須提供包含實現這些方法的共享庫(就是.so),將共享庫打包到你的應用程序包apk中,這些庫文件必須根據標准的Unix約定來命名為 lib<something>.so,並且是需要包含一個標准的JNI的接口,例如
  libFileLoader.so

  你的應用程序必須明確的裝載這些庫文件(.so文件),比如,在程序的開始裝載它,只需要簡單的添加幾句源代碼:

  java代碼:

  static {

  System.loadLibrary(“FileLoader”);

  }

  注意:這裡你不必再將前綴lib和後綴.so寫入。
  Android NDK對於Android SDK只是個組件,它可以幫你:
  生成的JNI兼容的共享庫可以在大於Android1.5平台的ARM CPU上運行
  將生成的共享庫拷貝到合適的程序工程路徑的位置上,以保證它們自動的添加到你的apk包中(並且簽名的)
  在以後的版本中,我們將提供來幫助你的源代碼通過遠程gdb連接和盡可能多的源代碼的信息。

  而且,Android NDK還提供:
  一組交叉編譯鏈(編譯器、鏈接器等)來生成可以在Linux,OS X和Windows(用Cygwin)運行的二進制文件
  一組與由Android平台提供的穩定的本地API列表的頭文件
  它們在docs/STABLE-APIS.html中有說明

  重要提示:
  記住,在以後的更新和發布平台中,Android系統鏡像中的大多數本地系統庫並不是一成不變的,而是可以徹底改變,甚至刪除的

  一個編譯系統(build system)可以允許開發者寫一個非常短的編譯文件(build files)去描述哪個源代碼需要編譯,並且怎樣編譯。編譯系統可以解決所有的toolchain/platform/CPU/ABI細節的問題。並且,較晚的NDK版本中還添加了更多的可以不用改變開發者的編譯文件的情況下的toolchains,platforms,系統接口。

  2.Android NDK的缺點

  NDK並不是一個可以編寫通用的源代碼並且可以在Android設備上運行的方法,你的應用程序還是需要使用JAVA程序,適當的處理系統事件來避免“應用程序沒有反應”的對話框或者處理Android應用程序的生命周期

  注意:可以適當的在源代碼中寫一個復雜的應用程序,用於啟動/停止一個小型的“應用程序包”

  強烈建議很好地理解的 JNI,因為許多操作在這種環境要求的開發人員,都采取具體的行動,不一定在常典型的本機代碼。這些措施包括:

  不能通過指針直接訪問VM的對象。比如:你不能安全的得到一個指向String對象的16位char數組的循環遍歷
  需要顯示引用管理本機代碼時候要保持處理JNI調用之間的VM對象
  NDK在Android平台僅僅提供了有限的本地API和庫文件的支持的系統頭文件,然而一個標准的Android系統鏡像包括許多本地共享庫,這些都應該被考慮在更新和發行版本的可以徹底改變的實現細節
  如果Android系統庫沒有明確的被NDK明確的支持,然後應用程序不應該依賴於它提供的,或者打破了將來在各種設備上的無線系統更新
  選定的系統庫將逐漸被添加到穩定的NDK API中。

  3.NDK開發實踐
  下面將給出一個怎樣用Android NDK開發本地代碼的粗略的概述
  (1)  把本地代碼放在$PROJECT/jni/…下,比如將hello.c放到apps/hello/jni/目錄下
  (2)  在你的NDK編譯系統中在$PROJECT/jni/Android.mk來描述你的源代碼
  (3)  可選:在$PROJECT/jni/Application.mk到你的編譯系統中來詳細描述你的項目,盡管你開始的話不一定需要它,但是它允許你使用更多的CPU或者覆蓋編譯器/鏈接器的標記
  (4)  從你的項目的目錄開始通過運行”$NDK/ndk-build”來編譯你的代碼,或者從子目錄開始
  (5)   最後一步可以copy,萬一成功,剝離共享庫的應用層序需要你的應用程序的項目根目錄。然後你通過通常的方法來生成最終的apk。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved