0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

安卓APP開發(fā)中,如何使用加密芯片?

武漢萬(wàn)象奧科 ? 2024-10-31 17:43 ? 次閱讀

加密芯片是一種專門設(shè)計(jì)用于保護(hù)信息安全的硬件設(shè)備,它通過內(nèi)置的加密算法對(duì)數(shù)據(jù)進(jìn)行加密和解密,以防止敏感數(shù)據(jù)被竊取或篡改。如下圖HD-RK3568-IOT工控板,搭載ATSHA204A加密芯片,常用于有安全防護(hù)要求的工商業(yè)場(chǎng)景,下文將為大家介紹安卓APP開發(fā)中,如何使用此類加密芯片。

3568開發(fā)板

1.AndroidStudio工具配置

JNI(JavaNativeInterface,Java本地接口)是Java生態(tài)的特性,它擴(kuò)展了Java虛擬機(jī)的能力,使得Java代碼可以與C/C++代碼進(jìn)行交互。通過JNI接口,Java代碼可以調(diào)用C/C++代碼,C/C++代碼也可以調(diào)用Java代碼。雖然Java是平臺(tái)無(wú)關(guān)性語(yǔ)言,但運(yùn)行Java語(yǔ)言的虛擬機(jī)是運(yùn)行在具體平臺(tái)上的,所以Java虛擬機(jī)是平臺(tái)相關(guān)的。因此,對(duì)于調(diào)用平臺(tái)API的功能時(shí),雖然在Java語(yǔ)言層是平臺(tái)無(wú)關(guān)的,但背后只能通過JNI技術(shù)在Native層分別調(diào)用不同平臺(tái)API。類似的,對(duì)于有操作硬件需求的程序,也只能通過C/C++實(shí)現(xiàn)對(duì)硬件的操作,再通過JNI調(diào)用。為了支持JNI的開發(fā),在AndroidStudio工具中需要NDK(NativeDevelopmentKit)的支持。

1.png

圖1.1:添加NDK和CMake支持

點(diǎn)擊AndroisStudio的File->settings菜單,打上上面的settings頁(yè)面,首先找到AndroidSDK的設(shè)定位置,AndroidStudio版本不一樣時(shí),其AndroidSDK所處的子項(xiàng)可能略有差異,然后點(diǎn)擊SDKTools頁(yè)簽,勾選上NDK和CMake的支持,然后安裝它們。

2.新建NativeC++工程

點(diǎn)擊File->Newproject,然后選中“NativeC++”工程模板,創(chuàng)建一個(gè)C++工程。最后點(diǎn)擊“Next”按鈕,如下圖所示:

2.png

圖2.1:新建NativeC++項(xiàng)目

接著填寫工程的名字,包名,工程保存的位置以及語(yǔ)言,然后點(diǎn)擊“Next”按鈕,如下圖所示:

3.png

圖2.2:native項(xiàng)目設(shè)置

接著進(jìn)行C++標(biāo)準(zhǔn)設(shè)定,這里可以根據(jù)熟悉的語(yǔ)言標(biāo)準(zhǔn)進(jìn)行選擇,最后點(diǎn)擊“Finish”完成設(shè)定。

4.png

圖2.3:C++Standard選擇

完成后,新建的項(xiàng)目窗口如下:

5.png

圖2.4:新建項(xiàng)目全貌

導(dǎo)航欄作用可以通過左側(cè)項(xiàng)目工具視圖體現(xiàn),菜單欄也可以先隱藏而在需要時(shí)顯示,為使窗口空間的有效利用,通過View->Appearance將菜單欄隱藏,并將導(dǎo)航信息設(shè)定為在下方的StatusBar中顯示。

3.Native項(xiàng)目開發(fā)

3.1CPP開發(fā)

在窗口的左側(cè)邊沿是一條“ToolWindowBar”,用于選擇左側(cè)窗口“ToolWindow”的內(nèi)容,在窗口的左上角有一個(gè)

6.png

圖標(biāo),表示“ToolWindow”顯示為項(xiàng)目,點(diǎn)擊該圖標(biāo)會(huì)有不同的視圖選擇,這里默認(rèn)是“Android”視圖,現(xiàn)在點(diǎn)擊“Android”標(biāo)簽,在下拉視圖選項(xiàng)中選擇“ProjectFile”視圖:

7.png

圖3.1:項(xiàng)目視圖選擇

8.png

圖3.2:ProjectFiles顯示

