首页 > 代码库 > 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。