android 之 JNI 详解 (七)

4 directories, 4 files

  5.编译:make APP=myjni.

  以上内容在ubuntu完成。以下内容在windows中完成。当然也可以在ubuntu中完成。

  6.在eclipsh中创建android application。将myjni中自动生成的libs文件夹拷贝到当前工程文件夹中,编译运行即可。

Java代码:

  1. package eoe.demo;

  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.widget.TextView;

  5. public class NdkTest extends Activity {

  6. @Override
  7. public void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. TextView tv = new TextView(this);
  10. tv.setText( stringFromJNI() );
  11. setContentView(tv);
  12. }

  13. public native String stringFromJNI();
  14. static {
  15. System.loadLibrary("myjni");
  16. }

  17. }
复制代码


       对于二中生成的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代码:

  1. class Prompt {

  2. // native method that prints a prompt and reads a line
  3. private native String getLine(String prompt);

  4. public static void main(String args[]) {
  5. Prompt p = new Prompt();
  6. String input = p.getLine("Type a line: ");
  7. System.out.println("User typed: " + input);
  8. }

  9. static {
  10. System.loadLibrary("Prompt");
  11. }
  12. }

 

 

系列之Android 深入研究JNI(七)的帖子链接http://www.eoeandroid.com/thread-90134-1-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值