android jni 调用java_Android与JNI(三) ---- c++调用java(转载)

JNI就是Java Native Interface, 即可以实现Java调用本地库, 也可以实现C/C++调用Java代码, 从而实现了两种语言的互通, 可以让我们更加灵活的使用.通过使用JNI可以从一个侧面了解Java内部的一些实现.

本文使用的环境是

64位的win7系统

JDK 1.6.0u30 (32位)

C/C++编译器是 Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86 (VC 6.0的, 其他版本的也可以编译通过, 测试过vs2010)

本文使用到的一些功能:

创建虚拟机

寻找class对象, 创建对象

调用静态方法和成员方法

获取成员属性, 修改成员属性

C/C++调用Java代码的一般步骤:

编写Java代码, 并编译

编写C/C++代码

配置lib进行编译, 配置PATH添加相应的dll或so并运行

1.编写Java代码并编译

这段代码非常简单, 有个静态方法和成员方法, 一个public的成员变量

public classSample2 {publicString name;public staticString sayHello(String name) {return "Hello, " + name + "!";

}publicString sayHello() {return "Hello, " + name + "!";

}

}

由于没有定义构造函数, 所以会有一个默认的构造函数.

运行下面的命令编译

>javac Sample2.java

可以在当前目录下看到Sample2.class文件, 编译成功, 第一步完成了, So easy!

2.查看Sample2类中的签名

>javap -s -private Sample2

结果如下

Compiled from "Sample2.java"

public classSample2 extends java.lang.Object{publicjava.lang.String name;

Signature: Ljava/lang/String;publicSample2();

Signature: ()Vpublic staticjava.lang.String sayHello(java.lang.String);

Signature: (Ljava/lang/String;)Ljava/lang/String;publicjava.lang.String sayHello();

Signature: ()Ljava/lang/String;

}

//调用默认构造函数

obj = (*env)->AllocObjdect(env, cls);

构造函数也是方法, 类似调用方法的方式.//调用指定的构造函数, 构造函数的名字叫做

mid = (*env)->GetMethodID(env, cls, "", "()V");

obj= (*env)->NewObject(env, cls, mid);

3.调用方法和修改属性

关于方法和属性是有两个ID与之对应, 这两个ID用来标识方法和属性.

jmethodID mid;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值