iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >JNI开发示例
  • 815
分享到

JNI开发示例

2023-06-14 22:06:40 815人浏览 八月长安
摘要

小编给大家分享一下JNI开发示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!案例1:Native项目如果开发者们只是想做简单的Native开发,并非为第三方提供

小编给大家分享一下JNI开发示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

案例1:Native项目

如果开发者们只是想做简单的Native开发,并非为第三方提供SO库,这就非常简单了,详细如下:

创建Native c++工程

目前,通过DevEco-Studio创建创建Native C++模板类型的工程时,只有Car支持这种模板(Phone默认不包含Native C++模板)。
不必担心,我们就先创建Car类型的工程,然后选择Native C++模板,如下图:

JNI开发示例

然后,输入工程名称等信息,如下图:

JNI开发示例

接下来,选择C++标准库,默认就可以了,如下图:

JNI开发示例

点击【Finish】,工程就创建好了。

修改DeviceType配置

当前工程默认是Car类型的,想要支持手机,我们只需要修改DeviceType即可。

首先,找到config.JSON文件,如下图:

JNI开发示例

将“car”改为“phone”,即可支持运行在手机设置上了(是不是超级简单呢),如下图:

JNI开发示例

测试

我这边使用的是鸿蒙手机进行测试的(鸿蒙手机是:由安卓P40升级的Harmony OS)。
另外,在真机上调试、运行工程,需要申请证书(我这边已申请,没有的同学,可以去华为官网申请)。

测试前,我们先看下默认的模板工程结构:

JNI开发示例

JNI开发示例

整体的调用流程也很简单:

开发者运行工程 --> build工程 --> 执行build.gradle
--> 执行里面的externalNativeBuild --> 生成so库文件 --> app启动
--> 页面加载 --> 调用MainAbilitySlice类 --> 查找并加载so库
--> 在onStart生命周期方法中调用native方法 --> 执行so中的native实现方法
--> 返回结果 --> 绑定给text控件(最终将结果显示在页面上)

手机上的运行结果(直接横屏显示......这是因为我们的工程本身是Car类型的模板工程,UI样式默认设置的是横屏的。如果不喜欢,开发者们也可以自行修改UI样式):

JNI开发示例

so库创建的默认位置:

JNI开发示例

案例2:Native项目

如果开发者们不仅要做native开发,还希望将so文件提供给第三方使用,这样我们就需要以module的形式来开发了,同样也不怎么复杂。

问题分析

现在有一个问题:创建module时,连native c++模板都没有了,如下图:

JNI开发示例

这不是要让广大开发者们生气、抓狂、准备画圈圈了么。

解决方案:

其实,我们还有其他的方式(原因:JNI开发也就涉及到native方法定义、native源码、Cmake配置文件、Gradle配置等内容):我们可以新建一个Car类型的Native C++工程和一个Harmony os Library Module,然后将模板工程entry中的JNI代码迁移到Harmony os Library Module中。

创建Car类型的Native C++模板工程

JNI开发示例

比较简单,大家可以参考案例1的工程创建流程(此处就不再重复截图了)

创建Harmony os Library Module

JNI开发示例

大家直接下一步就好(此处就不再截图了)。

修改entry deviceType类型(改成phone)

JNI开发示例

拷贝文件

将entry下的.cxx目录和cpp目录拖拽到 libnative module中的相同位置:

JNI开发示例

将entry下的build.gradle中 native 编译脚本拷贝至 libnative module中相同位置:

JNI开发示例

新建类定义native方法

为了加深大家理解,此处不再使用默认的hello.cpp了,咱们实现一个简单的JNI开发:
新建TestNative类,定义native方法,如下图:

JNI开发示例

通过DevEco-Studio的命令工具Terminal,进入java目录,创建头文件:

执行命令:进入module目录: cd libnative/src/main/java/根据native方法生成头文件:javah -jni xxxx(包名).类名

JNI开发示例

将头文件拷贝到cpp目录下,然后,右键cpp目录,创建头文件对应的实现类:

JNI开发示例

JNI开发示例

修改CmakeList.txt

# the minimum version of CMake.cmake_minimum_required(VERSION 3.4.1)project(TestNative)add_library(native SHARED testnative.cpp)target_link_libraries(native)

生成so库

此时,我们libnative module库的功能已经实现了,可以生成so库给其他工程使用了。

我们需要先让libnative被entry依赖,这样运行app时,才会自动加载libnative,从而执行其build.gradle中的native build配置,生成so库。

entry依赖libnative,我们可以在entry的build.gradle中进行配置:

JNI开发示例

运行app后,查看libnative module下,生成了so库:

JNI开发示例

生成的so库,怎么提供给其他工程使用呢?

也很简单,JNI主要包含了两部分内容:定义的native方法的Java类(Java代码中调用so库的入口)、native方法的实现类,我们只需要将这两部分提供给他们就可以了:

定义的native方法的Java类:提供libnative的har包即可(给第三方时,一般不提供源码)
2、native方法的实现类:提供so库文件即可

测试:
我们简单点,直接把so库、har提供给我们工程的entry进行测试即可,不再新建工程了(因为,我比较懒,哈哈):
首先,我们先取消entry build.gradle中依赖libnative的配置(防止重复依赖,因为:har已包含了libnative的Java代码):

JNI开发示例

我们将libnative中的so库、har拷贝到entry的libs目录下:

JNI开发示例

JNI开发示例

在页面中编写调用har中native方法的代码:

JNI开发示例

