android NDK 開發環境搭建

1.下載android ndk 推薦版本爲:android-ndk64-r10b-windows-x86_64

2.配置NDK,點Window->Preferences->Android->NDK,設置NDK路徑。

3.爲eclipse 配置生成jni調用頭文件的命令工具,具體設置如下:

Name:javah

Location:%JAVA_HOME%/bin/avah.exe

Work Directory:${project_loc}

Arguments:-v -classpath "${project_loc}/bin/classes" -d "${project_loc}/jni" ${java_type_name}

4.創建一個普通的android工程NDKTest,在工程上右鍵點擊Android Tools->Add Native Suppor,然後給.so文件取個名字(默認已經起好了,就是包名NDKTest)。這時候工程就會多一個jni的文件夾,jni下有Android.mk和NDKTest.cpp文件。Android.mk是NDK工程的Makefile,NDKTest.cpp就是NDK的源文件。

5.在android中添加一個jni調用的類,名爲JNI。在其中添加native的調用方法,代碼如下:

 

package com.example.ndktest;

public class JNI {
	public native String NDKTestFromJNI();// native聲明,表示這個方法來自Native層。實現過程已經在native層實現了

	static {
		System.loadLibrary("NDKTest");// 加載庫,前面的lib和後綴名不用寫
	}
}

 6.點擊這個JNI類,再點擊菜單工具的javah,就在工程的jni目錄下生成了jni調用的頭文件,com_example_ndktest_JNI.h代碼如下:

 

 

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

#ifndef _Included_com_example_ndktest_JNI
#define _Included_com_example_ndktest_JNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_ndktest_JNI
 * Method:    NDKTestFromJNI
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_ndktest_JNI_NDKTestFromJNI
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

 7.在NDKTest.cpp中引用這個頭文件,並實現其中的jni調用方法,代碼如下:

 

#include <jni.h>
#include <string.h>
#include "com_example_ndktest_JNI.h"

JNIEXPORT jstring JNICALL Java_com_example_ndktest_JNI_NDKTestFromJNI(JNIEnv* env,
        jobject thiz) {
    return env->NewStringUTF("Hello from JNI !");
}

 8.在android中調用JNI中的方法:

 

TextView tv = new TextView(this);
JNI jni=new JNI();
tv.setText(jni.NDKTestFromJNI());
setContentView(tv);

 9.增加其他芯片的so的生成。默認情況下so只生成armeabi目錄下的so,要爲其他的芯片架構生成so,需要在工程的jni目錄下添加Application.mk文件,內容如下:

APP_ABI := armeabi armeabi-v7a arm64-v8a x86

 

 就可以生成armeabi、 armeabi-v7a、 arm64-v8a 、x86四個目錄下的so包,其他的芯片架構,以此類推。

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