0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

安卓APP开发中,如何使用加密芯片?

武汉万象奥科 2024-10-31 17:43 次阅读

加密芯片是一种专门设计用于保护信息安全的硬件设备,它通过内置的加密算法对数据进行加密和解密,以防止敏感数据被窃取或篡改。如下图HD-RK3568-IOT工控板,搭载ATSHA204A加密芯片,常用于有安全防护要求的工商业场景,下文将为大家介绍安卓APP开发中,如何使用此类加密芯片。

3568开发板

1.AndroidStudio工具配置

JNI(JavaNativeInterface,Java本地接口)是Java生态的特性,它扩展了Java虚拟机的能力,使得Java代码可以与C/C++代码进行交互。通过JNI接口,Java代码可以调用C/C++代码,C/C++代码也可以调用Java代码。虽然Java是平台无关性语言,但运行Java语言的虚拟机是运行在具体平台上的,所以Java虚拟机是平台相关的。因此,对于调用平台API的功能时,虽然在Java语言层是平台无关的,但背后只能通过JNI技术在Native层分别调用不同平台API。类似的,对于有操作硬件需求的程序,也只能通过C/C++实现对硬件的操作,再通过JNI调用。为了支持JNI的开发,在AndroidStudio工具中需要NDK(NativeDevelopmentKit)的支持。

1.png

图1.1:添加NDK和CMake支持

点击AndroisStudio的File->settings菜单,打上上面的settings页面,首先找到AndroidSDK的设定位置,AndroidStudio版本不一样时,其AndroidSDK所处的子项可能略有差异,然后点击SDKTools页签,勾选上NDK和CMake的支持,然后安装它们。

2.新建NativeC++工程

点击File->Newproject,然后选中“NativeC++”工程模板,创建一个C++工程。最后点击“Next”按钮,如下图所示:

2.png

图2.1:新建NativeC++项目

接着填写工程的名字,包名,工程保存的位置以及语言,然后点击“Next”按钮,如下图所示:

3.png

图2.2:native项目设置

接着进行C++标准设定,这里可以根据熟悉的语言标准进行选择,最后点击“Finish”完成设定。

4.png

图2.3:C++Standard选择

完成后,新建的项目窗口如下:

5.png

图2.4:新建项目全貌

导航栏作用可以通过左侧项目工具视图体现,菜单栏也可以先隐藏而在需要时显示,为使窗口空间的有效利用,通过View->Appearance将菜单栏隐藏,并将导航信息设定为在下方的StatusBar中显示。

3.Native项目开发

3.1CPP开发

在窗口的左侧边沿是一条“ToolWindowBar”,用于选择左侧窗口“ToolWindow”的内容,在窗口的左上角有一个

6.png

图标,表示“ToolWindow”显示为项目,点击该图标会有不同的视图选择,这里默认是“Android”视图,现在点击“Android”标签,在下拉视图选项中选择“ProjectFile”视图:

7.png

图3.1:项目视图选择

8.png

图3.2:ProjectFiles显示

cryptosdr/app/src/main/AndroidManifest.xml是一个清单文件,在每个android应用项目必有的,它负责向Android构建工具,此文件是自动生成的。cryptosdr/app/src/main/java/com/vanxoak/cryptosdr/MainActivity.java是描述程序逻辑的java文件。cryptosdr/app/src/main/cpp下面有两个文件,是我们要进行nativec++开发的地方:CMakeLists.txt:编译脚本,用于告知如何编译项目中的本地库。native-lib.cpp:创建的本地库示例代码模板,后期代码编写主要在这个文件里面进行。现在分别详细介绍一下这两个文件,CMakeLists.txt解释如下:

cmake_minimum_required(VERSION3.22.1)#设置Cmake的最低版本

navtive-lib.cpp文件,这个文件是本地库的C++源码。我们需要在这里定义本地库对java(Android)层提供的接口。在java中调用我们定义和提供的接口,就能实现java操纵c++的能力,这里是自动生成的一个示例:

#include

我们需要对navtive-lib.cpp实现的内容进行修改,上面给了一个范例,我们也可以通过其它的方式让这个文件更接近我们需要的。

3.2建立接口类文件

现在新建一个Java所需要的接口类,在工具窗口的app/src/main/java/com/vanxoak/cryptosdr文件夹上右键弹出菜单上新建一个“JavaClass”:

