一種基于Android系統(tǒng)的框架代碼修改方法及裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及Android技術領域,尤其涉及一種基于Android系統(tǒng)的框架代碼修改方法及裝置。
【背景技術】
[0002]Android是谷歌推出的一種智能的移動終端操作系統(tǒng)。在Android實際開發(fā)過程中,往往都會有一些因針對Android框架中原有功能或職責的拓展而導致的源碼修改。
[0003]從代碼角度看,如果要對原生的Android框架做修改,那么最佳的方式就是以類擴展的形式進行修改。但是這樣修改的話,遇到訪問權限的問題就必須修改原生的類文件,增加接口或是修改原本的訪問權限,這樣的修改不但偏離了谷歌的設計理念,而且最后也會把Android的源碼改得面目全非,對于后續(xù)的平臺版本升級來說既費時又費力并且危險。
[0004]從實際的開發(fā)角度出發(fā),類擴展的形式首先需要考驗到開發(fā)者的設計能力,而且對于小的功能增加或修改來說無疑是太過復雜,并且用類擴展的形式沒有直接在源代碼中修改來的直觀,因此在實際的開發(fā)過程中也不太適用類擴展的形式來拓展Android框架中原有類的功能或職責。
[0005]因此,現(xiàn)有技術還有待于改進和發(fā)展。
【發(fā)明內容】
[0006]鑒于上述現(xiàn)有技術的不足,本發(fā)明的目的在于提供一種基于Android系統(tǒng)的框架代碼修改方法及裝置,旨在解決現(xiàn)有的代碼修改方式維護難、影響原有Android框架、操作復雜等問題。
[0007]本發(fā)明的技術方案如下:
一種基于Android系統(tǒng)的框架代碼修改方法,其中,包括步驟:
A、對Android框架代碼進行功能擴展時,解耦成擴展代碼和原生代碼,框架代碼的功能擴展寫在擴展代碼中,使擴展代碼和原生代碼分離;
B、在進行編譯時,將原生代碼和擴展代碼進行代碼重組,使原生代碼和擴展代碼之間實現(xiàn)互訪,以及通過特定轉換將擴展代碼重塑為可供外部訪問的類對象。
[0008]所述的基于Android系統(tǒng)的框架代碼修改方法,其中,所述步驟A中,解耦成擴展代碼時,擴展代碼的包名與原生代碼的報名一致;擴展代碼的文件名包含有原生代碼的特定標識;擴展代碼中有一個參數(shù)為原生代碼的構造器,并且原生代碼的實例保存在擴展代碼中。
[0009]所述的基于Android系統(tǒng)的框架代碼修改方法,其中,所述步驟B中,將原生代碼和擴展代碼進行代碼重組的過程具體包括:
B1、合并原生代碼和擴展代碼的導入信息;
B2、導入擴展代碼使擴展代碼成為原生代碼中的內部類; B3、去除擴展代碼的公共字段,使擴展代碼變成包訪問權限的嵌套類,降低擴展代碼對外訪問范圍;
B4、在擴展代碼中加入靜態(tài)字段,使擴展代碼成為原生代碼的嵌套類;
B5、構建出一個嵌套類的子類對象。
[0010]所述的基于Android系統(tǒng)的框架代碼修改方法,其中,所述步驟B中,通過特定轉換將擴展代碼重塑為可供外部訪問的類對象的步驟具體包括:
BI’、重塑擴展代碼中原有的導入信息;
B2’、創(chuàng)建一個繼承自原生代碼的嵌套類的擴展類;
B3’、創(chuàng)建一個參數(shù)為原生代碼的構造器;
B4’、創(chuàng)建一個靜態(tài)方法,來擴展類對象。
[0011]所述的基于Android系統(tǒng)的框架代碼修改方法,其中,所述步驟B3’,構造器的實現(xiàn)為調用父類的構造。
[0012]所述的基于Android系統(tǒng)的框架代碼修改方法,其中,所述步驟B4’,靜態(tài)方法為get O方法,內部實現(xiàn)為通過原生代碼獲取其對應的擴展代碼。
[0013]—種基于Android系統(tǒng)的框架代碼修改裝置,其中,包括:
分離模塊,用于對Android框架代碼進行功能擴展時,解耦成擴展代碼和原生代碼,框架代碼的功能擴展寫在擴展代碼中,使擴展代碼和原生代碼分離;
編譯模塊,用于在進行編譯時,將原生代碼和擴展代碼進行代碼重組,使原生代碼和擴展代碼之間實現(xiàn)互訪,以及通過特定轉換將擴展代碼重塑為可供外部訪問的類對象。
[0014]所述的基于Android系統(tǒng)的框架代碼修改裝置,其中,所述編譯模塊包括:
合并單元,用于合并原生代碼和擴展代碼的導入信息;
導入單元,用于導入擴展代碼使擴展代碼成為原生代碼中的內部類;
去除單元,用于去除擴展代碼的公共字段,使擴展代碼變成包訪問權限的嵌套類,降低擴展代碼對外訪問范圍;
靜態(tài)字段加入單元,用于在擴展代碼中加入靜態(tài)字段,使擴展代碼成為原生代碼的嵌套類;
構建單元,用于構建出一個嵌套類的子類對象。
[0015]所述的基于Android系統(tǒng)的框架代碼修改裝置,其中,所述編譯模塊還包括:
重塑單元,用于重塑擴展代碼中原有的導入信息;
第一創(chuàng)建單元,用于創(chuàng)建一個繼承自原生代碼的嵌套類的擴展類;
第二創(chuàng)建單元,用于創(chuàng)建一個參數(shù)為原生代碼的構造器;
第三創(chuàng)建單元,用于創(chuàng)建一個靜態(tài)方法,來擴展類對象。
[0016]所述的基于Android系統(tǒng)的框架代碼修改裝置,其中,所述分離模塊中,解耦成擴展代碼時,擴展代碼的包名與原生代碼的報名一致;擴展代碼的文件名包含有原生代碼的特定標識;擴展代碼中有一個參數(shù)為原生代碼的構造器,并且原生代碼的實例保存在擴展代碼中。
[0017]有益效果:本發(fā)明使用擴展代碼和原生代碼分離的形式來修改Android框架源碼,使得原本應該在Android框架代碼中修改的代碼統(tǒng)一放到擴展代碼中,并且分離出來的擴展代碼與原生代碼有著相互的完全互訪的權限,即,僅在擴展代碼與原生代碼之間打破Java規(guī)范下的訪問權限限制,對于其他的外部代碼來說,他們之間的訪問是受到Java規(guī)范的訪問權限的約束。
【附圖說明】
[0018]圖1為本發(fā)明一種基于Android系統(tǒng)的框架代碼修改方法較佳實施例的流程圖。
[0019]圖2為本發(fā)明的框架代碼修改方法的原理圖。
[0020]圖3為本發(fā)明的原生代碼和擴展代碼的關系示意圖。
[0021]圖4為本發(fā)明的物理結構示意圖。
[0022]圖5為本發(fā)明中擴展代碼和原生代碼合并與重塑時的原理圖。
[0023]圖6為圖1中步驟S102 —實施例的具體流程圖。
[0024]圖7為圖1中步驟S102另一實施例的具體流程圖。
[0025]圖8為本發(fā)明基于Android系統(tǒng)的框架代碼修改裝置較佳實施例的結構框圖。
[0026]圖9為圖8所示裝置中編譯模塊一實施例的結構框圖。
[0027]圖10為圖8所示裝置中編譯模塊另一實施例的具體結構框圖。
【具體實施方式】
[0028]本發(fā)明提供一種基于Android系統(tǒng)的框架代碼修改方法及裝置,為使本發(fā)明的目的、技術方案及效果更加清楚、明確,以下對本發(fā)明進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0029]請參閱圖1,圖1為本發(fā)明一種基于Android系統(tǒng)的框架代碼修改方法較佳實施例的流程圖,如圖所示,其包括步驟:
5101、對Android框架代碼進行功能擴展時,解耦成擴展代碼和原生代碼,框架代碼的功能擴展寫在擴展代碼中,使擴展代碼和原生代碼分離;
5102、在進行編譯時,將原生代碼和擴展代碼進行代碼重組,使原生代碼和擴展代碼之間實現(xiàn)互訪,以及通過特定轉換將擴展代碼重塑為可供外部訪問的類對象。
[0030]在本實施例中,對Android框架代碼的修改,解親成Android原生代碼和擴展代碼兩部分,而這兩部分的聯(lián)系則是通過一個稱為Silica的手段實現(xiàn)(后文詳述),如圖2所示,本發(fā)明的代碼修改方式其是一種低耦合的代碼開發(fā)方式,較其他的代碼修改方式簡化了很多。
[0031]所述步驟SlOl中,解耦成擴展代碼時,擴展代碼的書寫規(guī)范需符合一定要求,擴展代碼是獨立于原生代碼的一個單獨類文件,即為一個特殊的類,其規(guī)范包括:
1、文件放置位置要求:放在易找到的位置,方便在系統(tǒng)編譯時找到該文件;
2、包名的要求:擴展代碼的包名與原生代碼的包名一致;
3、文件名的要求:擴展代碼的文件名包含有原生代碼的特定標識,其目的是為了在系統(tǒng)編譯時可識別出擴展代碼是某個原生代碼的一個擴展文件,比如原生類文件名為XXX.java,那么擴展類(擴展代碼)文件名為ExtXXX.java,以Ext開頭為標志(即特定標識)用于識別ExtXXX即為XXX的擴展文件,諸如此類的功能的都可以。
[0032]4、擴展文件構造器要求:擴展代碼中有一個參數(shù)為原生代碼的構造器,并且原生代碼的實例保存在擴展代碼中,有了原生代碼的實例,才能實現(xiàn)擴展代碼與原生代碼之間的溝通。
[0033]通過上述規(guī)范,擴展代碼與原生代碼之間的關系如圖3所示。
[0034]前面提到的Silica是一種與編譯時緊密結合的技術,在編譯時發(fā)揮效果,在Silica技術的影響下,原生代碼和擴展代碼不直接參與編譯,而是先把原生代碼和擴展代碼通過代碼重組(也稱吸附)成新的代碼參與到編譯中,然后再把擴展代碼通過特定轉換(也稱壓制成型)成新的代碼以供使用,其物理結構如圖4所示。
[0035]由于框架代碼的功能擴展已經按規(guī)范寫在了擴展代碼中,而圖4中的編譯時工序中吸附正是把原生代碼和擴展代碼結合起來,發(fā)揮作用,這樣就與在原生代碼中直接修改效果一樣,與此同時,也正好可以解決二者的訪問權限問題,吸附可以讓二者之間有相互的完全訪問的權限。經過吸附后,擴展代碼已經消失(即擴展代碼已經重組到原生代碼中),為了保證類對象的完整以及對外部代碼訪問的權限控制,編譯時還需要通過壓制成型將擴展代碼重塑為可供外部訪問的類對象,并且重塑后的類對象模型與擴展代碼的