Android NDK开发入门


Android NDK是基于JNI技术的。本来想把这些文章写道Java JNI中去,考虑到自己使用的是android平台,还是放到这里来了。最近研读The Java Native Interface ,我得到的知识都是从这里面来的。书写的非常好,思路清晰,语言简洁明了,向大家推荐。

从最简单的开始:

(一):Java 调用native 方法。

  1. public class JNITestActivity extends Activity {  
  2.     TextView textView;  
  3.     public native String getText();//声明native 方法   
  4.     @Override  
  5.     public void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.main);  
  8.         textView = (TextView)findViewById(R.id.textView);  
  9.         String myString = getText();//调用native方法    
  10.         textView.setText(myString);  
  11.     }  
  12.     static {  
  13.         System.loadLibrary("mylib"); //导入链接库   
  14.     }  
  15. }  

使用native方法需要预先声明,与普通函数的区别就是多了native关键字。javah利用它来生成相应的头文件。

在android 的NDK开发中我不建议使用javah工具生成头文件。理由是javah生成的头文件与我们需要的函数名相差比较大。在工程下新建jni目录存放C与C++文件。新建源文件source.c

  1. #include <string.h>   
  2. #include <stdio.h>   
  3. #include <jni.h>   
  4. jstring  
  5. Java_com_xp_JNITestActivity_getText (JNIEnv* env, jobject obj)  
  6. {  
  7.     return (*env)->NewStringUTF(env, "Test Android NDK!");  
  8. }  
jstring 与java中的 String相对应,函数返回的类型是jstring。native方法前面都是Java开头、包名在中间、再是类名、最后以方法名结尾,并且包含两个参数 JNIEnv* 和 jobject。详细情况后面会介绍。下面在jni中新建一个Android.mk文件。它实质上是一个makefile文件,指导编译器进行编译连接。
  1. LOCAL_PATH := $(call my-dir)  
  2.   
  3. include $(CLEAR_VARS)  
  4.   
  5. LOCAL_MODULE := mylib  
  6. LOCAL_SRC_FILES := source.c  
  7.   
  8. include $(BUILD_SHARED_LIBRARY)  
LOCAL_MODULE说明生成的库名。LOCAL_SRC_FILES指向源文件。详细以后说明,或者参考NDK doc。

下面进入cygwin cd到工程目录下执行ndk-build。它会生成libmylib.o文件


注意:在java 中我们导入的是mylib。

  1. System.loadLibrary("mylib");  

然后开始编译运行,下面是结果:


  • 1
  • 2
  • 3
  • 下一页
【内容导航】
第1页:方法的调用与返回 第2页:基本类型的传递与返回
第3页:访问Java中的域

相关内容