Java生成jni.h头文件,java调用C方法 图文详解

这篇具有很好参考价值的文章主要介绍了Java生成jni.h头文件,java调用C方法 图文详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境搭建

1. android studio2021.2.1

2. JDK版本1.8

一、创建一个android项目 

File ——> New ——> New Project ——> Empty Activity

创建后如下图所示

Java生成jni.h头文件,java调用C方法 图文详解

二、创建一个java调用C的类

2.1 java类命名为JNITest,创建一个两数之和的方法sums

大概需求:①java传两个整数给C

                  ②C接收到来自java的两个整数,并且相加

                  ③C把两个数之和的结果返回给java

Java生成jni.h头文件,java调用C方法 图文详解

 2.2 根据java类生成jni.h的头文件

(1)AS打开Terminal窗口

点击底部导航栏Terminal

Java生成jni.h头文件,java调用C方法 图文详解

(2) 用命令打开JNITest类所在的目录

 在Terminal窗口中输入cd app\src\main\java\com\zaq\javacallc,按键盘Enter键

Java生成jni.h头文件,java调用C方法 图文详解

 (3)执行命令 javac -encoding utf8 -h . JNITest.java(注意:-encoding utf8 指定源文件编码格式,-h后面有个点, 点 前后面都有个空格,点的意思是头文件生成在当前目录下)

执行后过会会自动生成一个jni头文件com_zaq_javacallc_JNITest.h,如下图所示:

Java生成jni.h头文件,java调用C方法 图文详解

 三、java调用C的过程

3.1 创建/配置相应的文件

(1)在main下创建一个jni文件夹

Java生成jni.h头文件,java调用C方法 图文详解

(2) 把头文件移到jni文件夹下,删除JNITest.class

Java生成jni.h头文件,java调用C方法 图文详解

(3)在jni下创建C/C++ Source File,命名为Test.c。

Java生成jni.h头文件,java调用C方法 图文详解 

(4)在jni下创建文件Android.mk

Android.mk里面的内容

#表示Android.mk所在目录
LOCAL_PATH := $(call my-dir)

#CLEAR_VARS变量指向特殊 GNU Makefile,用于清除部分LOCAL_变量
include $(CLEAR_VARS)

#模块名称
LOCAL_MODULE    := javacallc
#构建系统用于生成模块的源文件列表
LOCAL_SRC_FILES := Test.c

#BUILD_SHARED_LIBRARY 表示.so动态库
#BUILD_STATIC_LIBRARY 表示.a静态库
include $(BUILD_SHARED_LIBRARY)

Java生成jni.h头文件,java调用C方法 图文详解

3.2  在gradle.build中的配置,生成so库文件

(1)gradle.build配置

android里面的defaultConfig配置

//定义ndkBuild默认配置属性
 externalNativeBuild {
     ndkBuild {
         cppFlags ""
     }
 }
 ndk {
     // 生成指定CPU平台对应的so库文件
     abiFilters "arm64-v8a"
 }

跟defaultConfig同级的配置

//定义ndkBuild对应的Android.mk路径(重要)
externalNativeBuild {
    ndkBuild{
        path file("src/main/jni/Android.mk")
    }
}

Java生成jni.h头文件,java调用C方法 图文详解

 (2)查看最终so库文件的生成

重新Rebuild Project,即点击状态栏的 File ——> Rebuild Project

so文件的最终命名是lib+javacallc(Android,mk文件里面的模块名称).so,即:libjavacallc.so

最终生成so库文件的路径如下:

Java生成jni.h头文件,java调用C方法 图文详解

 3.3 在C代码实现两数相加

(1)在Test.c编写相加代码

把com_zaq_javacallc_JNITest.h文件导入进来,再把相加方法拷贝进来进行参数的相加

Java生成jni.h头文件,java调用C方法 图文详解

(2) MainActivity调用sums()方法

Java生成jni.h头文件,java调用C方法 图文详解

Java生成jni.h头文件,java调用C方法 图文详解

 运行后最终的输出结果如下图所示:

Java生成jni.h头文件,java调用C方法 图文详解

 文章来源地址https://www.toymoban.com/news/detail-448185.html

