一種快速實(shí)現(xiàn)Android系統(tǒng)HCE服務(wù)的方法
【專(zhuān)利說(shuō)明】-種快速實(shí)現(xiàn)Android系統(tǒng)HCE服務(wù)的方法
【背景技術(shù)】
[0001] 移動(dòng)通訊技術(shù)的發(fā)展改變了人的生活狀態(tài),總所周知,大部分的移動(dòng)通訊設(shè)備中 的應(yīng)用程序都是基于Android系統(tǒng)開(kāi)發(fā)的。HCE(host_basedcardemulation)的定義為: 基于主機(jī)的卡模擬,HCE是一種是基于軟件的,不需要提供安全模塊SE(SecureElement) 的智能卡模擬技術(shù),目前主流的安卓手機(jī)系統(tǒng)(AndroicM. 4或更高版本)均支持HCE技術(shù)。 Android系統(tǒng)上的HCE技術(shù)是通過(guò)系統(tǒng)服務(wù)實(shí)現(xiàn)的,使用系統(tǒng)服務(wù)的優(yōu)勢(shì)是它可以一直在 后臺(tái)運(yùn)行而不需要有用戶(hù)界面,也就是說(shuō)對(duì)用戶(hù)是透明的,如果開(kāi)發(fā)者要開(kāi)發(fā)個(gè)性化的HCE 服務(wù)時(shí),只需重寫(xiě)Android系統(tǒng)提供的系統(tǒng)服務(wù)的服務(wù)基類(lèi)相關(guān)方法,以及進(jìn)行相應(yīng)的安 裝配置,即可實(shí)現(xiàn)個(gè)性化的HCE服務(wù)。
[0002] JavaCard應(yīng)用是一種基于Java語(yǔ)言編寫(xiě)的運(yùn)行在智能卡中的應(yīng)用程序,開(kāi)發(fā) JavaCard應(yīng)用的語(yǔ)法是Java編程語(yǔ)言語(yǔ)法的子集,并且JavaCard底層運(yùn)行的虛擬機(jī) (JCVM)也是Java虛擬機(jī)(JVM)的一個(gè)子集。JavaCard應(yīng)用與Android系統(tǒng)的HCE服務(wù) 的不同點(diǎn)只在于JavaCard應(yīng)用依賴(lài)的底層類(lèi)庫(kù)與傳統(tǒng)Java應(yīng)用依賴(lài)的系統(tǒng)類(lèi)庫(kù)有所不 同及編譯和運(yùn)行的機(jī)制有所區(qū)別。而Android系統(tǒng)的主開(kāi)發(fā)語(yǔ)言也是Java,這與JavaCard 的開(kāi)發(fā)語(yǔ)言幾乎沒(méi)有區(qū)別。因此,可以利用成熟的JavaCard應(yīng)用快速實(shí)現(xiàn)Android系統(tǒng) 的HCE服務(wù)。
[0003] 在現(xiàn)有技術(shù)中,要實(shí)現(xiàn)一個(gè)特定的Android系統(tǒng)HCE服務(wù),需要在Android開(kāi)發(fā)環(huán) 境下新建項(xiàng)目,并利用Android提供的API進(jìn)行程序編寫(xiě)。當(dāng)相同功能的應(yīng)用需要分別部 署到JavaCard平臺(tái)和Android平臺(tái)時(shí),開(kāi)發(fā)人員往往需要為JavaCard平臺(tái)和Android 平臺(tái)編寫(xiě)兩套邏輯相同但風(fēng)格迥異的代碼,從而使開(kāi)發(fā)工作變得更加繁重。而且由于應(yīng)用 在上述兩個(gè)平臺(tái)的代碼不一致,更會(huì)導(dǎo)致開(kāi)發(fā)出的應(yīng)用的可維護(hù)性降低。
[0004] 本發(fā)明開(kāi)發(fā)出了 一種快速實(shí)現(xiàn)Android系統(tǒng)HCE服務(wù)的方法,實(shí)現(xiàn)了一次性在上 述兩個(gè)平臺(tái)上開(kāi)發(fā)應(yīng)用,有效的提高了開(kāi)發(fā)應(yīng)用的效率也降低了應(yīng)用的維護(hù)難度。
【發(fā)明內(nèi)容】
[0005] -種快速實(shí)現(xiàn)Android系統(tǒng)HCE服務(wù)的方法,所述方法包括,將JavaCard平臺(tái)的 底層類(lèi)庫(kù)移植至Android系統(tǒng)中構(gòu)成Android系統(tǒng)的JavaCard中間層類(lèi)庫(kù)。該方法進(jìn)一 步包括以下步驟:步驟1):對(duì)JavaCard底層類(lèi)庫(kù)進(jìn)行篩選,確定具體需要移植的類(lèi)和接 口,并保持需要移植的類(lèi)庫(kù)的包名、包路徑不變;步驟2):針對(duì)JavaCard平臺(tái)與Android 系統(tǒng)HCE服務(wù)平臺(tái)的底層虛擬機(jī)對(duì)內(nèi)存的不同管理,確定應(yīng)用內(nèi)部持久數(shù)據(jù)對(duì)象在創(chuàng)建、 服務(wù)啟動(dòng)、服務(wù)結(jié)束時(shí)的處理方法;步驟3):基于原生的Android類(lèi)庫(kù)實(shí)現(xiàn)對(duì)步驟1)中所 選類(lèi)庫(kù)進(jìn)行移植,使其成為Android平臺(tái)的JavaCard中間層類(lèi)庫(kù)。步驟1)中所選的類(lèi)庫(kù) 包括,javacard.framework類(lèi)包、javacard.security類(lèi)包、javacard.crypto類(lèi)包、org. globalplatform類(lèi)包。步驟2)中的所述處理方法包括,a)JavaCard文件系統(tǒng)采用Android 的應(yīng)用私有文件存儲(chǔ)方式來(lái)實(shí)現(xiàn);b)密鑰等數(shù)據(jù)采用Android輕量級(jí)數(shù)據(jù)庫(kù)SQLite的方 式實(shí)現(xiàn);c)具體實(shí)現(xiàn)的Android系統(tǒng)HCE服務(wù)需要在預(yù)定時(shí)機(jī)進(jìn)行文件或數(shù)據(jù)庫(kù)方式的持 久化讀取和寫(xiě)入,以保證HCE服務(wù)在斷電或其他原因重啟后仍然具有合適的持久化數(shù)據(jù)。 步驟3)中的移植方法包括,a)調(diào)用java,security類(lèi)庫(kù)加解密相關(guān)的API實(shí)現(xiàn)中間層類(lèi)庫(kù) javacard.security、javacard.crypto的加解密功能;b)根據(jù)Android平臺(tái)的特性封裝實(shí) 現(xiàn)javacard.framework包和org.globalplatform包,達(dá)到模擬部分卡片主安全域功能的 效果。步驟3)可以被步驟4)所替代:步驟4)于Android原生類(lèi)庫(kù)全新開(kāi)發(fā)一個(gè)HCE服務(wù) 應(yīng)用。其中的應(yīng)用內(nèi)部持久數(shù)據(jù)對(duì)象包括,文件系統(tǒng)、密鑰數(shù)據(jù)、其他持久數(shù)據(jù)。JavaCard 平臺(tái)的架構(gòu)包括JavaCard應(yīng)用,JavaCard底層類(lèi)庫(kù),JavaCard虛擬機(jī),而Android系 統(tǒng)HCE服務(wù)平臺(tái)的架構(gòu)包括Android系統(tǒng)HCE服務(wù),JavaCard中間層類(lèi)庫(kù),Android類(lèi)庫(kù), Dalvik虛擬機(jī)。
[0006] 本發(fā)明通過(guò)上述移植方法,將JavaCard平臺(tái)底層類(lèi)庫(kù)移植至Android系統(tǒng)中,從 而實(shí)現(xiàn)了將原有的基于JavaCard平臺(tái)開(kāi)發(fā)的應(yīng)用直接應(yīng)用于Android系統(tǒng)HCE服務(wù)中, 提高了應(yīng)用的轉(zhuǎn)換效率。
【附圖說(shuō)明】
[0007] 圖I:JavaCard平臺(tái)與AndroidHCE平臺(tái)的架構(gòu)比較。 具體實(shí)施例
[0008] 現(xiàn)結(jié)合說(shuō)明書(shū)附圖,以及具體實(shí)施例進(jìn)一步闡述本發(fā)明的技術(shù)方案,具體實(shí)施例 僅是本發(fā)明的布局約束的具體方案,任何負(fù)荷本發(fā)明精神的技術(shù)方案均落在其保護(hù)范圍之 內(nèi)。
[0009] 本發(fā)明通過(guò)將JavaCard底層類(lèi)庫(kù)移植到Android平臺(tái),如此之下,Android平臺(tái) 開(kāi)發(fā)也獲取了JavaCard底層類(lèi)庫(kù)的編程接口,從而,在JavaCard平臺(tái)和Android平臺(tái)開(kāi) 發(fā)相同的應(yīng)用時(shí),該應(yīng)用本身無(wú)需做太大的改動(dòng),即可從JavaCard平臺(tái)移植到Android系 統(tǒng)成為HCE服務(wù),從而可以快速地基于原有的JavaCard應(yīng)用實(shí)現(xiàn)具有相同功能的Android HCE服務(wù)。
[0010] 參見(jiàn)圖1,JavaCard平臺(tái)與Android系統(tǒng)HCE服務(wù)平臺(tái)的架構(gòu)對(duì)比中可以看出, JavaCard平臺(tái)的架構(gòu)包括JavaCard應(yīng)用,JavaCard底層類(lèi)庫(kù),JavaCard虛擬機(jī),而 Android系統(tǒng)HCE服務(wù)平臺(tái)的架構(gòu)包括Android系統(tǒng)HCE服務(wù),JavaCard中間層類(lèi)庫(kù), Android類(lèi)庫(kù),Dalvik虛擬機(jī)。本發(fā)明將JavaCard平臺(tái)的底層類(lèi)庫(kù)移植至Android系統(tǒng) HCE服務(wù)平臺(tái)中構(gòu)成Android系統(tǒng)HCE服務(wù)的JavaCard中間層類(lèi)庫(kù),使得無(wú)需再次開(kāi)發(fā), 即可將現(xiàn)有成熟的基于JavaCard平臺(tái)開(kāi)發(fā)的應(yīng)用應(yīng)用于Android系統(tǒng)HCE服務(wù)中,從而 實(shí)現(xiàn)該應(yīng)用的功能。
[0011] Java Card應(yīng)用依賴(lài)的底層類(lèi)庫(kù)包含以下類(lèi)包(package) : java, io、java, lang、java.rmi、javacard. framework、javacard. security、javacard