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

1.AndroidStudio工具配置
JNI(JavaNativeInterface,Java本地接口)是Java生態(tài)的特性,它擴(kuò)展了Java虛擬機(jī)的能力,使得Java代碼可以與C/C++代碼進(jìn)行交互。通過(guò)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)的,但背后只能通過(guò)JNI技術(shù)在Native層分別調(diào)用不同平臺(tái)API。類似的,對(duì)于有操作硬件需求的程序,也只能通過(guò)C/C++實(shí)現(xiàn)對(duì)硬件的操作,再通過(guò)JNI調(diào)用。為了支持JNI的開(kāi)發(fā),在AndroidStudio工具中需要NDK(NativeDevelopmentKit)的支持。

圖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.1:新建NativeC++項(xiàng)目
接著填寫(xiě)工程的名字,包名,工程保存的位置以及語(yǔ)言,然后點(diǎn)擊“Next”按鈕,如下圖所示:

圖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è)定。

圖2.3:C++Standard選擇
完成后,新建的項(xiàng)目窗口如下:

圖2.4:新建項(xiàng)目全貌
導(dǎo)航欄作用可以通過(guò)左側(cè)項(xiàng)目工具視圖體現(xiàn),菜單欄也可以先隱藏而在需要時(shí)顯示,為使窗口空間的有效利用,通過(guò)View->Appearance將菜單欄隱藏,并將導(dǎo)航信息設(shè)定為在下方的StatusBar中顯示。
3.Native項(xiàng)目開(kāi)發(fā)
3.1CPP開(kāi)發(fā)
在窗口的左側(cè)邊沿是一條“ToolWindowBar”,用于選擇左側(cè)窗口“ToolWindow”的內(nèi)容,在窗口的左上角有一個(gè)

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

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

圖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++開(kāi)發(fā)的地方:CMakeLists.txt:編譯腳本,用于告知如何編譯項(xiàng)目中的本地庫(kù)。native-lib.cpp:創(chuàng)建的本地庫(kù)示例代碼模板,后期代碼編寫(xiě)主要在這個(gè)文件里面進(jìn)行。現(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è)范例,我們也可以通過(guò)其它的方式讓這個(gè)文件更接近我們需要的。
3.2建立接口類文件
現(xiàn)在新建一個(gè)Java所需要的接口類,在工具窗口的app/src/main/java/com/vanxoak/cryptosdr文件夾上右鍵彈出菜單上新建一個(gè)“JavaClass”:

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

圖3.4:NewRjgt102Class
新建完成后會(huì)生成一個(gè)Rjgt102.class的文件,在EditWindow中編輯類的接口信息,最終得到的文件如下:
packagecom.vanxoak.cryptosdr;
3.3通過(guò)類文件生成JNI接口
點(diǎn)擊左側(cè)ToolWindowBar的

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

圖3.5:Terminal窗口
運(yùn)行下面的命令:
E:\RK3568_APP\cryptoSdr>cdapp\src\main
命令執(zhí)后,在cpp目錄下會(huì)生成一個(gè)com_vanxoak_cryptosdr_Rjgt102.h的頭文件,通過(guò)右鍵點(diǎn)擊Toolwindow中的cpp文件夾并”ReloadfromDisk”可以在Toolwindow中看到這一文件,打開(kāi)文件可以看到下面的文件內(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)的需求:

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