到了这里,关于Java生成jni.h头文件,java调用C方法 图文详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android JNI复杂用法,回调,C++中调用Java方法

    Android JNI的 普通用法估计很多人都会,但是C++中调用Java方法很多人不熟悉,并且网上很多介绍都是片段的。 虽然C/C++调用Java不常用,但是掌握多一点还是有好处的。 Android JNI的基础知识介绍,之前已经有介绍,不熟悉的可以先看看: Android Jni的介绍和简单Demo实现: https://

    2024年03月26日
    浏览(35)
  • Android Java代码与JNI交互 JNI方法Java类字段 (六)

    🔥 Android Studio 版本 🔥    🔥 Java 基础类型数据对应 Native层的字母 🔥  通过 jni 查找java某个类中相应字段对应的数据类型 , 需要使用到 jni 中的 GetFieldID() 函数 🔥 Java 引用类型数据对应 Native层字符串 🔥   🔥 创建 JNIAccessField 文件 🔥 🔥 配置动态库名称 🔥  🔥 生成

    2024年02月16日
    浏览(30)
  • Android Java代码与JNI交互 JNI访问Java构造方法(九)

    🔥 Android Studio 版本 🔥    🔥 创建包含JNI相关函数类 JNIConstructorClass.java 🔥  🔥 配置动态库名称 🔥   🔥 生成可关联的库链接 🔥  为了让Java能够调用 constructor-class-lib 库中的函数,您需要使用 CMake 构建脚本中的 target_link_libraries() 命令来关联constructor-class-lib 库  🔥

    2024年02月15日
    浏览(30)
  • Android Java代码与JNI交互 JNI访问Java类方法 (七)

    🔥 Android Studio 版本 🔥    🔥 创建包含JNI的类 JNIAccessMethod.java 🔥  🔥 Java方法对应Native层方法名称 🔥 🔥 配置动态库名称 🔥  🔥 生成可关联的库链接 🔥  为了让Java能够调用 access-method-lib 库中的函数,您需要使用 CMake 构建脚本中的 target_link_libraries() 命令来关联 

    2024年02月16日
    浏览(26)
  • Android Java代码与JNI交互 JNI子线程访问Java方法 (八)

    🔥 Android Studio 版本 🔥   🔥 创建包含JNI相关函数类 JNIInvokeMethod.java 🔥  🔥 配置动态库名称 🔥  🔥 生成可关联的库链接 🔥  为了让Java能够调用 invoke-method-lib 库中的函数,您需要使用 CMake 构建脚本中的 target_link_libraries() 命令来关联 invoke-method-lib 库  🔥 提供给N

    2024年02月16日
    浏览(36)
  • 【193】Java8调用POI 5.2.5生成带图片的Excel文件

    本文假定 Excel 文件中保存的是员工数据,并且数据中带有员工的头像。代码支持的图片格式有png、bmp、jpg、gif。但是这里需要注意,有些网站上下载的图片虽然后缀名是 jpg,但是文件二进制内容的格式是 WebP 的。Java8 目前官方api不支持 WebP ,本文不涉及webp相关话题,本文代

    2024年02月04日
    浏览(23)
  • 关于 Delphi 11.3跨平台开发Android调用 JNI JAR java 的说明和注意事项

    关于 调用 JNI JAR 的说明和注意事项,调用第三方 JAR SDK 和 翻译 安卓 JAVA 代码 的说明 V2017.10.18 (* ************************************************ *) (* *) (* *) (* 设计:爱吃猪头肉 Flying Wang 2015-04-15  *) (* 上面的版权声明请不要移除。 *) (* *) (* ************************************************ *) 本人所

    2024年02月07日
    浏览(40)
  • Android Studio 进行NDK开发,实现JNI,以及编写C++与Java交互(Java调用本地函数)并编译出本地so动态库

    1.首先认识一下NDK。 (1)什么是NDK? NDK全称是Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C/C++的动态库,并能自动将so和java应用一起打包成apk。NDK集成了交叉编译器(交叉编译器需要UNIX或LINUX系统环境),并提供了相应的mk文件隔离CPU、平台、ABI等差异,

    2024年02月11日
    浏览(29)
  • opencv的使用(Ubuntu linux环境,AS jni,AS java)

    最近要完成一个功能,就是把四个视频合成左右上下分布的一个视频。尝试很多方法,最终使用opencv来实现该功能。(通过opencv实现的视频好像没有声音。)研究的步骤,首先在Ubuntu环境测试,该功能是否实现。然后再将生成的库文件放到AS中,使用jni的方法调用,或者将源

    2024年02月03日
    浏览(30)
  • JNI小记1 -- VS生成so给AS调用

    NDK 下载 | Android NDK | Android Developers (google.cn) 需要提的是,直到本文撰写的时间,我在这个页面下的NDK是只有x86-64平台的。而我测试时确实只有x64编译成功。 在visual studio里新建一个安卓共享库工程: 刚开始的界面应该是这样的: 而后在: 工具-选项-跨平台 选上我们的ndk目录(

    2023年04月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包