[C.C++] java代码中如何嵌入c语言,Android中Java代码与C的互相调用(JNI的简单使用)

329 0
Honkers 2025-5-10 06:06:30 来自手机 | 显示全部楼层 |阅读模式

引言

最近在做项目的时候,接触到JNI,想一想自己第一次接触这个东西的时候,还是好久之前,现在既然接触到了,那我就简单的跟大家讲一讲JNI的基本使用方法。

JNI(Java Native Interface):java本地开发接口,JNI是一个协议,这个协议用来沟通java代码和外部的本地代码(c/c++),外部的c/c++代码也可以调用java代码。

我们为什么要使用JNI呢,可以从效率和安全性两方面来说:

1. 安全性:java是版解释型语言,很容易比反编译拿到源代码,我们一些加密方面的问题,就可以用JNI来实现,

2. 效率:C/C++是本地语言,比java更高效。

做JNI,我们先的下载Android NDK(Native Development Kit )下载链接:(https://developer.android.google.cn/ndk/downloads/index.html),Android NDK是一套工具集合,允许你用像C/C++语言那样实现应用程序的一部分。

JNI和NDK的区别:

从工具上说,NDK其实多了一个把.so和.apk打包的工具,而JNI开发并没有打包,只是把.so文件放到文件系统的特定位置。

从编译库说,NDK开发C/C++只能使用NDK自带的有限的头文件,而使用JNI则可以使用文件系统中带的头文件。

从编写方式说,它们一样。

知识前瞻

Java类型和本地类型的对应关系:

Java类型

本地类型(JNI)

描述

boolean(布尔型)

jboolean

无符号8个比特

byte(字节型)

jbyte

有符号8个比特

char(字符型)

jchar

无符号16个比特

short(短整型)

jshort

有符号16个比特

int(整型)

jint

有符号32个比特

long(长整型)

jlong

有符号64个比特

float(浮点型)

jfloat

32个比特

double(双精度浮点型)

jdouble

64个比特

void(空型)

void

N/A 先就看这么多吧,网上也有很多大神写的博客,写得很好,有时间可以去看看,参考博客:https://blog.csdn.net/yuzhou_zang/article/details/78410632 ,这里我只是教大家如何使用Java与C/C++的互相调用。

实战

在这里我给大家做的例子是Java调用C语言和C语言调用Java来实现加法操作。

二话不说,开干,新建Android工程。XMl界面定义如下:

XML代码

MainActivity代码如下:

public class MainActivity extends AppCompatActivity implements View.OnCl

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4012
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行