cryptosdr/app/src/main/AndroidManifest.xml是一個(gè)清單文件,在每個(gè)android應(yīng)用項(xiàng)目必有的,它負(fù)責(zé)向Android構(gòu)建工具,此文件是自動(dòng)生成的。cryptosdr/app/src/main/java/com/vanxoak/cryptosdr/MainActivity.java是描述程序邏輯的java文件。cryptosdr/app/src/main/cpp下面有兩個(gè)文件,是我們要進(jìn)行nativec++開發(fā)的地方:CMakeLists.txt:編譯腳本,用于告知如何編譯項(xiàng)目中的本地庫(kù)。native-lib.cpp:創(chuàng)建的本地庫(kù)示例代碼模板,后期代碼編寫主要在這個(gè)文件里面進(jìn)行?,F(xiàn)在分別詳細(xì)介紹一下這兩個(gè)文件,CMakeLists.txt解釋如下:

cmake_minimum_required(VERSION3.22.1)#設(shè)置Cmake的最低版本

navtive-lib.cpp文件,這個(gè)文件是本地庫(kù)的C++源碼。我們需要在這里定義本地庫(kù)對(duì)java(Android)層提供的接口。在java中調(diào)用我們定義和提供的接口,就能實(shí)現(xiàn)java操縱c++的能力,這里是自動(dòng)生成的一個(gè)示例:

#include

我們需要對(duì)navtive-lib.cpp實(shí)現(xiàn)的內(nèi)容進(jìn)行修改,上面給了一個(gè)范例,我們也可以通過其它的方式讓這個(gè)文件更接近我們需要的。

3.2建立接口類文件

現(xiàn)在新建一個(gè)Java所需要的接口類,在工具窗口的app/src/main/java/com/vanxoak/cryptosdr文件夾上右鍵彈出菜單上新建一個(gè)“JavaClass”:

11.png

圖3.3:新建JavaClass

在新建串口中輸入類名稱“Rjgt102”,并使用默認(rèn)Class選項(xiàng):

12.png

圖3.4:NewRjgt102Class

新建完成后會(huì)生成一個(gè)Rjgt102.class的文件,在EditWindow中編輯類的接口信息,最終得到的文件如下:

packagecom.vanxoak.cryptosdr;

3.3通過類文件生成JNI接口

點(diǎn)擊左側(cè)ToolWindowBar的

圖標(biāo),或直接使用“Alt+F12”來(lái)打開終端窗口:


15.png

圖3.5:Terminal窗口

運(yùn)行下面的命令:

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

命令執(zhí)后,在cpp目錄下會(huì)生成一個(gè)com_vanxoak_cryptosdr_Rjgt102.h的頭文件,通過右鍵點(diǎn)擊Toolwindow中的cpp文件夾并”ReloadfromDisk”可以在Toolwindow中看到這一文件,打開文件可以看到下面的文件內(nèi)容:

/*DONOTEDITTHISFILE-itismachinegenerated*/

其中的內(nèi)容主要是我們將要實(shí)現(xiàn)的功能,我們?cè)趎ative-lib.cpp中實(shí)現(xiàn)上面的函數(shù),并刪除native-lib.cpp原先自動(dòng)生成的Java_com_vanxoak_cryptosdr_MainActivity_stringFromJNI函數(shù),并重新構(gòu)建整個(gè)工程,有于Rjgt102屬于加密芯片,源碼中含有密鑰信息,這里不暫時(shí)native-lib.cpp的源碼內(nèi)容,并且接下來(lái)我們將利用得到的動(dòng)態(tài)庫(kù)重新改造該項(xiàng)目使之僅使用生成的動(dòng)態(tài)庫(kù)而不再包含源碼。

在構(gòu)建完成后可以發(fā)現(xiàn)生成了多個(gè)libcryprosdr.so文件,以滿足多個(gè)架構(gòu)的需求:

20.png

圖3.6:多架構(gòu)下libcryprosdr.so文件


3.4MainActivity及布局文件的編寫

我們要實(shí)現(xiàn)的界面效果,如下圖所示。activity_main.xml里面定義了一個(gè)主體的LinearLayout,其中分布有2個(gè)TableLayout,然后在TableRow中分布TextView,Button,EditText以及Spinner控件,具體的編寫方法請(qǐng)參考本文檔配套資料提供的應(yīng)用程序源碼。

21.png

圖3.7:cryptoSdr顯示界面

