鸿蒙JNI开发现状

现阶段,不仅鸿蒙JNI相关的开发资料较少,而且Phone相关的JNI开发资料几乎没有,这对于新入行的鸿蒙开发者们来说,非常不友好。

也可能会给Android工程(使用了SO库的工程)在迁移至鸿蒙系统时造成了阻碍。

案例演示

废话不多说了,接下来,我们来演示鸿蒙手机版工程是如何做JNI开发的。

案例1:Native项目

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

1、创建Native C++工程

目前,通过DevEco-Studio创建创建Native C++模板类型的工程时,只有Car支持这种模板(Phone默认不包含Native C++模板)。

不必担心,我们就先创建Car类型的工程,然后选择Native C++模板,如下图:

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

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

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

2、修改DeviceType配置

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

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

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

3、测试

我这边使用的是鸿蒙手机进行测试的(鸿蒙手机是:由安卓P40升级的Harmony OS)。

另外,在真机上调试、运行工程,需要申请证书(我这边已申请,没有的同学,可以去华为官网申请)。

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

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

开发者运行工程 --> build工程 --> 执行build.gradle

--> 执行里面的externalNativeBuild --> 生成so库文件 --> app启动

--> 页面加载 --> 调用MainAbilitySlice类 --> 查找并加载so库

--> 在onStart生命周期方法中调用native方法 --> 执行so中的native实现方法

--> 返回结果 --> 绑定给text控件(最终将结果显示在页面上)

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

so库创建的默认位置:

案例2:Native项目

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

1、问题分析

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

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

解决方案:

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

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

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

3、创建Harmony os Library Module

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

4、修改entry deviceType类型(改成phone)

5、拷贝文件

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

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

6、新建类定义native方法

为了加深大家理解,此处不再使用默认的hello.cpp了,咱们实现一个简单的JNI开发:

新建TestNative类,定义native方法,如下图:

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

执行命令:

进入module目录: cd libnative/src/main/java/

根据native方法生成头文件:javah -jni xxxx(包名).类名

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

7、修改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)

8、生成so库

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

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

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

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

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

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

1、定义的native方法的Java类:提供libnative的har包即可(给第三方时,一般不提供源码)

2、native方法的实现类:提供so库文件即可

测试:

我们简单点,直接把so库、har提供给我们工程的entry进行测试即可,不再新建工程了(因为,我比较懒,哈哈):

首先,我们先取消entry build.gradle中依赖libnative的配置(防止重复依赖,因为:har已包含了libnative的Java代码):

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

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

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

总结

如果有问题,欢迎留言交流。

祝大家生活愉快、工作愉快,每天顺心、开心!!!

