Android NDK開發“Hello World NDK”

來源:互聯網
上載者:User

如題,接下來講的是開發NDK的一個小列子,可以讓大家瞭解一下開發Android NDK的流程,在工作中,由我老大教給我的,加上自己理解,如有問題還請高手們指教!

(1)首先介紹自己的開發環境:Ubuntu下開發eclipse+android+ndk,其中配置android的開發環境網上肯定有不少,這裡就不多介紹了,ndk就是自己下載一個就可以,有windows和linux的版本。還需要有點JNI的基礎知識,我也剛學就不多說了。

(2)其次,建立一個android項目ndk_hello,配置

在包ndk.test下建立一個類NDKLib,其中編寫代碼:

public class NDKLib {static{System.loadLibrary("ndk_hello");}public native String hello();}

這裡需要用到JNI的知識,nativie這個關鍵字,在整個項目中我們不會用到java語言來編寫hello()這個方法,是會調用C後者C++的hello()方法。

其中static中的內容“ndk_hello”是對應的找到C的類,和之後的android.mk保持一致。

(3)找到你下載的ndk,開啟apps檔案夾,建立一個檔案ndk_hello,此時點擊F3,開啟另一個視窗,找到你的工作目錄,將你建立的項目建立捷徑,拷貝到ndk_test下,將拷貝過來的捷徑改名為project(只是規定),之後再在終端開啟:(打如下指令)

在apps/ndk_hello下建立一個檔案:Application.mk,內容如下:(大家在做上面那步應該先做建立這個檔案才能成功,不好意思順序弄錯了)

APP_PROJECT_PATH := $(call my-dir)/projectAPP_MODULES      := ndk_hello

(4)之後就是對之前寫過的NDKLib進行處理,我的ubuntu下的檔案夾名是yandong,按照你們機器的處理,我的工作目錄是在yandong/java/workplace

順序是:①找到建立的項目,項目/bin,編譯ndk.test.NDKLib(javah ndk.test.NDkLib),在項目的lib檔案下會自動產生一些東西。

②mkdir jni 建立一個jni的檔案夾

③由第一步編譯產生的.h檔案拷貝到這個jni檔案夾下

(5)此時在eclipse下重新整理自己的項目,找到jni下的.h檔案,此時這個.h檔案內容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class ndk_test_NDKLib */#ifndef _Included_ndk_test_NDKLib#define _Included_ndk_test_NDKLib#ifdef __cplusplusextern "C" {#endif/* * Class:     ndk_test_NDKLib * Method:    hello * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_ndk_test_NDKLib_hello  (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif

在jni檔案夾下建立一個.c的檔案,雷同.h的檔案名稱,編寫內容如下:

#include "ndk_test_NDKLib.h"JNIEXPORT jstring JNICALL Java_ndk_test_NDKLib_hello  (JNIEnv * env, jobject obj) {return (*env)->NewStringUTF(env, "Hello World NDK!!");}

其中include中匯入的是自己產生的標頭檔,裡面的方法名要和之前標頭檔裡面的方法名一致。此時的標頭檔就類似java的介面。

(6)在jni下建立一個檔案:Android.mk,其中編寫內容如下:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := ndk_helloLOCAL_SRC_FILES := ndk_test.cinclude $(BUILD_SHARED_LIBRARY)

其中ndk_test是在NDKLib類中定義的名字,ndk_test.c是在jni下建立的C檔案。

(7)到這為止NDK的開發流程基本結束了,最後一步就是顯示Hello World NDK!

這一步就很簡單了,在activity那個裡面設定一個TextView,調用這個就可以了:

package ndk.test;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class NDKTest extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);TextView tv = (TextView) this.findViewById(R.id.text);tv.setText(new NDKLib().hello());}}

顯示如下:

到這裡Hello World NDK就結束了,其中為了示範從建立的工程,可能有點出入,但是最好保證項目名與jni下的android.mk中的(LOCAL_MODULE    := ndk_hello)和ndk中apps下的項目裡的Application.mk(APP_MODULES      := ndk_hello)等保持一致最好了。

還請大家一起討論一下關於學習NDK的開發了,感覺關於開發NDK的例子比較少,也請各位高手多多指點!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.