11.png

图3.3:新建JavaClass

在新建串口中输入类名称“Rjgt102”,并使用默认Class选项:

12.png

图3.4:NewRjgt102Class

新建完成后会生成一个Rjgt102.class的文件,在EditWindow中编辑类的接口信息,最终得到的文件如下:

packagecom.vanxoak.cryptosdr;

3.3通过类文件生成JNI接口

点击左侧ToolWindowBar的

图标,或直接使用“Alt+F12”来打开终端窗口:


15.png

图3.5:Terminal窗口

运行下面的命令:

E:\RK3568_APP\cryptoSdr>cdapp\src\main

命令执后,在cpp目录下会生成一个com_vanxoak_cryptosdr_Rjgt102.h的头文件,通过右键点击Toolwindow中的cpp文件夹并”ReloadfromDisk”可以在Toolwindow中看到这一文件,打开文件可以看到下面的文件内容:

/*DONOTEDITTHISFILE-itismachinegenerated*/

其中的内容主要是我们将要实现的功能,我们在native-lib.cpp中实现上面的函数,并删除native-lib.cpp原先自动生成的Java_com_vanxoak_cryptosdr_MainActivity_stringFromJNI函数,并重新构建整个工程,有于Rjgt102属于加密芯片,源码中含有密钥信息,这里不暂时native-lib.cpp的源码内容,并且接下来我们将利用得到的动态库重新改造该项目使之仅使用生成的动态库而不再包含源码。

在构建完成后可以发现生成了多个libcryprosdr.so文件,以满足多个架构的需求:

20.png

图3.6:多架构下libcryprosdr.so文件


3.4MainActivity及布局文件的编写

我们要实现的界面效果,如下图所示。activity_main.xml里面定义了一个主体的LinearLayout,其中分布有2个TableLayout,然后在TableRow中分布TextView,Button,EditText以及Spinner控件,具体的编写方法请参考本文档配套资料提供的应用程序源码。

21.png

图3.7:cryptoSdr显示界面

MainActivity.java中要写实现控件功能的逻辑代码。在此文件中,将会对之前定义的Rjgt102接口进行调用。

3.4.1Usid的显示

我们希望打开应用时就能显示该Rjgt102芯片的Usid,这就需要我们在MainActivity的onCreate函数中就利用JNI来访问Rjgt102芯片来获取Usid信息,下面是获取流程:

