Android NDK开发系列教程2:基本方法调用及传参

本文是Android NDK开发系列教程的第二部分,重点介绍如何使用JNI进行基本方法调用和参数传递,包括基本数据类型、字符串、数组、自定义对象以及List对象。通过具体例子展示了在Java和C/C++之间如何进行对象交互,如在Java向native传递基本数据类型、字符串、数组、自定义对象和List,以及在native向Java返回各种类型数据的实现方法。
摘要由CSDN通过智能技术生成

终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~

1. 简介

有时候我写了个Java层的方法,希望native层也能够调用(尤其是一个实体类的get,set方法在native一般都会用到)。这在jni开发中也很常见,jni.h中也提供了很多方法。下面利用具体实例进行说明。这里直接使用AS3.0里面的CMake进行编译了,之后会讲解下Android.mk和Application.mk的用法和含义。这里我主要介绍一下几个:
1. java向native传递常用基本数据类型和字符串类型
2. java向native传递数组类型
3. java向native传递自定义java对象
4. java向native传递List对象
5. native向java返回字符串类型
6. native向java返回java对象
7. native向java返回数组类型
8. native向Java返回List对象
对于上面的每个都给出对应的例子。
本节所有案例代码均已放到GitHub上,欢迎下载:
https://github.com/huangtianyu/JNILearnCourse

1.1 java和jni类型对照表

在我们调用方法时会用到方法的签名,使用类变量时需要用该变量对应的jni类型。下面给出对应的类型对照表。
1. 基本数据类型对照表:
这里写图片描述
2. 对象类型对照表:
这里写图片描述
3. 简写对应表
这里写图片描述

2. 具体例子

2.1 java向native传递常用基本数据类型和字符串类型

强大的AS在你写了java的native方法后,直接快捷键按Alt+Enter后即可生成对应的方法。
java层的方法:

package zqc.com.example;
public class NativeTest {
   
    // Used to load the 'native-lib' library on application startup.
    static {
        System.loadLibrary("native-lib");
    }
    //定义一个native方法,然后传入基本数据类型和String型
    public native void java2jniMethod1(boolean b, int i, float f, String s);
}

生成后的native方法:

extern "C"
JNIEXPORT void JNICALL
Java_zqc_com_example_NativeTest_java2jniMethod1(JNIEnv *env, jobject instance, jboolean b, jint i,
                                                jfloat f, jstring s_) {
    //在native层会把string转换成c/c++都特别熟悉的char*,由char*可以转string,wstring等等。
    //在Java层String是对象,这里讲char*指针指向了该对象,在方法结束的时候记得要是否该指针引用
    if (b == JNI_TRUE) {
        LOGE("b is true");
    } else {
        LOGE("b is false");
    }
    float nativi = i + f;
    LOGE("native i: %f", nativi);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值