薛李濱,潘 瑜
(1.江蘇理工學(xué)院 計(jì)算機(jī)工程學(xué)院,江蘇 常州 213001;2.青海師范大學(xué) 計(jì)算機(jī)學(xué)院,青海 西寧 810000)
隨著智能手機(jī)平臺發(fā)展的日新月異,Android[1]平臺操作系統(tǒng)以其開源,實(shí)用,功能強(qiáng)大等優(yōu)點(diǎn),與IOS[2]形成了智能手機(jī)市場兩分天下的局面,與IOS相比,Android操作系統(tǒng)的用戶視覺流暢性較差,安全性也有待提高,為解決這些現(xiàn)象,就需要對其平臺進(jìn)行一定的優(yōu)化,提高其運(yùn)行效率,改善用戶性能。采用簡潔高效的系統(tǒng)軟件集成方式,才能改善Android平臺的流暢性和安全性的同時(shí),提高其視覺效果和操作系統(tǒng)的市場核心競爭力。
Android系統(tǒng)的程序架構(gòu)主要分為四個(gè)層次構(gòu)成[3]。Linux[4]核心部件位于最低層,為上層部件提供服務(wù),底層的上一層是運(yùn)行時(shí)層,包括依賴Linux內(nèi)核實(shí)現(xiàn)線程管理的虛擬機(jī)Dalvik和使用C++構(gòu)建的系統(tǒng)函數(shù)庫組件。再向上一層是中間層,包括各種系統(tǒng)管理者類和系統(tǒng)服務(wù),以供應(yīng)用程序調(diào)用,從而透明化硬件平臺,簡化開發(fā)難度。最上層便是用戶可見的應(yīng)用層了,包含通話,通訊錄,瀏覽器等手機(jī)常見的實(shí)用程序。
搭建Android開發(fā)環(huán)境,需要在已安裝JDK的環(huán)境下進(jìn)行具體步驟為:首先,使用JDK6[5]作為Java的運(yùn)行環(huán)境[6]。在系統(tǒng)環(huán)境變量[7]中添加三個(gè)變量PATH,JAVA_HOME與CLASSPATH,我們使用E-clipse 3.7.0版本,直接解壓即可使用。其次,進(jìn)入SDK管理界面,運(yùn)行SDK Manager.exe選擇需要的SDK版本并安裝,再次,找到Eclipse IDE的幫助菜單的安裝更新軟件菜單項(xiàng),添加Android SDK路徑,安裝Android開發(fā)環(huán)境下的Eclipse IDE[8]所需的插件ADT。最后,在Eclipse菜單欄中點(diǎn)擊[新建],選擇AVD的容量、型號、分辨率類型等,創(chuàng)建AVD模擬器完成后,即完成了對整個(gè)Android開發(fā)環(huán)境的搭建。
為了提高Android平臺視覺流暢性,必須從根本上提高Android平臺的運(yùn)行效率,我們將AES算法應(yīng)用于Android操作系統(tǒng),并進(jìn)行改進(jìn),最后根據(jù)實(shí)驗(yàn)來對改進(jìn)前后的效果進(jìn)行對比。
AES是密碼學(xué)中的高級加密標(biāo)準(zhǔn),AES采用固定的128bit長度的區(qū)塊,密鑰采用128,192或256bit,其計(jì)算大多數(shù)是在一個(gè)特別的有限域完成的,其加密過程為:將一個(gè)4行4列的矩陣中的元素對應(yīng)到明文區(qū)塊中的一個(gè)字節(jié),即可初始化明文。進(jìn)行多輪加密時(shí),先將矩陣體每一個(gè)字節(jié)都與本輪回合密鑰進(jìn)行異或運(yùn)算,按照密鑰方案產(chǎn)生每個(gè)子密鑰,再通過非線性替換法,把每個(gè)字節(jié)查表替換成對應(yīng)的字節(jié),將矩陣中每行循環(huán)移位,再將每列用線性轉(zhuǎn)換的方式混合。加密循環(huán)的最終一輪應(yīng)省略列混合。
對于AES算法的優(yōu)化截至目前主要從提高算法的效率,在不同平臺實(shí)現(xiàn)算法以及利用密鑰擴(kuò)展或S盒優(yōu)化算法提高系統(tǒng)的安全性三方面入手。為了提高Android平臺的視覺流暢性,這里我們從提高AES算法的加解密速率入手來實(shí)現(xiàn)算法的優(yōu)化,并將其在Android平臺實(shí)現(xiàn)。
AES分組密碼算法具有兩個(gè)顯著特點(diǎn):一是輸入、輸出分組及加解密過程的中間分組采用的都是128 bit。二是加密與解密的過程是不對稱的,解密過程是先進(jìn)行行移位運(yùn)算,然后字節(jié)代換,輪密鑰,最終列混淆。因此AES-128加密標(biāo)準(zhǔn)的解密速度遠(yuǎn)遠(yuǎn)高于加密速度,為了提高加密速度,我們可以提高對輪變換速率影響最大的列混合運(yùn)算的效率來優(yōu)化加密的過程。
列混合變換將在模x4+1下將給定多項(xiàng)式03x3+01x2+01x與狀態(tài)列多項(xiàng)式(F82)相乘,因多項(xiàng)式與?;ニ兀虼诉^程是可逆的。我們可以對混合列調(diào)用xtime函數(shù)變換進(jìn)行算法改進(jìn),將多項(xiàng)式xA(x)=通過模簡化與模按位與運(yùn)算,例如:計(jì)算
(56)*(11)=(fe),(56)=(1010110);(56)*(02)=xtime(56)=(1010110)=(ae);
(56)*(04)=xtime(4e);(56)*(04)=xtime(8e);
故(56)*(11)=(56)*{(01)⊕(10)}=(56)⊕(56)*(10)⊕(56)=(56)⊕(ae)⊕(06)=(fe);
因此對混合列進(jìn)行xtime優(yōu)化改進(jìn)的方法為:
圖1 算法改進(jìn)前后效率對比圖
(1)將4列進(jìn)行異或操作得到值u;
(2)選取第二列單獨(dú)與第1,3,4列進(jìn)行異或操作并賦值給v,調(diào)用xtime函數(shù)使得v=xtime(v);
(3)得到 a[0]=a[0]⊕ v ⊕ u,a[1]=a[1]⊕ v ⊕ u,a[2]=a[2]⊕ v ⊕ uv=a[3]⊕ u;
再將列混合后的元組按行MixColumns矩陣運(yùn)算后,即可得到新元組。通過OpenSSL0.9.7版本測試后,AES-128加密算法改進(jìn)前后效率對比如圖1所示。通過圖1可以看出,改進(jìn)后的算法明顯比改進(jìn)前效率有大幅度提高。
完成了對Android平臺算法效率的優(yōu)化之后,我們以應(yīng)用層的一個(gè)手機(jī)安全防御系統(tǒng)來展現(xiàn)對Android平臺系統(tǒng)的集成。
一個(gè)集成的系統(tǒng),其應(yīng)用程序可能有幾萬行代碼,上百個(gè)源程序,所以對源程序按照包名的方式來組織項(xiàng)目的結(jié)構(gòu)就顯得必要,而采用MVC的方式進(jìn)行組織是最簡潔的方式之一,最內(nèi)層是網(wǎng)絡(luò)層,即通過net層的Service服務(wù)或Provider內(nèi)容提供者為中間層提供數(shù)據(jù);中間層是通過engine傳遞給數(shù)據(jù)適配器;界面層通過list view控件接收從數(shù)據(jù)適配器傳來的數(shù)據(jù),利用activity組件來進(jìn)行界面ui層的展現(xiàn)。
由上述業(yè)務(wù)邏輯可以清晰的將包結(jié)構(gòu)按照層次分為3類:
網(wǎng)絡(luò)層包的種類及命名方式:服務(wù)包*.service,網(wǎng)絡(luò)包*.net,內(nèi)容提供者包*.Provider,和工具包* .Util。
(2)中間層包的種類及命名方式:數(shù)據(jù)適配器包*.adapter,數(shù)據(jù)庫存儲訪問包*.db.dao,系統(tǒng)提供數(shù)據(jù)包* .Engine。
(3)界面層包的種類及命名方式:activity相關(guān)界面包*.ui,自定義的view對象包*.ui.stub。
有效的組織好系統(tǒng)包結(jié)構(gòu)之后,第一步要實(shí)現(xiàn)的是歡迎窗體,實(shí)現(xiàn)方法為:首先新建splash.xml文件,定義歡迎窗體的圖片,設(shè)置圖片的顏色,寬度,高度及系統(tǒng)的版本號等信息;其次,取消掉標(biāo)題欄,得到將當(dāng)前的窗體并傳入系統(tǒng)全屏參數(shù)將其全屏顯示,獲取應(yīng)用程序的包名信息及版本號;最后,獲得最外層的splashMain組件,設(shè)置該組件的動(dòng)畫時(shí)間,為歡迎窗體添加動(dòng)畫效果。完成后的歡迎窗體漸變動(dòng)畫效果如圖2所示。
圖2 歡迎窗體漸變效果圖
歡迎窗體進(jìn)入主界面前,用戶應(yīng)當(dāng)能夠自動(dòng)更新服務(wù)器配置,以便在聯(lián)網(wǎng)時(shí)能夠即時(shí)得到服務(wù)器端最新的系統(tǒng)版本。此過程為:鏈接服務(wù)器,獲取系統(tǒng)最新的版本號,判斷是否需要更新,若不更新,直接進(jìn)入主界面。若需要更新則按照用戶的需要選擇是否更新。其流程圖如圖3所示。
其業(yè)務(wù)邏輯的具體實(shí)現(xiàn)過程為:首先配置新版本號,新版本的下載路徑,描述等更新信息的xml配置文件;其次,創(chuàng)建數(shù)據(jù)層engine包及domin包,連接服務(wù)器,得到服務(wù)器文件返回的更新信息的數(shù)據(jù)流。最后,設(shè)置判斷是否需要更新升級的方法,對升級與否的結(jié)果進(jìn)行判斷后進(jìn)入相對應(yīng)版本的主界面。實(shí)現(xiàn)后的界面效果如圖4所示。其中連接服務(wù)器獲取更新的核心代碼如下:
圖3 獲取服務(wù)器更新配置流程圖
圖4 升級功能效果圖
在完成了獲取版本更新配置的功能之后,整個(gè)系統(tǒng)將需集成小功能按照網(wǎng)格的形式排列集合起來,因此,我們首先創(chuàng)建配置主屏幕寬度,高度,背景色及行列數(shù)等布局信息的xml文件,初始化程序主窗體。其次,創(chuàng)建適配器,定義相同的文字,圖標(biāo),位置,內(nèi)容等信息,并在其中得到窗體布局文件的view對象。最后初始化已配置的適配器,在ui層的Activity類中得到適配器中的布局信息。程序主界面布局集成后的效果如圖5所示。
圖5 系統(tǒng)布局集成主界面
此部分的業(yè)務(wù)邏輯中主界面類的核心業(yè)務(wù)代碼如下:
在完成了對系統(tǒng)界面的布局集成之后,便可輕松的對其進(jìn)行某個(gè)小功能添加按鈕的點(diǎn)擊事件,進(jìn)行此功能模塊的開發(fā),將所有小功能實(shí)現(xiàn)后,整個(gè)系統(tǒng)便整體實(shí)現(xiàn)集成了。
本文搭建了Android的開發(fā)環(huán)境,分析了Android系統(tǒng)平臺的結(jié)構(gòu),進(jìn)而對Android編譯器進(jìn)行了優(yōu)化,并以一個(gè)移動(dòng)手機(jī)安全防御系統(tǒng)為例,介紹了一種系統(tǒng)集成的方式,并闡述了簡化的方法,降低了應(yīng)用層的冗余度,提高了效率。
[1]胡世良.移動(dòng)互聯(lián)網(wǎng):贏在下一個(gè)十年的起點(diǎn)[M].北京:人民郵電出版社,2012:11-15.
[2]潘軼華,劉勇波,王智微,等.蘋果iOS技術(shù)在發(fā)電企業(yè)中的應(yīng)用和研究[J].電力信息化,2011,9(9):66-71.
[3]劉鎏.Android的架構(gòu)與應(yīng)用開發(fā)分析[J].信息技術(shù)應(yīng)用研究,2011(14):46-47.
[4]Robert L.Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)[M].陳莉君,唐華譯.北京:機(jī)械工業(yè)出版社,2011.
[5]??藸?Java編程思想[M].陳昊鵬譯.北京:機(jī)械工業(yè)出版社,2007.
[6]張永強(qiáng),王愛民.Java程序設(shè)計(jì)應(yīng)用教程[M].北京:電子工業(yè)出版社,2007:7-9.
[7]梁立新,郭銳.Java核心技術(shù)應(yīng)用開發(fā)[M].北京:電子工業(yè)出版社,2010.
[8]李松林,陳華清,任鑫.Eclipse寶典[M].北京:電子工業(yè)出版社,2007.
江蘇理工學(xué)院學(xué)報(bào)2014年2期