首页 > 代码库 > NDK 编程写法1

NDK 编程写法1

 

参考资料:

Android平台上的JNI技术介绍
http://blog.csdn.net/thinkinwm/article/details/18700807

 


 

 

E:\android-ndk-r9\samples\hello-jni

HelloJni的Java代码如下:

package com.example.hellojni;import android.app.Activity;import android.widget.TextView;import android.os.Bundle;public class HelloJni extends Activity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        TextView tv = new TextView(this);        tv.setText(stringFromJNI()); //调用native函数        setContentView(tv);    }    /*      * 声明含有native关键词的函数,就可以在类中使用了。     */    public native String stringFromJNI();    /*      * 该函数并没有在共享库中实现,但是仍然可以声明。     * 没有实现的native函数也可以在类中声明,native方法仅在首次调用时才开始搜索。     * 若没有找到该方法,会抛出java.lang.UnsatisfiedLinkError异常     */    public native String unimplementedStringFromJNI();    /* 使用静态方式再创建类时就载入共享库,该共享库(后面会介绍)在程序安装后     * 位于/data/data/com.example.HelloJni/lib/libhello-jni.so     */    static {        //这个类被加载的时候,加载 了这个 .so的库        System.loadLibrary("hello-jni");    }}

 

Java代码中调用native函数很简单。大致分为以下几步

  • 调用 System.loadLibrary 方法载入共享库
  • 声明native方法
  • 调用native方法

 


 

 

 

hello-jni.c

#include <string.h>#include <jni.h>  //由google 提供的标准头文件,包含了 与Java 交互的结构/** * (Java_) + (包名把点换成了下划线)+(带上类文件名)+(Java中调用的方法名) */jstringJava_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,                                                  jobject thiz ){    /**     * JNIEnv* env 是指针型变量,指向的是和当前线程关联的,通过这个可以访问到和这个线程有关的所有东西     *     *     */    /**     * C语言的字符串 是ASCII码     * Java 现在流行的是 UTF编码     */    return (*env)->NewStringUTF(env, "Hello from JNI XZQ!"); //C语言的写法    //return (*env)->NewStringUTF("Hello from JNI XZQ!"); //C++语言的写法,不用带 env,}

 

 

写完后,cmd 切换到工程目录下, ndk-build编译下,之后可以安装

 

NDK 编程写法1