publicclassMainActivityextendsAppCompatActivity{

3.4.2 选择所操作的page对象

读取page或者更新page内容都需要明确的page_id作为对象,page_id的选择是通过Spinner控件进行的,下面是page_id选择的代码示例:

publicclassMainActivityextendsAppCompatActivity{

实际上是对Spinner对象的ItemSelected事件进行监听来获取的pageId。

3.4.3读取page内容

读取page内容需要通过READPAGE按钮触发:

publicclassMainActivityextendsAppCompatActivity{

3.4.4 更新page内容

更新page内容需要通过READPAGE按钮触发:

publicclassMainActivityextendsAppCompatActivity{

4.转为JniLibs项目

在上一章Native项目开发完成后,整个应用功能已可使用,但由于nativec++代码中含有敏感信息,需要保护而不公开native部分代码,则需要将该部分代码转为应用包含JniLibs的方式。

4.1新建jniLibs目录

需要在app\src\main上右键单击菜单中选择New->Directory:

26.png

图4.1:newDirecrory

将新建的目录命名为jniLibs。

4.2拷贝libcryprosdr.so到jniLibs

现在将libcryprosdr.so文件拷贝进来:

27.png

图4.2:拷贝libcryprosdr.so文件到jniLibs

4.3删除cpp目录

现在需要删除敏感nativec++源码了,直接在src\app\src\main\cpp上右键单击菜单中选择Delete:

28.png

图4.3:删除cpp目录

同样方式可对中间过程文件存储文件夹src\app\.cxx进行删除。

4.4删除对cpp目录的编译引用

在删除了cpp目录后,还需要删除项目中对cpp的编译部分,这里需要修改app\build.gradle文件,使之不再进行externalNativeBuild:

29.png


图4.4:删除对cpp的编译

将上面内容删除后重新编译工程即可。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • APP
    APP
    +关注

    关注

    33

    文章

    1568

    浏览量

    72361
  • 加密芯片
    +关注

    关注

    2

    文章

    110

    浏览量

    23623
  • 安卓
    +关注

    关注

    5

    文章

    2120

    浏览量

    56990
  • RK3568
    +关注

    关注

    4

    文章

    495

    浏览量

    4921
收藏 人收藏

    评论

    相关推荐

    【蓝牙4.1】app安装失败

    ` 本帖最后由 770781327 于 2015-6-30 21:28 编辑 大家有没有用到手机端的app呢,我是手机,官网提供的这app貌似无法安装呀,我都换了四家的
    发表于 06-30 21:27

    【云智易试用体验】APP demo编译与运行

    的模拟器则需要使用手机),插上手机,运行此工程。ADT会自动安装app到手机(模拟器)并运行。But 运行后并没有找到说明文档里所说的配置按钮,所以也就没有跑起来。。。。。。。。。又一个多小时没能上手。
    发表于 09-05 21:59

    【Thunderboard Sense试用体验】机安装APP

    对于手机用户来说,下载Thunderboard APP需要去Google play下载,官网并不提供安装包和下载链接。而大陆又有限制,这困扰了一大批的用户。下面我来讲述一下自己使用
    发表于 06-24 23:51

    聘寻APP开发工程师

    因增加运营效益,现诚聘APP开发工程师只需阁下的技术,我们提供一切材料,目前需求量大成功制作APP并上架各大安
    发表于 03-11 19:24

    【有奖体验】+APP自动生成源码

    【有奖体验】+APP自动生成源码大佬们都在使用开发板上的自动代码生成,有MCU的、有SOC的,都试过了,那么我就试个APP的吧。可惜的是
    发表于 07-09 16:50

    手机APP通过蓝牙不能连接上stm32的单片机的蓝牙模块

    手机APP通过蓝牙连接不上stm32单片机的蓝牙模块,之前是自己写的APP发现连接不上,后来自己下载一个
    发表于 04-27 22:58

    ***版哪个好用

    跨境浏览器APP轻搜跨境浏览器APP高效手机网页浏览工具,软件自动连接网络,不仅可以登录国内的各大平台网站,还可以进入外网,不需要加速器,给你超便利的体验。轻搜浏览器
    发表于 09-24 14:56

    如何用AltBeaconAPI开发Beacon原型APP

    如何用AltBeaconAPI开发Beacon原型APP
    发表于 05-21 06:32

    鸿蒙、iOS、开发者数量,APP数量大对比,差距有多大呢?

    ,只要开发者数量多了,APP就多了,生态就起来了。那么我们对比一下当前华为鸿蒙、苹果iOS、谷歌开发者数量、
    发表于 08-30 14:27

    如何通过模拟器实现APP控制小车?

    如何通过模拟器实现APP控制小车?
    发表于 01-19 06:29

    如何利用App inventor编写app控制ESP8266?

    如何利用App inventor编写app控制ESP8266?
    发表于 02-11 07:04

    【吉方工控G-3288-02开发板试用体验】-RK3288系统的WIFI联网测试以及APK安装器APP安装运行测试体验

    系统预装的“APK安装器”APP,可以将自行开发APP(后缀为APK的程序文件)安装到G-3288-02
    发表于 03-29 13:14

    (远程控制)App inventor 编写app控制 ESP8266

    App inventor 编写app控制 ESP8266第一 下载ESP8266示例(arduino ide 编程开发)第二 修改dem
    发表于 12-08 17:06 28次下载
    (远程控制)<b class='flag-5'>App</b> inventor 编写<b class='flag-5'>安</b><b class='flag-5'>卓</b><b class='flag-5'>app</b>控制 ESP8266

    Arduino/Android蓝牙伺服电机控制APP

    电子发烧友网站提供《Arduino/Android蓝牙伺服电机控制APP.zip》资料免费下载
    发表于 12-05 09:14 4次下载
    Arduino/Android蓝牙伺服电机控制<b class='flag-5'>安</b><b class='flag-5'>卓</b><b class='flag-5'>APP</b>

    云视角APP更新通知

    我司于2021年12月23日更新发布了云视角APP,用户可通过手机应用宝软件自行下载更新。由于我司产品的丰富,功能不断优化,我司于今
    的头像 发表于 03-31 09:47 528次阅读
    云视角<b class='flag-5'>安</b><b class='flag-5'>卓</b><b class='flag-5'>APP</b>更新通知