鸿蒙中定制SO库以及使用

项目中接口的加解密密钥,不能用明文存储,所以想到跟安卓开发一样放到 .so 中存储,因此学习啦一下鸿蒙中如何实现的,废话不多说,上链接~

鸿蒙中定制SO库以及使用

今天学了下如何在鸿蒙中使用 .so 文件,.so 文件的生成,以及使用方法。特此总结下,希望填坑

生成 .so

第一步:创建一个 Native 工程

创建工程

1.DevEco Studio -> File -> New -> Create Project -> Native C++

2.填写必要的信息,然后 点击 Finish, 等待创建完成

3.查看项目目录结构

项目目录结构

上图是项目目录结构,可以发现,跟新建一个 鸿蒙 项目几乎没有差异,特殊差异点在于,多了一个 cpp 目录,这个目录就是存放相关C++代码的目录

  • Index.d.ts: 是一个声明文件,用来声明导出的 C++ 函数,在 JS 中可以直接使用这些函数。(其实等价于 Index.ets 导出类)
  • oh-package.json5: 这是一个配置文件,用来配置so名称、版本等信息
  • CMakeLists.txtnapi_init.cpp: C++代码以及 CMakeLists.txt 文件,用来编译生成 .so 文件,.cpp 文件内用于编写你的逻辑代码

比如我的案例中,写了一个 getGatewayKey5 方法,用于返回一个固定的 字符串 key_55555555555555

额外配置项目

考虑到不同的系统架构支持兼容性,需要手动设置下 abiFilters

在你的 module 下的 [build-profile.json5] 文件中,添加如下配置:

主要是添加 abiFilters 配置,其他的都是新建项目的时候会默认添加好的

c 复制代码
  "buildOption": {
    "externalNativeOptions": {
      "path": "./src/main/cpp/CMakeLists.txt",
      "abiFilters": ["arm64-v8a", "x86_64"],
      "arguments": "",
      "cppFlags": "",
    }
  }

到这为止,一个完整的 C++ 项目算是配置完毕了,接下来就是构建 .so 文件了,继续往下看

第二步:编写 C++ 代码

如上所说,在 .cpp 文件中编写你所需要的 C++ 逻辑就行了,我不会太会写,就简单写了一个获取字符串的方法,其他的就不详细写了。。哈哈哈,等后边学习下C++再说吧。。。

第三步:编译成 .so

如何最终编译成 .so 呢? 直接 菜单栏 -> Build -> Build Module xxx 即可

执行完毕后,在 build -> intermediates -> libs -> default 目录下,就会生成 .so 文件了(会根据 abiFilters 配置来生成不同的 .so 文件)

如图所示:

到这,我们已经生成了一个 .so 文件了

具体的源代码,在 code 目录下 的 NativeKey.zip 中,详细地址:gitee.com/yanftch/har...

使用 .so 方案一(直接在module中使用)

此处是直接在 module 中使用,也就是在一个 项目中,新建了一个 module,然后引用 .so 文件,然后调用其中的方法

具体步骤如下:

  1. 新建一个 项目 NativeKeyDemo,然后创建了了一个 module lib_keysolib_keyso 是个 har 包
  2. lib_keyso中,新建一个 libs目录,将前边生成的不同架构的 .so 复制进入,如下图1
  3. 新建如下目录:src/main/cpp/types 目录下新建目录并将index.d.ts、oh-package.json5移动到该目录下, 如下图2、图3
  4. 在模块级oh-package.json5中(也就是 lib_keyso 中)声明这个so库根目录路径,如下图4
  5. 在代码中使用import引用oh-package.json5中声明的依赖名称并调用,如下图5
  6. 使用,同样如下图5中,代码如下:console.log(${this.TAG}: lib_keyso 组件内部代码:${getGatewayKey5})
  7. 运行结果,如下图6所示,成功打印出来了我在 .cpp 中定义的 getGatewayKey5 方法返回的固定字符串

(图1)

(图2)

(图3)

(图4)

(图5)

(图6)

上述使用的源码,在此:gitee.com/yanftch/har...


至此,结束~

参考链接:developer.huawei.com/consumer/cn...

使用 .so 方案二

此方案,是考虑将 .so 文件,打包到一个 HAR中,后续其他的 HAR或者HAP 直接依赖 此 HAR即可,后续再调研吧,或者有了解的大佬贴一下链接吧~~


相关推荐
杨超越luckly10 小时前
HTML应用指南:利用GET请求获取中国500强企业名单,揭秘企业增长、分化与转型的新常态
前端·数据库·html·可视化·中国500强
ITUnicorn11 小时前
【HarmonyOS6】ArkTS 自定义组件封装实战:动画水杯组件
华为·harmonyos·arkts·鸿蒙·harmonyos6
hedley(●'◡'●)11 小时前
基于cesium和vue的大疆司空模仿程序
前端·javascript·vue.js·python·typescript·无人机
qq5_81151751511 小时前
web城乡居民基本医疗信息管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
百思可瑞教育11 小时前
构建自己的Vue UI组件库:从设计到发布
前端·javascript·vue.js·ui·百思可瑞教育·北京百思教育
百锦再11 小时前
Vue高阶知识:利用 defineModel 特性开发搜索组件组合
前端·vue.js·学习·flutter·typescript·前端框架
全栈探索者11 小时前
@Component + struct = 你的新函数组件——React 开发者的鸿蒙入门指南(第 2 期)
react·harmonyos·arkts·前端开发·deveco studio·鸿蒙next·函数组件
CappuccinoRose11 小时前
JavaScript 学习文档(二)
前端·javascript·学习·数据类型·运算符·箭头函数·变量声明
廖松洋(Alina)11 小时前
【收尾以及复盘】flutter开发鸿蒙APP之成就徽章页面
flutter·华为·开源·harmonyos·鸿蒙
这儿有一堆花11 小时前
Vue 是什么:一套为「真实业务」而生的前端框架
前端·vue.js·前端框架