圖3.7:cryptoSdr顯示界面
MainActivity.java中要寫(xiě)實(shí)現(xiàn)控件功能的邏輯代碼。在此文件中,將會(huì)對(duì)之前定義的Rjgt102接口進(jìn)行調(diào)用。
3.4.1Usid的顯示
我們希望打開(kāi)應(yīng)用時(shí)就能顯示該Rjgt102芯片的Usid,這就需要我們?cè)贛ainActivity的onCreate函數(shù)中就利用JNI來(lái)訪問(wèn)Rjgt102芯片來(lái)獲取Usid信息,下面是獲取流程:
publicclassMainActivityextendsAppCompatActivity{
3.4.2 選擇所操作的page對(duì)象
讀取page或者更新page內(nèi)容都需要明確的page_id作為對(duì)象,page_id的選擇是通過(guò)Spinner控件進(jìn)行的,下面是page_id選擇的代碼示例:
publicclassMainActivityextendsAppCompatActivity{
實(shí)際上是對(duì)Spinner對(duì)象的ItemSelected事件進(jìn)行監(jiān)聽(tīng)來(lái)獲取的pageId。
3.4.3讀取page內(nèi)容
讀取page內(nèi)容需要通過(guò)READPAGE按鈕觸發(fā):
publicclassMainActivityextendsAppCompatActivity{
3.4.4 更新page內(nèi)容
更新page內(nèi)容需要通過(guò)READPAGE按鈕觸發(fā):
publicclassMainActivityextendsAppCompatActivity{
4.轉(zhuǎn)為JniLibs項(xiàng)目
在上一章Native項(xiàng)目開(kāi)發(fā)完成后,整個(gè)應(yīng)用功能已可使用,但由于nativec++代碼中含有敏感信息,需要保護(hù)而不公開(kāi)native部分代碼,則需要將該部分代碼轉(zhuǎn)為應(yīng)用包含JniLibs的方式。
4.1新建jniLibs目錄
需要在app\src\main上右鍵單擊菜單中選擇New->Directory:

圖4.1:newDirecrory
將新建的目錄命名為jniLibs。
4.2拷貝libcryprosdr.so到j(luò)niLibs
現(xiàn)在將libcryprosdr.so文件拷貝進(jìn)來(lái):

圖4.2:拷貝libcryprosdr.so文件到j(luò)niLibs
4.3刪除cpp目錄
現(xiàn)在需要?jiǎng)h除敏感nativec++源碼了,直接在src\app\src\main\cpp上右鍵單擊菜單中選擇Delete:

圖4.3:刪除cpp目錄
同樣方式可對(duì)中間過(guò)程文件存儲(chǔ)文件夾src\app\.cxx進(jìn)行刪除。
4.4刪除對(duì)cpp目錄的編譯引用
在刪除了cpp目錄后,還需要?jiǎng)h除項(xiàng)目中對(duì)cpp的編譯部分,這里需要修改app\build.gradle文件,使之不再進(jìn)行externalNativeBuild:

圖4.4:刪除對(duì)cpp的編譯
將上面內(nèi)容刪除后重新編譯工程即可。
-
APP
+關(guān)注
關(guān)注
33文章
1586瀏覽量
74238 -
加密芯片
+關(guān)注
關(guān)注
3文章
126瀏覽量
24297 -
安卓
+關(guān)注
關(guān)注
5文章
2154瀏覽量
58688 -
RK3568
+關(guān)注
關(guān)注
5文章
584瀏覽量
6406
發(fā)布評(píng)論請(qǐng)先 登錄
【藍(lán)牙4.1】安卓app安裝失敗
【云智易試用體驗(yàn)】安卓APP demo編譯與運(yùn)行
【Thunderboard Sense試用體驗(yàn)】安卓機(jī)安裝APP
聘尋安卓APP開(kāi)發(fā)工程師
【有獎(jiǎng)體驗(yàn)】+安卓APP自動(dòng)生成源碼
安卓手機(jī)APP通過(guò)藍(lán)牙不能連接上stm32中的單片機(jī)中的藍(lán)牙模塊
***安卓版哪個(gè)好用
如何用AltBeacon安卓API開(kāi)發(fā)Beacon原型APP?
鴻蒙、iOS、安卓的開(kāi)發(fā)者數(shù)量,APP數(shù)量大對(duì)比,差距有多大呢?
【吉方工控G-3288-02開(kāi)發(fā)板試用體驗(yàn)】-RK3288安卓系統(tǒng)的WIFI聯(lián)網(wǎng)測(cè)試以及APK安裝器安卓APP安裝運(yùn)行測(cè)試體驗(yàn)
(遠(yuǎn)程控制)App inventor 編寫(xiě)安卓app控制 ESP8266

Arduino/Android藍(lán)牙伺服電機(jī)控制安卓APP

云視角安卓APP更新通知

評(píng)論