您的位置:首页 > 其它

ndk入门基础demo

2015-06-08 13:36 169 查看
本文将详细的记录第一次使用ndk的相关内容,并以一个小例子来展开叙述。(在操作以下指令与编码前,请先配置ndk的环境变量,方法与jdk配置相同,只需配置bin目录即可)

当前操作全部是在eclipse中进行,android studio暂时不能全面支持ndk。

package com.example.hellondk;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {
	
	static {
		System.loadLibrary("hello");
	}
	public static native String getStringFromC();
	
	private TextView text;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
			text = (TextView)findViewById(R.id.text);
		//System.out.println(getStringFromC());
			text.setText(getStringFromC());
	}

}


其中 public static native String getStringFromC();要率先书写,这个native方法将通过javah指令去生成一个java的头文件:

1.手动创建一个名为“jni”的目录。

2.将cmd打开,切换到当前项目的目录下。执行命令,javah -classpath bin/classes;D:\sdk_r10\platforms\android-18\android.jar -d jni com.example.hellondk.MainActivity

[注]:javah -classpath bin/classes;[sdk\platforms\任一版本\android.jar] -d [生成文件存放的文件夹] [包名.类名]

3.在jni目录下创建一个c语言的文件,引入之前编译好的.h文件

#include<stdio.h>
#include<stdlib.h>

#include 'com_example_hellondk_MainActivity.h'

JNIEXPORT jstring JNICALL Java_com_example_hellondk_MainActivity_getStringFromC
  (JNIEnv *env, jclass jclass){
	return (*env)->NewStringUTF(env, "你好,世界")
}
4.在jni目录下引入Android.mk文件(可复制,无需记忆)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello
LOCAL_SRC_FILES := hello.c

include $(BUILD_SHARED_LIBRARY)

LOCAL_MODULE是指定编译过后的so叫什么名字

LOCAL_SRC_FIFES是指编译哪个c文件

5.在当前目录下,cmd中执行 nkd-build

执行过后会在obj->local->armeabi 目录下发现so文件,名为libhello.so。

6.回到Activity中,使用
static {
		System.loadLibrary("hello");
	}


加载so包,万事大吉,可以调用
public static native String getStringFromC();完成ndk调用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: