Eclipse下搭建Android的NDK開發環境

鋸齒流沙發表於2017-12-26

使用Eclipse開發DNK,個人感覺更加的友好、容易。因此在Eclipse下搭建了一個NDK開發環境和開發流程。

一般的,首先要搭建Android開發環境,eclipse + jdk + adt + sdk 即可。

這裡重點講解ndk開發開發流程。我使用的是android-ndk-r14b開發包。到網上下載 NDK,解壓即可。

配置ndk環境

操作流程:window ----->preferences------>Android------>NDK 然後將剛剛解壓的ndk下的build導進來即可。

NDK配置.png

NDK開發流程

1)、新建Android專案 2)、建立類,編寫本地方法

本地方法.png

3)、使用javah命令生成.h標頭檔案。專案右鍵--->Android Tools------->add native support。這樣就可以生成jni目錄,將生成的標頭檔案放到jni目錄下。

jni目錄.png

4)、Android.mk檔案配置so庫名。

Android.png

5)、我們看到標頭檔案會出現錯誤,需要匯入jni.h等標頭檔案

執行結果.png

專案右鍵---->properties----->C/C++ Gerneral------>Paths and Symbols 新增入需要的標頭檔案。

include.png

將上圖所示的ndk下的路徑add進來。

add.png

這樣就可以了,在目錄下包含一個includes目錄。

執行結果.png

6)、實現標頭檔案中定義的函式

執行結果.png

7)、build project編譯生成.so動態庫

執行結果.png

8)、載入動態庫

執行結果.png

9)、呼叫本地方法

執行結果.png

10)、執行結果

執行結果.png

以上就是eclipse下的ndk開發流程。


給出各檔案內容

MainActivity

private TextView mTextView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mTextView = (TextView)this.findViewById(R.id.mytext);
		mTextView.setText(NDKTest.getStrFromJNI());
	}
複製程式碼

NDKTest

public class NDKTest {
	
	public native static String getStrFromJNI();
	
	static{
		System.loadLibrary("myndk");
	}

}
複製程式碼

com_example_ndkfile_NDKTest.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_ndkfile_NDKTest */

#ifndef _Included_com_example_ndkfile_NDKTest
#define _Included_com_example_ndkfile_NDKTest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_ndkfile_NDKTest
 * Method:    getStrFromJNI
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_ndkfile_NDKTest_getStrFromJNI
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif
複製程式碼

myndk.c

#include "com_example_ndkfile_NDKTest.h"
#include <jni.h>

JNIEXPORT jstring JNICALL Java_com_example_ndkfile_NDKTest_getStrFromJNI
  (JNIEnv *env, jclass jcls){
	return (*env)->NewStringUTF(env,"hello formjni");
}

複製程式碼

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := myndk
LOCAL_SRC_FILES := myndk.c

include $(BUILD_SHARED_LIBRARY)

複製程式碼

相關文章