2025年keil破解软件(keil破解软件什么原理)

keil激活成功教程软件(keil激活成功教程软件什么原理)p style margin left 0px span style color rgb 0 0 0 加密 u 芯片 u 是一种专门设计用于保护 u 信息 u 安全的 u 硬件 u 设备 它通过内置的加密 u 算法 lt u span p

大家好,我是讯享网,很高兴认识大家。




讯享网

 <p style="margin-left:0px;"><span style="color:rgb(0,0,0);">加密<u>芯片</u>是一种专门设计用于保护<u>信息</u>安全的<u>硬件</u>设备,它通过内置的加密<u>算法</u>对数据进行加密和解密,以防止敏感数据被窃取或篡改。如下图HD-RK3568-<u>IOT</u>工控板,搭载ATSHA204A加密芯片,常用于有安全防护要求的工商业场景,下文将为大家介绍安卓APP开发中,如何使用此类加密芯片。</span></p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgZoWcjUS6AZamXAATold44SUI659.png" alt="3568开发板" /><p style="margin-left:0px;"><span style="color:rgb(0,0,0);"><strong>1.<u>Android</u>Studio工具配置</strong></span></p><p style="margin-left:0px;text-align:justify;">JNI(<u>Java</u>Na<u>ti</u>veInterface,Java本地<u>接口</u>)是Java生态的特性,它扩展了Java虚拟机的能力,使得Java代码可以与C/<u>C++</u>代码进行交互。通过JNI接口,Java代码可以调用C/C++代码,C/C++代码也可以调用Java代码。虽然Java是平台无关性语言,但运行Java语言的虚拟机是运行在具体平台上的,所以Java虚拟机是平台相关的。因此,对于调用平台A<u>PI</u>的功能时,虽然在Java语言层是平台无关的,但背后只能通过JNI技术在Native层分别调用不同平台API。类似的,对于有操作硬件需求的程序,也只能通过C/C++实现对硬件的操作,再通过JNI调用。为了支持JNI的开发,在AndroidStudio工具中需要NDK(NativeDevelopmentKit)的支持。</p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgaoWcjUS6AIDt2AAHkwDJglAU245.png" alt="1.png" /><p style="margin-left:0px;text-align:center;">图1.1:添加NDK和CMake支持<br /></p><p style="margin-left:0px;text-align:justify;">点击AndroisStudio的File->settings菜单,打上上面的settings页面,首先找到Android<u>SD</u>K的设定位置,AndroidStudio版本不一样时,其AndroidSDK所处的子项可能略有差异,然后点击SDKTools页签,勾选上NDK和CMake的支持,然后安装它们。</p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgaoWcjUS6AGpuZAAC1CV3hbl4767.png" alt="2.png" /><p style="margin-left:0px;text-align:center;">图2.1:新建NativeC++项目</p><p style="margin-left:0px;text-align:justify;">接着填写工程的名字,包名,工程保存的位置以及语言,然后点击“Next”按钮,如下图所示:</p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgZoWcjUS6AWBrvAACvvrb7oI4608.png" alt="3.png" /><p style="margin-left:0px;text-align:center;">图2.2:native项目设置</p><p style="margin-left:0px;text-align:justify;">接着进行C++标准设定,这里可以根据熟悉的语言标准进行选择,最后点击“Finish”完成设定。</p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgZoWcjUS6AELbXAABqwkPnnL4930.png" alt="4.png" /><p style="margin-left:0px;text-align:center;">图2.3:C++Standard选择</p><p style="margin-left:0px;">完成后,新建的项目窗口如下:</p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgaoWcjUS6AVHGFAAE6i0IZZ0w004.png" alt="5.png" /><p style="margin-left:0px;text-align:center;">图2.4:新建项目全貌</p><p>导航栏作用可以通过左侧项目工具视图体现,菜单栏也可以先隐藏而在需要时显示,为使窗口空间的有效利用,通过View->Appearance将菜单栏隐藏,并将导航信息设定为在下方的Stat<u>usB</u>ar中显示。</p><p>在窗口的左侧边沿是一条“ToolWindowBar”,用于选择左侧窗口“ToolWindow”的内容,在窗口的左上角有一个</p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgZoWcjUS-ADJglAAAB9dcYCDs443.png" alt="6.png" /><p>图标,表示“ToolWindow”显示为项目,点击该图标会有不同的视图选择,这里默认是“Android”视图,现在点击“Android”<u>标签</u>,在下拉视图选项中选择“Projec<u>tF</u>ile”视图:</p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgaoWcjUS-AYAsPAAAsvSMom7Q239.png" alt="7.png" /><p style="margin-left:0px;text-align:center;">图3.1:项目视图选择</p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgZoWcjUS-ADk07AACR6vu2swo184.png" alt="8.png" /><p style="margin-left:0px;text-align:center;">图3.2:ProjectFiles显示</p><p>cryptosdr/app/src/main/AndroidManifest.xml是一个清单文件,在每个android应用项目必有的,它负责向Android构建工具,此文件是自动生成的。cryptosdr/app/src/main/java/com/vanxoak/cryptosdr/Main<u>Ac</u>tivity.java是描述程序逻辑的java文件。cryptosdr/app/src/main/cpp下面有两个文件,是我们要进行nativec++开发的地方:CMakeLists.txt:编译脚本,用于告知如何编译项目中的本地库。native-lib.cpp:创建的本地库示例代码模板,后期代码编写主要在这个文件里面进行。现在分别详细介绍一下这两个文件,CMakeLists.txt解释如下:</p><p>cmake_minimum_required(VERSION3.22.1)#设置Cmake的最低版本</p><p style="margin-left:0px;text-align:justify;"></p><p style="margin-left:0px;text-align:justify;">navtive-lib.cpp文件,这个文件是本地库的C++源码。我们需要在这里定义本地库对java(Android)层提供的接口。在java中调用我们定义和提供的接口,就能实现java操纵c++的能力,这里是自动生成的一个示例:</p><p>#include</p><p style="margin-left:0px;text-align:justify;">我们需要对navtive-lib.cpp实现的内容进行修改,上面给了一个范例,我们也可以通过其它的方式让这个文件更接近我们需要的。</p><p style="margin-left:0px;text-align:justify;">现在新建一个Java所需要的接口类,在工具窗口的app/src/main/java/com/vanxoak/cryptosdr文件夹上右键弹出菜单上新建一个“JavaClass”:</p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgaoWcjUS-AASG_AAFXUceNnlI830.png" alt="11.png" /><p style="margin-left:0px;text-align:center;">图3.3:新建JavaClass</p><p style="margin-left:0px;text-align:justify;">在新建串口中输入类名称“Rjgt102”,并使用默认Class选项:</p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgaoWcjUS-AGC7-AAAQryKBKVg338.png" alt="12.png" /><p style="margin-left:0px;text-align:center;">图3.4:NewRjgt102Class</p><p style="margin-left:0px;text-align:justify;">新建完成后会生成一个Rjgt102.class的文件,在EditWindow中编辑类的接口信息,最终得到的文件如下:</p><p>packagecom.vanxoak.cryptosdr;</p><p style="margin-left:0px;text-align:justify;"><strong>3.3通过类文件生成JNI</strong><span style="color:rgb(0,0,0);"><strong>接口</strong></span></p><p style="margin-left:0px;text-align:justify;">点击左侧ToolWindowBar的</p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgZoWcjUS-ALUmiAAAj-iyd4n4373.png" alt="" /><p style="margin-left:0px;text-align:justify;">图标,或直接使用“Alt+F12”来打开终端窗口:</p><p style="margin-left:0px;text-align:justify;"><br /></p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgZoWcjUS-AVz9uAABBlndXet8463.png" alt="15.png" /><p style="margin-left:0px;text-align:center;">图3.5:<u>Te</u>rminal窗口</p><p style="margin-left:0px;text-align:justify;">运行下面的命令:</p><p>E:RK3568_APPcryptoSdr>cdappsrcmain</p><p style="margin-left:0px;text-align:justify;">命令执后,在cpp目录下会生成一个com_vanxoak_cryptosdr_Rjgt102.h的头文件,通过右键点击Toolwindow中的cpp文件夹并”Relo<u>ad</u>fromDisk”可以在Toolwindow中看到这一文件,打开文件可以看到下面的文件内容:</p><p>/*DONOTEDITTHISFILE-itismachinegenerated*/</p><p style="margin-left:0px;text-align:justify;">其中的内容主要是我们将要实现的功能,我们在native-lib.cpp中实现上面的函数,并删除native-lib.cpp原先自动生成的Java_com_vanxoak_cryptosdr_MainActivity_stringFromJNI函数,并重新构建整个工程,有于Rjgt102属于加密芯片,源码中含有密钥信息,这里不暂时native-lib.cpp的源码内容,并且接下来我们将利用得到的动态库重新改造该项目使之仅使用生成的动态库而不再包含源码。<br /></p><p style="margin-left:0px;text-align:justify;">在构建完成后可以发现生成了多个libcryprosdr.so文件,以满足多个架构的需求:</p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgaoWcjUS-AUJxzAABpxLeUAgo222.png" alt="20.png" /><p style="margin-left:0px;text-align:center;"></p><p style="margin-left:0px;text-align:center;">图3.6:多架构下libcryprosdr.so文件</p><p style="margin-left:0px;text-align:center;"><br /></p><p style="margin-left:0px;"><span style="color:rgb(0,0,0);"><strong>3.4MainActivity及布局文件的编写</strong></span></p><p style="margin-left:0px;text-align:justify;">我们要实现的界面效果,如下图所示。activity_main.xml里面定义了一个主体的<u>Linear</u>Layout,其中分布有2个TableLayout,然后在TableRow中分布TextView,Button,EditText以及Spinner控件,具体的编写方法请参考本文档配套<u>资料</u>提供的应用程序源码。</p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgaoWcjUS-AXr_AAABi6XBXcrY693.png" alt="21.png" /><p style="margin-left:0px;text-align:center;"></p><p style="margin-left:0px;text-align:center;">图3.7:cryptoSdr显示界面</p><p style="margin-left:0px;text-align:justify;"></p><p style="margin-left:0px;text-align:justify;">MainActivity.java中要写实现控件功能的逻辑代码。在此文件中,将会对之前定义的Rjgt102接口进行调用。</p><p style="margin-left:0px;text-align:justify;">我们希望打开应用时就能显示该Rjgt102芯片的Usid,这就需要我们在MainActivity的onCreate函数中就利用JNI来访问Rjgt102芯片来获取Usid信息,下面是获取流程:</p><p>publ<u>ic</u>classMainActivityextendsAppCompatActivity{</p><p style="margin-left:0px;text-align:justify;"><span style="color:rgb(0,0,0);">3.4.2 选择所操作的page对象</span><br /></p><p style="margin-left:0px;text-align:justify;">读取page或者更新page内容都需要明确的page_id作为对象,page_id的选择是通过Spinner控件进行的,下面是page_id选择的代码示例:</p><p>publicclassMainActivityextendsAppCompatActivity{</p><p style="margin-left:0px;text-align:justify;">实际上是对Spinner对象的ItemSelected事件进行监听来获取的pageId。</p><p style="margin-left:0px;text-align:justify;">读取page内容需要通过READPAGE按钮触发:</p><p>publicclassMainActivityextendsAppCompatActivity{</p><p style="margin-left:0px;text-align:justify;"><span style="color:rgb(0,0,0);">3.4.4 更新page内容</span><br /></p><p style="margin-left:0px;text-align:justify;">更新page内容需要通过READPAGE按钮触发:</p><p>publicclassMainActivityextendsAppCompatActivity{</p><p style="margin-left:0px;text-align:justify;"><span style="color:rgb(0,0,0);"><strong>4.转为JniLibs项目</strong></span><br /></p><p>在上一章Native项目开发完成后,整个应用功能已可使用,但由于nativec++代码中含有敏感信息,需要保护而不公开native部分代码,则需要将该部分代码转为应用包含JniLibs的方式。</p><p><span style="color:rgb(0,0,0);"><strong>4.1新建jniLibs目录</strong></span></p><p style="margin-left:0px;text-align:justify;">需要在appsrcmain上右键单击菜单中选择New->Directory:</p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgZoWcjUS-ACTTTAADFu7DjWrY293.png" alt="26.png" /><p style="margin-left:0px;text-align:center;">图4.1:newDirecrory</p><p style="margin-left:0px;">将新建的目录命名为jniLibs。</p><p style="margin-left:0px;"><span style="color:rgb(0,0,0);"><strong>4.2拷贝libcryprosdr.so到jniLibs</strong></span></p><p style="margin-left:0px;text-align:justify;">现在将libcryprosdr.so文件拷贝进来:</p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgZoWcjUS-ADF9jAACCgHT-vGw741.png" alt="27.png" /><p style="margin-left:0px;text-align:center;">图4.2:拷贝libcryprosdr.so文件到jniLibs</p><p style="margin-left:0px;"><span style="color:rgb(0,0,0);"><strong>4.3删除cpp目录</strong></span></p><p style="margin-left:0px;text-align:justify;">现在需要删除敏感nativec++源码了,直接在srcappsrcmaincpp上右键单击菜单中选择Delete:</p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgaoWcjUS-AP7adAACBVrvOqjE714.png" alt="28.png" /><p style="margin-left:0px;text-align:center;"></p><p style="margin-left:0px;text-align:center;">图4.3:删除cpp目录</p><p style="margin-left:0px;text-align:justify;">同样方式可对中间过程文件存储文件夹srcapp.cxx进行删除。</p><p style="margin-left:0px;text-align:justify;"><span style="color:rgb(0,0,0);"><strong>4.4删除对cpp目录的编译引用</strong></span></p><p style="margin-left:0px;text-align:justify;">在删除了cpp目录后,还需要删除项目中对cpp的编译部分,这里需要修改appbuild.gradle文件,使之不再进行externalNativeBuild:</p><img src="https://file1.elecfans.com/web1/M00/F4/10/wKgaoWcjUS-AeenEAAFdhpo__uM665.png" alt="29.png" /><p style="margin-left:0px;text-align:center;"><br /></p><p style="margin-left:0px;text-align:center;">图4.4:删除对cpp的编译</p><p style="margin-left:0px;text-align:justify;">将上面内容删除后重新编译工程即可。</p> 

讯享网
小讯
上一篇 2025-04-28 22:31
下一篇 2025-05-17 11:47

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/141927.html