android 之 JNI 详解(五)

上面的都是基本类型。如果Java函数的参数是class,则以"L"开头,以";"结尾,中间是用"/" 隔开的包及类名。而其对应的C函数名的参数则为jobject. 一个例外是String类,其对应的类为jstring

  Ljava/lang/String; String jstring
  Ljava/net/Socket; Socket jobject

  如果JAVA函数位于一个嵌入类,则用$作为类名间的分隔符。

  例如 "(Ljava/lang/String;Landroid/os/FileUtils$FileStatus;)Z"

  Android JNI编程实践

  一、直接使用java本身jni接口(windows/ubuntu)


  1.在Eclipsh中新建一个android应用程序。两个类:一个继承于Activity,UI显示用。另一个包含native方法。编译生成所有类。

java代码:

  1. package eoe.jnitest;

  2. import android.app.Activity;
  3. import android.os.Bundle;

  4. public class jnitest extends Activity {

  5. @Override
  6. public void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.main);
  9. Nadd cal = new Nadd();
  10. setTitle("The Native Add Result is " + String.valueOf(cal.nadd(10, 19)));
  11. }
  12. }

  13. //Nadd.java文件:

  14. package eoe.jnitest;

  15. public class Nadd {
  16. static {
  17. System.loadLibrary ("Nadd");
  18. }
  19. public native int nadd(int a, int b);
  20. }

复制代码


       使用javah命令生成C/C++的.h文件。注意类要包含包名,路径文件夹下要包含所有包中的类,否则会报找不到类的错误。classpath参数指定到包名前一级文件夹,文件夹层次结构要符合java类的组织层次结构。

java代码:

  1. #include
  2. #ifndef _Included_com_hello_jnitest_Nadd
  3. #define _Included_com_hello_jnitest_Nadd
  4. #ifdef __cplusplus

  5. extern "C" {
  6. #endif
  7. JNIEXPORT jint JNICALL Java_com_hello_jnitest_Nadd_nadd
  8. (JNIEnv *, jobject, jint, jint);
  9. #ifdef __cplusplus
  10. }

复制代码


       3.编辑.c文件实现native方法。
  com_hello_jnitest_Nadd.c文件:

java代码:

  1. #include
  2. #include "com_hello_jnitest_Nadd.h"
  3. JNIEXPORT jint JNICALL Java_com_hello_jnitest_Nadd_nadd(JNIEnv * env, jobject c, jint a, jint b)
  4. {
  5. return (a+b);
  6. }

 

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值