安卓之JNI 和 NDK编程(六)java调用c++代码案例介绍

文章目录

(1)新建Jni类、定义natvie方法

(2)写对应的c++方法

(3)MainActivity调用

(4)Android映射 Jni 的规范写法

示例1

示范2

常见类型映射


上篇文章我们对java调用c++代码做了详细介绍,安卓之JNI 和 NDK编程(五)java调用c++代码详细介绍

这篇文章我们写一个native方法,多加两个参数实现一个加法的运算!

(1)新建Jni类、定义natvie方法

如果你要使用c++ 来写一些底层的库,要用java来调用的话,

我的建议是最好先写一个java类,如我这里写了一个Jni类

这个类如果将来你有多少ndk方法,就可以在类里面定义这些native方法,

封装在这个类里面,然后这个类做成单例的。

package com.luminal.ndktest;

/**
 * 用来封装Jni的native接口的
 */
public class Jni {

    //因为有很多地方要调用到,所以写成单例
    private static Jni obj = new Jni();
    public static Jni instance()
    {
        return obj;
    }

    //加载动态库
    static {
        //动态库的名字,参见"CMakeLists.txt"文件
        System.loadLibrary("native-lib");
    }


    public native int add(int a, int b);

}

(2)写对应的c++方法

#include <jni.h>
#include <string>

extern "C"  jint Java_com_luminal_ndktest_Jni_add(JNIEnv* env, jobject obj, jint x, jint y){

    return x + y;

}

(3)MainActivity调用

package com.luminal.ndktest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.TextView;


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        int num = Jni.instance().add(111,888);
        TextView tv = (TextView) findViewById(R.id.sample_text);

        tv.setText(String.valueOf("计算出来的结果为:"+num));
        Log.v("MainActivityTag",num+"");

    }

}

(4)Android映射 Jni 的规范写法

示例1

返回值对应:String 对应 jstring

方法名对应:getStringFromJni 对应 Java_com_luminal_ndktest_Jni_getStringFromJni

参数对应:Jni总要比Android要多这两个参数:JNIEnv* env, jobject obj

示范2

返回值对应:int 对应 jint

方法名对应:add 对应 Java_com_luminal_ndktest_Jni_add

参数对应:Jni总要比Android要多这两个参数:JNIEnv* env, jobject obj

java和c++参数名可以不一样,如:java写的 int a, int b, c++写的 jint x, jint y

 

常见类型映射

String --->jstring

double --->jdouble

int --->jint

我们也可以,选中jstring,右击 Go To,Declaration,查看Jni的类型

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被开发耽误的大厨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值