Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android NDK 環境搭建 + 測試例程

Android NDK 環境搭建 + 測試例程

編輯:關於Android編程

 懶得廢話一大堆概念,關於ADT、NDK的概念要是你不懂,怎麼會搜到這裡來?所以你只需要根據下面的步驟來,就可以完成NDK環境搭建了。     步驟:(假設你未安裝任何相關開發工具,如果已經安裝了,就可以跳過)   一. 環境搭建   1. 安裝 jdk     安裝完畢後配置好環境變量(我安裝的是jdk1.7)     JAVA_HOME = C:\Java\jdk1.7.0_51     PATH = C:\Java\jdk1.7.0_51\bin     CLASSPATH = .;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar     可以打開 cmd 後 輸入:java -version 檢查到底安裝成功沒。   2. 安裝 eclipse 和 adt   安卓官網已經將adt集成到了eclipse中,之前在線安裝adt的過程簡直是慘不忍睹。   在安卓官網上下載集成包,我下載的是 adt-bundle-windows-x86_64-20140624.zip       我把 這兩個文件分享在了百度雲盤可以下載:http://pan.baidu.com/s/1kTA4vn5   下載後建議解壓在 D:\Android 目錄,也可以選擇別的目錄。   集成包解壓後在 D:\Android 下將有兩個目錄和一個文件:      eclipse  : eclipse 目錄      sdk   :安卓sdk目錄,裡面只有4.4的包      SDK Manager.exe : SDK管理器,可以用來下載別的版本的開發包,國內訪問經常被拒絕,繞過的方法可以上網搜。      3. 安裝NDK   在安卓官網上下載 NDK 壓縮包並且解壓。需要注意的是NDK目錄不得有空格,建議依舊解壓到 D:\Android   我下載的版本是 android-ndk-r9d-windows-x86_64.zip   r7版本之後可以直接使用ndk-build命令完成編譯,所以不必安裝cygwin環境。   配置環境變量path:     在path 中加入 NDK的安裝目錄,比如:D:\Android\android-ndk-r9d     保證在打開 cmd 後,輸入 ndk-build 顯示如下提示。            而不是找不到 ndk-build 這條命令!       二. TestNDK   1. 建立新的安卓工程:TestNDK 向導在創建應用的時候 默認的包 前綴是 com.example ,沒必要更改。所以最後的包名為:com.example.testndk 創建一個啟動Activity,就叫 TestNDK (非要叫MainActivity的話,後面記得更改) ps: 我創建的時候,選擇創建Activity結果沒有反應,只能創建一個java文件。這時記得在 AndroidManifest.xml 裡面的application標簽下加上:   復制代碼  <activity              android:name="com.example.testndk.TestNDK"              android:label="@string/app_name" >              <intent-filter>                  <action android:name="android.intent.action.MAIN" />                 <category android:name="android.intent.category.LAUNCHER" />          、          </intent-filter>  </activity> 復制代碼     不管是用向導還是直接新建java文件,最後用下列代碼覆蓋 TestNDK.java 文件:   復制代碼  package com.example.testndk;   import android.app.Activity; import android.widget.TextView; import android.os.Bundle;   public class TestNDK extends Activity {     @Override      public void onCreate(Bundle savedInstanceState)      {          super.onCreate(savedInstanceState);          TextView  myTextView = new TextView(this);          myTextView.setText( stringTestNdk() );          setContentView(myTextView);      }        public native String stringTestNdk ();      public native String stringTestNdk2 ();        static {        try{           System.loadLibrary("testNDK");       }catch(UnsatisfiedLinkError ule){           System.err.println("WARNING: Could not load library testndk!");       }    }  } 復制代碼     2. 生成 .h 頭文件   使用eclipse 編譯一下工程,目的是生成相關的的 .class 文件,因為 動態鏈接庫還未創建,即使安裝到手機上也會崩潰。         不知道是不是版本的問題,我搜到的教程裡面反正亂七八糟,根本就不對應我的實際情況。   在我的電腦上,eclipse將生成的class文件存放在 bin\classes  (相對於工程目錄,後面的操作全部基於根目錄)   生成 .h 頭文件的程序是 javah (不了解的可以搜索相關資料看一下)    在根目錄下啟動命令提示符(或者打開命令提示符切換到根目錄下,取決你的右鍵菜單裡面有沒有打開命令提示符)。      輸入如下命令:       javah -classpath bin\classes;D:\Android\sdk\platforms\android-20\android.jar -d jni com.example.testndk.TestNDK    其中 -classpath 裡面有兩個目錄,一個是前面說的 bin\classes ,根據實際情況更改   第二個是 安卓的jar包,要是不加上就會報錯,如果你把sdk安裝在別的目錄,就做出相應的更改。如果目錄裡面有空格,就把字符串用 "" 包圍。   -d 指定生成的目錄,即將生成的頭文件存在在工程目錄下的jni目錄。     上述命令執行完畢後,jni目錄下增加了一個 :com_example_testndk_TestNDK.h 文件,內容暫時不用管。       3. 編譯生成 so 文件   在jni目錄下創建兩個文件     第一個是:testNDK.c   復制代碼  #include <jni.h>  #include <string.h>  // public native String stringTestNdk (); 方法的c簽名,格式為 Java_包名_類名_方法名  JNIEXPORT jstring JNICALL Java_com_example_testndk_TestNDK_stringTestNdk(JNIEnv *env, jobject this)  {      return (*env)->NewStringUTF(env, "Hello,test NDK !");  } 復制代碼     第二個是:Android.mk    LOCAL_PATH := $(call my-dir)  include $(CLEAR_VARS)  LOCAL_MODULE    := testNDK  LOCAL_SRC_FILES := testNDK.c  include $(BUILD_SHARED_LIBRARY)    保存後,退回到工程目錄下打開命令提示符,執行:ndk-build   命令執行完畢後,在 libs\armeabi 目錄下應該增加了一個 libtestNDK.so 文件。       4. 安裝apk   重新編譯運行eclipse,不出意外將會啟動一個程序,顯示: Hello,test NDK !   如果程序運行奔潰,並且Log處顯示:WARNING: Could not load library testndk!。   說明載入 共享庫失敗,如果確定代碼沒有變動,就用Winrar打開 bin目錄下面的 apk文件,看看 lib/armeabi 裡面有沒有 libtestNDK.so 。 如果沒有,就打開安卓工程的屬性下的 java bulid path,將 libs/armeabi 加入源路徑,並且重新清理運行。       三. 相關說明   1.  我在 TestNDK類中定義了兩個 native 方法,生成的 頭文件中有這兩個方法的簽名,但是我只實現第一個方法。   如果你在 程序中調用了 第二個方法就會導致 找不到 native 方法異常。    要是共享庫載入成功(即沒有顯示 自定義的那個警告)   2.    上述僅實現了一個類中的一個方法,但是 一個 c 文件裡面是可以包含多個 不同的導出函數的,所以 使用 javah得到的方法簽名 的實現代碼都可以放在一個 c 文件裡面。                                (實際上方法簽名也可以自己寫,沒必要非得用 javah)     要是有多個c文件生成一個 so,比如 1.c 、2.c ,可以將  LOCAL_SRC_FILES 賦值為:        LOCAL_SRC_FILES :=  1.c 2.c    
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved