NDK_HelloWorld开发指南

来源:互联网 发布:hp1005扫描软件打不开 编辑:程序博客网 时间:2024/05/16 18:16

开发android多年,近日处于兴趣,研究了一下NDK的东西,以下是一个简单的DEMO,希望对初学者能有一些帮助。


Java代码:

package com.ndk.helloworld;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends Activity {private TextView mTv;private TextView mTvSomeBody;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mTv = (TextView) findViewById(R.id.tv_main);mTv.setText(getHelloWorldFromNdk());mTvSomeBody = (TextView) findViewById(R.id.tv_somebody);mTvSomeBody.setText(sayHelloWorld("Mr.right"));}// NDK中对对应的方法名public native String getHelloWorldFromNdk();// NDK中对对应的方法名public native String sayHelloWorld(String somebody);// 加载金泰库static {System.loadLibrary("helloworld");}}

JNI内的代码:

#include <jni.h>#include <stdio.h>#include <string.h>//表示一下编码用C语言编译extern "C" {//获取HelloWorld//Java_(下划线连接的包名)_类名_方法名jstring Java_com_ndk_helloworld_MainActivity_getHelloWorldFromNdk(JNIEnv *env,jobject obj) {return env->NewStringUTF("NDK,Helloworld!");}//将jstring 转换成char*char* jstringTostring(JNIEnv* env, jstring jstr) {char* rtn = NULL;jclass clsstring = env->FindClass("java/lang/String");jstring strencode = env->NewStringUTF("utf-8");jmethodID mid = env->GetMethodID(clsstring, "getBytes","(Ljava/lang/String;)[B");jbyteArray barr = (jbyteArray) env->CallObjectMethod(jstr, mid, strencode);jsize alen = env->GetArrayLength(barr);jbyte* ba = env->GetByteArrayElements(barr, JNI_FALSE);if (alen > 0) {rtn = (char*) malloc(alen + 1);memcpy(rtn, ba, alen);rtn[alen] = 0;}env->ReleaseByteArrayElements(barr, ba, 0);return rtn;}//对某人说Hello//Java_(下划线连接的包名)_类名_方法名jstring Java_com_ndk_helloworld_MainActivity_sayHelloWorld(JNIEnv *env,jobject obj, jstring someBody) {char *a = jstringTostring(env, someBody);char *b = "Hello.";const jchar * jcstr = (env)->GetStringChars(someBody, 0);char* result = (char*) (malloc(strlen(a) + strlen(b) + 1));strcpy(result, a);strcat(result, b);return env->NewStringUTF(result);}}


代码量比较少,而且这里也没有讲到配置NDK的基础步骤(可自行从别的博客查询基本的配置方法)。

DEMO下载地址:http://download.csdn.net/detail/yanjunhui2011/9525963

0 0