鸿蒙so系统,鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)相关推荐

  1. 华为手机没有耳塞插口_鸿蒙OS 2.0手机版开启公测!名单中只有华为手机没有荣耀...

    作为一家全球前五的手机大厂,华为手机近年来遇到了不小的危机,这其中最大的就要数芯片和系统的问题了,虽然困难很多,但华为正在一步步努力解决,系统方面已经打造了鸿蒙OS分布式系统.现在,经过漫长时间的等待 ...

  2. 华为鸿蒙净水机,华为鸿蒙OS 2.0手机版功能抢先曝光

    原标题:华为鸿蒙OS 2.0手机版功能抢先曝光 三个月前,鸿蒙OS 2.0正式在华为开发者大会2020亮相.12月16日,鸿蒙OS 2.0手机开发者Beta版发布活动将在京举办. 届时,鸿蒙OS 2. ...

  3. 鸿蒙os2.0打车,明天见!华为鸿蒙OS 2.0手机版特色功能曝光:冬天打车不冻手

    明天见!华为鸿蒙OS 2.0手机版特色功能曝光:冬天打车不冻手 作者:cnbeta 时间:2020-12-15 13:02:39 经过多次预热后,今日,华为消费者业务软件部总裁王成录确认,将于12月1 ...

  4. 怎样升级android10版本,手机怎么升级win10系统 win10手机版升级教程

    win10正式版即将发布,手机版win10系统也陆续放出支持机型,手机怎么升级win10系统?下面我们就一起来看看win10手机版升级教程. 手机怎么升级win10系统 win10手机版升级教程 首先 ...

  5. 织梦列表页生成的html在哪里,织梦系统给手机版生成静态页HTML的方法

    原标题:织梦系统给手机版生成静态页HTML的方法 织梦dedecms默认的手机端不能生成静态,对于使用静态的网站来说多少有些不方便,其实dedecms可以通过一种另类的方法来给手机端生成静态页面的. ...

  6. thinkphp多城市房产系统源码程序_亲测Thinkphp开源房产程序源码/多城市版房产系统 带手机版+独家教程...

    「亲测」Thinkphp开源房产程序源码/多城市版房产系统 带手机版+独家教程+去授权+独家修复 本套tp房产源码包含:管理总后台.代理后台.用户中心.前台.PC端.手机版等,pc和手机端的数据同步, ...

  7. 华为鸿蒙手机beta版,鸿蒙2.0 Beta手机版来了!明年将全面支持华为手机

    读创/深圳商报记者陈 姝 备受关注的华为鸿蒙操作系统(HarmonyOS,以下简称鸿蒙)有了新进展.华为消费者业务软件部总裁王成录日前透露,将于12月16日在北京发布鸿蒙2.0手机开发者Beta版本. ...

  8. 华为matex鸿蒙,搭载鸿蒙OS系统的手机终于来了!华为MateX2正式发布

    就在2月22日晚上,华为悄悄地举办了一场新品发布会,为我们带来了全新的华为MateX2,其实在前不久这款手机就在网上炒得沸沸扬扬,华为MateX系列绝对展现出了华为最高的工艺水准,所以华为MateX2 ...

  9. 华为鸿蒙抢先版,华为鸿蒙OS 2.0手机版功能抢先曝光:体验前所未有

    三个月前,鸿蒙OS 2.0正式在华为开发者大会2020亮相.12月16日,鸿蒙OS 2.0手机开发者Beta版发布活动在京举办.届时,鸿蒙OS 2.0将面向应用开发者发布手机Beta版本. 按照华为官 ...

最新文章

  1. 零基础学习java,这些书一定要看!
  2. [VB] Option Explicit
  3. 如何使用struts2对集合参数进行验证
  4. 面试题06. 从尾到头打印链表
  5. 异步上传文件显示进度条
  6. 外链引入css有哪些方式_外链怎么发才会快速收录?
  7. CSS样式表操作及选择器定义
  8. 从Java看数据结构之——树和他的操作集
  9. 手机支付需厘清六大关键问题
  10. 生产管理MES系统框架
  11. 定时器触发STM32 ADC的采样转换示例
  12. 显微镜下的大明内容_《显微镜下的大明》读后感1000字
  13. 计算机辅助设计实训报告范文,计算机辅助设计实习实习报告
  14. Cardinality Estimation
  15. 提取PDF文件里面的图片
  16. 【Python】手把手教你用Python爬取某网小说数据,并进行可视化分析
  17. pyhon入门turtle库画音符
  18. 拉面哥的火爆看新媒体时代的底层逻辑!
  19. thinkpad装linux无线网卡驱动,ThinkPad E530 Fedora 20 下无线网卡驱动的安装
  20. Cadence Orcad Capture常用的快捷键图文

热门文章

  1. 【Anaconda】安装源---豆瓣,清华
  2. vue npm run serve/dev命令后台运行:nohup npm run serve >web.log 2>1 exit
  3. HDFS报错解决:Operation category JOURNAL is not supported in state standby
  4. Scala模式匹配(类似Java的switch)
  5. Scala变量的声明和赋值
  6. Hadoop MapReduce手机上网流量统计代码示例及运行结果演示
  7. JVM 调优实战--常见的垃圾回收算法及垃圾收集器组合
  8. Java客户端操作elasticsearch--查询索引库(高亮显示)
  9. id3与软件测试,ID3算法的实现
  10. java备还原mysql_用java来备份还原mysql数据库