ndk入门基础demo

本文将详细的记录第一次使用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调用了。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值