MainActivity.java中要寫實(shí)現(xiàn)控件功能的邏輯代碼。在此文件中,將會(huì)對(duì)之前定義的Rjgt102接口進(jìn)行調(diào)用。

3.4.1Usid的顯示

我們希望打開應(yīng)用時(shí)就能顯示該Rjgt102芯片的Usid,這就需要我們?cè)贛ainActivity的onCreate函數(shù)中就利用JNI來(lái)訪問Rjgt102芯片來(lái)獲取Usid信息,下面是獲取流程:

publicclassMainActivityextendsAppCompatActivity{

3.4.2 選擇所操作的page對(duì)象

讀取page或者更新page內(nèi)容都需要明確的page_id作為對(duì)象,page_id的選擇是通過Spinner控件進(jìn)行的,下面是page_id選擇的代碼示例:

publicclassMainActivityextendsAppCompatActivity{

實(shí)際上是對(duì)Spinner對(duì)象的ItemSelected事件進(jìn)行監(jiān)聽來(lái)獲取的pageId。

3.4.3讀取page內(nèi)容

讀取page內(nèi)容需要通過READPAGE按鈕觸發(fā):

publicclassMainActivityextendsAppCompatActivity{

3.4.4 更新page內(nèi)容

更新page內(nèi)容需要通過READPAGE按鈕觸發(fā):

publicclassMainActivityextendsAppCompatActivity{

4.轉(zhuǎn)為JniLibs項(xiàng)目

在上一章Native項(xiàng)目開發(fā)完成后,整個(gè)應(yīng)用功能已可使用,但由于nativec++代碼中含有敏感信息,需要保護(hù)而不公開native部分代碼,則需要將該部分代碼轉(zhuǎn)為應(yīng)用包含JniLibs的方式。

4.1新建jniLibs目錄

需要在app\src\main上右鍵單擊菜單中選擇New->Directory:

26.png

圖4.1:newDirecrory

將新建的目錄命名為jniLibs。

4.2拷貝libcryprosdr.so到j(luò)niLibs

現(xiàn)在將libcryprosdr.so文件拷貝進(jìn)來(lái):

27.png

圖4.2:拷貝libcryprosdr.so文件到j(luò)niLibs

4.3刪除cpp目錄

現(xiàn)在需要?jiǎng)h除敏感nativec++源碼了,直接在src\app\src\main\cpp上右鍵單擊菜單中選擇Delete:

28.png

圖4.3:刪除cpp目錄

同樣方式可對(duì)中間過程文件存儲(chǔ)文件夾src\app\.cxx進(jìn)行刪除。

4.4刪除對(duì)cpp目錄的編譯引用

在刪除了cpp目錄后,還需要?jiǎng)h除項(xiàng)目中對(duì)cpp的編譯部分,這里需要修改app\build.gradle文件,使之不再進(jìn)行externalNativeBuild:

29.png


圖4.4:刪除對(duì)cpp的編譯

將上面內(nèi)容刪除后重新編譯工程即可。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • APP
    APP
    +關(guān)注

    關(guān)注

    33

    文章

    1565

    瀏覽量

    72329
  • 加密芯片
    +關(guān)注

    關(guān)注

    2

    文章

    110

    瀏覽量

    23593
  • 安卓
    +關(guān)注

    關(guān)注

    5

    文章

    2116

    瀏覽量

    56955
  • RK3568
    +關(guān)注

    關(guān)注

    4

    文章

    487

    瀏覽量

    4875
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【藍(lán)牙4.1】app安裝失敗

    ` 本帖最后由 770781327 于 2015-6-30 21:28 編輯 大家有沒有用到手機(jī)端的app呢,我是手機(jī),官網(wǎng)提供的這app貌似無(wú)法安裝呀,我都換了四家的
    發(fā)表于 06-30 21:27

    【云智易試用體驗(yàn)】APP demo編譯與運(yùn)行

    的模擬器則需要使用手機(jī)),插上手機(jī),運(yùn)行此工程。ADT會(huì)自動(dòng)安裝app到手機(jī)(模擬器)并運(yùn)行。But 運(yùn)行后并沒有找到說(shuō)明文檔里所說(shuō)的配置按鈕,所以也就沒有跑起來(lái)。。。。。。。。。又一個(gè)多小時(shí)沒能上手。
    發(fā)表于 09-05 21:59

    【Thunderboard Sense試用體驗(yàn)】機(jī)安裝APP

    對(duì)于手機(jī)用戶來(lái)說(shuō),下載Thunderboard APP需要去Google play下載,官網(wǎng)并不提供安裝包和下載鏈接。而大陸又有限制,這困擾了一大批的用戶。下面我來(lái)講述一下自己使用
    發(fā)表于 06-24 23:51

    聘尋APP開發(fā)工程師

    因增加運(yùn)營(yíng)效益,現(xiàn)誠(chéng)聘APP開發(fā)工程師只需閣下的技術(shù),我們提供一切材料,目前需求量大成功制作APP并上架各大安
    發(fā)表于 03-11 19:24

    【有獎(jiǎng)體驗(yàn)】+APP自動(dòng)生成源碼

    【有獎(jiǎng)體驗(yàn)】+APP自動(dòng)生成源碼大佬們都在使用開發(fā)板上的自動(dòng)代碼生成,有MCU的、有SOC的,都試過了,那么我就試個(gè)APP的吧??上У氖?/div>
    發(fā)表于 07-09 16:50

    手機(jī)APP通過藍(lán)牙不能連接上stm32的單片機(jī)的藍(lán)牙模塊

    手機(jī)APP通過藍(lán)牙連接不上stm32單片機(jī)的藍(lán)牙模塊,之前是自己寫的APP發(fā)現(xiàn)連接不上,后來(lái)自己下載一個(gè)
    發(fā)表于 04-27 22:58

    ***版哪個(gè)好用

    跨境瀏覽器APP輕搜跨境瀏覽器APP高效手機(jī)網(wǎng)頁(yè)瀏覽工具,軟件自動(dòng)連接網(wǎng)絡(luò),不僅可以登錄國(guó)內(nèi)的各大平臺(tái)網(wǎng)站,還可以進(jìn)入外網(wǎng),不需要加速器,給你超便利的體驗(yàn)。輕搜瀏覽器
    發(fā)表于 09-24 14:56

    如何用AltBeaconAPI開發(fā)Beacon原型APP?

    如何用AltBeaconAPI開發(fā)Beacon原型APP?
    發(fā)表于 05-21 06:32

    鴻蒙、iOS、開發(fā)者數(shù)量,APP數(shù)量大對(duì)比,差距有多大呢?

    ,只要開發(fā)者數(shù)量多了,APP就多了,生態(tài)就起來(lái)了。那么我們對(duì)比一下當(dāng)前華為鴻蒙、蘋果iOS、谷歌開發(fā)者數(shù)量、
    發(fā)表于 08-30 14:27

    如何通過模擬器實(shí)現(xiàn)APP控制小車?

    如何通過模擬器實(shí)現(xiàn)APP控制小車?
    發(fā)表于 01-19 06:29

    如何利用App inventor編寫app控制ESP8266?

    如何利用App inventor編寫app控制ESP8266?
    發(fā)表于 02-11 07:04

    【吉方工控G-3288-02開發(fā)板試用體驗(yàn)】-RK3288系統(tǒng)的WIFI聯(lián)網(wǎng)測(cè)試以及APK安裝器APP安裝運(yùn)行測(cè)試體驗(yàn)

    系統(tǒng)預(yù)裝的“APK安裝器”APP,可以將自行開發(fā)APP(后綴為APK的程序文件)安裝到G-3288-02
    發(fā)表于 03-29 13:14

    (遠(yuǎn)程控制)App inventor 編寫app控制 ESP8266

    App inventor 編寫app控制 ESP8266第一 下載ESP8266示例(arduino ide 編程開發(fā))第二 修改dem
    發(fā)表于 12-08 17:06 ?28次下載
    (遠(yuǎn)程控制)<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藍(lán)牙伺服電機(jī)控制APP

    電子發(fā)燒友網(wǎng)站提供《Arduino/Android藍(lán)牙伺服電機(jī)控制APP.zip》資料免費(fèi)下載
    發(fā)表于 12-05 09:14 ?4次下載
    Arduino/Android藍(lán)牙伺服電機(jī)控制<b class='flag-5'>安</b><b class='flag-5'>卓</b><b class='flag-5'>APP</b>

    云視角APP更新通知

    我司于2021年12月23日更新發(fā)布了云視角APP,用戶可通過手機(jī)應(yīng)用寶軟件自行下載更新。由于我司產(chǎn)品的豐富,功能不斷優(yōu)化,我司于今
    的頭像 發(fā)表于 03-31 09:47 ?518次閱讀
    云視角<b class='flag-5'>安</b><b class='flag-5'>卓</b><b class='flag-5'>APP</b>更新通知