4 directories, 4 files
5.编译:make APP=myjni.
以上内容在ubuntu完成。以下内容在windows中完成。当然也可以在ubuntu中完成。
6.在eclipsh中创建android application。将myjni中自动生成的libs文件夹拷贝到当前工程文件夹中,编译运行即可。
Java代码:
- package eoe.demo;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.TextView;
- public class NdkTest extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- TextView tv = new TextView(this);
- tv.setText( stringFromJNI() );
- setContentView(tv);
- }
- public native String stringFromJNI();
- static {
- System.loadLibrary("myjni");
- }
- }
对于二中生成的so文件也可采用一中的方法push到avd中运行。
本篇将介绍在JNI编程中如何传递参数和返回值。
首先要强调的是,native方法不但可以传递Java的基本类型做参数,还可以传递更复杂的类型,比如String,数组,甚至自定义的类。这一切都可以在jni.h中找到答案。
1. Java基本类型的传递
用过Java的人都知道,Java中的基本类型包括boolean,byte,char,short,int,long,float,double 这样几种,如果你用这几种类型做native方法的参数,当你通过javah -jni生成.h文件的时候,只要看一下生成的.h文件,就会一清二楚,这些类型分别对应的类型是 jboolean,jbyte,jchar,jshort,jint,jlong,jfloat,jdouble 。这几种类型几乎都可以当成对应的C++类型来用,所以没什么好说的。
2. String参数的传递
Java的String和C++的string是不能对等起来的,所以处理起来比较麻烦。先看一个例子,
Java代码:
- class Prompt {
- // native method that prints a prompt and reads a line
- private native String getLine(String prompt);
- public static void main(String args[]) {
- Prompt p = new Prompt();
- String input = p.getLine("Type a line: ");
- System.out.println("User typed: " + input);
- }
- static {
- System.loadLibrary("Prompt");
- }
- }
系列之Android 深入研究JNI(七)的帖子链接http://www.eoeandroid.com/thread-90134-1-1.html