运行app(运行前最好clean下工程、同步下gradle,确保依赖的是改har,而非工程中的libnative module):

JNI开发示例

以上是“JNI开发示例”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: JNI开发示例

本文链接: https://www.lsjlt.com/news/275251.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JNI开发示例
    小编给大家分享一下JNI开发示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!案例1:Native项目如果开发者们只是想做简单的Native开发,并非为第三方提供...
    99+
    2023-06-14
  • windows下vscode+vs2019开发JNI的示例
    JNI全称是Java Native Interface(Java本地接口)单词首字母的缩写,本地接口就是指用C和C++开发的接口。由于JNI是JVM规范中的一部份,因此可以将我们写的...
    99+
    2024-04-02
  • Android Studio开发之JNI的示例分析
    这篇文章主要介绍了Android Studio开发之JNI的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言Android上层应用使用java开发,不过java并不...
    99+
    2023-05-30
    android studio jni
  • android studio JNI开发
    一、JNI的作用: 使Java与本地其他类型语言(C、C++)交互; 在Java代码调用C、C++等语言的代码 或者 C、C++调用Java代码。 由于JAVA具有跨平台的特点,所以JAVA与本地代码的交互能力弱,采用JNI特性可以增强JA...
    99+
    2023-09-03
    android studio android
  • windows下vscode+vs2019开发JNI的案例分析
    这篇文章给大家分享的是有关windows下vscode+vs2019开发JNI的案例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。JNI全称是Java Native Interface(Java本地接口)单词...
    99+
    2023-06-15
  • 鸿蒙手机版JNI实战案例解析(JNI开发、SO库生成、SO库使用)
    目录鸿蒙JNI开发现状案例演示案例1:Native项目案例2:Native项目总结鸿蒙JNI开发现状 现阶段,不仅鸿蒙JNI相关的开发资料较少,而且Phone相关的JNI开发资料几乎...
    99+
    2024-04-02
  • JAVA开发中JNI标准原理是什么
    这篇文章主要介绍“JAVA开发中JNI标准原理是什么”,在日常操作中,相信很多人在JAVA开发中JNI标准原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JAVA开发中JNI标准原理是什么”的疑惑有所...
    99+
    2023-06-17
  • Angular开发的示例分析
    这篇文章给大家分享的是有关Angular开发的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是AngularAngularJS是动态Web应用程序的结构框架。 它允许...
    99+
    2024-04-02
  • Android studio中JNI编程实例并生成so库的示例分析
    这篇文章主要为大家展示了“Android studio中JNI编程实例并生成so库的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android studio中JNI编程实例并生成so库...
    99+
    2023-05-30
    android studio
  • Android/iOS内嵌Unity开发示例
    目录 前言 背景 正文 环境 新建工程 Unity导出 Android接入 如何使用 作为Activity 总结 1.Android调用Unity 2.Unity调用Android 3.C/C++“中转站” 参考资料 前言 背景 Un...
    99+
    2023-09-06
    android unity 游戏引擎
  • Android开发中GridView用法示例
    本文实例讲述了Android开发中GridView用法。分享给大家供大家参考,具体如下:Android的GridView控件用于把一系列的空间组织成一个二维的网格显示出来,应用的比较多的就是组合图片显示。下面我就详细讲一个例子。首先写一个类...
    99+
    2023-05-30
    android gridview idv
  • JEESZ模块开发的示例分析
    这篇文章将为大家详细讲解有关JEESZ模块开发的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 创建表1、 创建电子商务系统配置 jeesz_eb_global_co...
    99+
    2023-06-05
  • PHPWeb开发入门的示例分析
    小编给大家分享一下PHPWeb开发入门的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!PHPWeb开发入门体验学习笔记4...
    99+
    2024-04-02
  • Webstorm下Angular2.0开发的示例分析
    这篇文章主要介绍Webstorm下Angular2.0开发的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!首先打开你的webstorm。这里插一句话,尽量保证你的websto...
    99+
    2024-04-02
  • Flex组件开发的示例分析
    这篇文章主要介绍Flex组件开发的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Flex组件开发总结在平时的Flex开发过程中遇到的问题以及解决办法总结如下:1.如何监听键盘事件?<mx:TextAre...
    99+
    2023-06-17
  • python http通信接口开发示例
    目录前言一、flask框架1.1,简介1.2,参数说明 get 和 post的区别二、使用步骤1.引入库2.完整代码实现3.测试总结前言 需求背景来源于AI算法通信接口编写&hell...
    99+
    2023-05-18
    python http通信接口 python 通信接口
  • Vue中render开发的示例分析
    这篇文章给大家分享的是有关Vue中render开发的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。场景官网描述的场景当我们开始写一个通过 level prop 动态生成 ...
    99+
    2024-04-02
  • CSS框架开发的示例分析
    这期内容当中小编将会给大家带来有关CSS框架开发的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 Philip Walton 在AppFolio担任前端工程师,他...
    99+
    2024-04-02
  • Flutter开发Widgets 之 PageView使用示例
    目录构造方法以及参数:基本用法无限滚动实现指示器切换动画总结:构造方法以及参数: PageView可用于Widget的整屏滑动切换,如当代常用的短视频APP中的上下滑动切换的功能,也...
    99+
    2024-04-02
  • php开发框架的示例分析
    这篇文章给大家分享的是有关php开发框架的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、LaravelLaravel是一款免费并且开源的PHP应用框架,它是为开发基于MVC的WEB应用而设计的,个人觉...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作