欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

熱更新方法及裝置與流程

文檔序號:11261843閱讀:165來源:國知局
熱更新方法及裝置與流程

本申請實施例涉及計算機技術,尤其涉及一種熱更新方法及裝置。



背景技術:

隨著互聯(lián)網(wǎng)的發(fā)展,應用程序(application,app)等的種類和數(shù)量越來越多。開發(fā)人員通過開發(fā)各種app來滿足用戶的需求。

app被開發(fā)出來后,不可避免的需要更新。更新時,廠商到服務器發(fā)布新版本的app,用新版本的app覆蓋舊版本的app,用戶卸載本地舊版本的app,并到服務器下載新版本的app,對廠商和用戶來說,該更新過程及其復雜且成本太高。

因此,如何對app進行更新,實為業(yè)界亟待解決的問題。



技術實現(xiàn)要素:

本申請實施例提供一種熱更新方法及裝置,通過對應用程序進行熱更新,實現(xiàn)降低更新應用程序復雜度及成本的目的。

第一方面,本申請實施例提供一種熱更新方法,包括:

根據(jù)第一壓縮文件獲取第一應用程序的第一類列表,所述第一類列表包含所述第一應用程序中的第一類的第一類名與第一類屬性的第一映射關系;

根據(jù)第二壓縮文件獲取第二應用程序的第二類列表,所述第二類列表包含所述第二應用程序中的第二類的第二類名與第二類屬性的第二映射關系;

根據(jù)所述第一映射關系與所述第二映射關系,確定修復類,所述修復類為第一類名與第二類相同、第一類屬性與第二類屬性不同的類;

根據(jù)所述修復類更新所述第一應用程序。

在一種可行的設計中,所述根據(jù)所述修復類更新所述第一應用程序,包括:

將所述修復類封裝成修復dex文件;

將所述修復dex文件放置在路徑列表的首位,所述路徑列表包含所述第一應用程序的第一類對應的dex文件。

在一種可行的設計中,所述將所述dex文件放置在路徑列表的首位之后,還包括:

生成所述修復dex文件的屬性;

將所述dex文件的屬性寫入第一文件,并用私鑰加密所述第一文件;

將用私鑰加密后的第一文件寫入第二文件;

根據(jù)所述修復dex文件、所述第一文件與所述第二文件生成補丁文件。

在一種可行的設計中,所述根據(jù)所述修復dex文件、所述第一文件與所述第二文件生成補丁文件之后,還包括:

發(fā)布所述補丁文件,以使得客戶端對所述補丁文件進行完整性校驗和身份校驗。

在一種可行的設計中,所述根據(jù)所述第一映射關系與所述第二映射關系,確定修復類之前,還包括:

采用映射mapping文件混淆所述第一類;

采用所述mapping文件混淆所述第二類,所述第一類的第一類名和所述第二類的第二類名相同。

在一種可行的設計中,所述采用映射mapping文件混淆所述第一類之前,還包括:

判斷是否存在所述mapping文件;

若不存在,則構建所述mapping文件。

在一種可行的設計中,所述第一類屬性為所述第一類的消息摘要算法md5值,所述第二類屬性為所述第二類的消息摘要算法md5值。

第二方面,本申請實施例提供一種熱更新裝置,包括:

第一獲取模塊,用于根據(jù)第一壓縮文件獲取第一應用程序的第一類列表,所述第一類列表包含所述第一應用程序中的第一類的第一類名與第一類屬性的第一映射關系;

第二獲取模塊,用于根據(jù)第二壓縮文件獲取第二應用程序的第二類列表,所述第二類列表包含所述第二應用程序中的第二類的第二類名與第二類屬性的第二映射關系;

確定模塊,用于根據(jù)所述第一映射關系與所述第二映射關系,確定修復類,所述修復類為第一類名與第二類相同、第一類屬性與第二類屬性不同的類;

修復模塊,用于根據(jù)所述修復類更新所述第一應用程序。

在一種可行的設計中,所述修復模塊,具體用于將所述修復類封裝成修復dex文件;將所述修復dex文件放置在路徑列表的首位,所述路徑列表包含所述第一應用程序的第一類對應的dex文件。

在一種可行的設計中,上述的裝置還包括:

加密模塊,用于在所述修復模塊將所述dex文件放置在路徑列表的首位之后,生成所述修復dex文件的屬性;將所述dex文件的屬性寫入第一文件,并用私鑰加密所述第一文件;將用私鑰加密后的第一文件寫入第二文件;根據(jù)所述修復dex文件、所述第一文件與所述第二文件生成補丁文件。

在一種可行的設計中,上述的裝置還包括:

發(fā)布模塊,用于在所述加密模塊根據(jù)所述修復dex文件、所述第一文件與所述第二文件生成補丁文件之后,發(fā)布所述補丁文件,以使得客戶端對所述補丁文件進行完整性校驗和身份校驗。

在一種可行的設計中,上述的裝置還包括:

混淆模塊,用于在所述確定模塊根據(jù)所述第一映射關系與所述第二映射關系,確定修復類之前,采用映射mapping文件混淆所述第一類;采用所述mapping文件混淆所述第二類,所述第一類的第一類名和所述第二類的第二類名相同。

在一種可行的設計中,所述混淆模塊在采用映射mapping文件混淆所述第一類之前,還用于判斷是否存在所述mapping文件;若不存在,則構建所述mapping文件。

在一種可行的設計中,所述第一類屬性為所述第一類的消息摘要算法md5值,所述第二類屬性為所述第二類的消息摘要算法md5值。

本申請實施例提供的熱更新方法及裝置,根據(jù)第一壓縮文件獲取第一應用程序的第一類列表,第一類列表包含第一應用程序中的第一類的第一類名與第一類屬性的第一映射關系;根據(jù)第二壓縮文件獲取第二應用程序的第二類列表,第二類列表包含第二應用程序中的第二類的第二類名與第二類屬性的第二映射關系;根據(jù)第一映射關系與第二映射關系,確定修復類,修復類為第一類名與第二類相同、第一類屬性與第二類屬性不同的類;根據(jù)修復類更新第一應用程序。該過程中,通過對應用程序進行熱更新,實現(xiàn)降低更新應用程序復雜度及成本的目的。

附圖說明

圖1為本申請熱更新方法實施例一的流程圖;

圖2為本申請熱更新方法所適用的類加載的示意圖;

圖3為本申請熱更新方法中dex文件的生成過程示意圖;

圖4為本申請熱更新方法中修復dex文件的生成過程示意圖;

圖5a為本申請熱更新方法中的加密過程示意圖;

圖5b為本申請熱更新方法中的解密過程示意圖;

圖6為本申請熱更新裝置實施例一的結構示意圖;

圖7為本申請熱更新裝置實施例二的結構示意圖。

具體實施方式

為使本申請實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本申請實施例中的附圖,對本申請實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領域技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。以下內容為結合附圖及較佳實施例,對依據(jù)本申請申請的具體實施方式、結構、特征及其功效的詳細說明。

本申請的說明書和權利要求書及上述附圖中的術語“第一”、“第二”、“第三”、“第四”等(如果存在)是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應該理解這樣使用的數(shù)據(jù)在適當情況下可以互換,以便這里描述的本申請的實施例例如能夠以除了在這里圖示或描述的那些以外的順序實施。此外,術語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或對于這些過程、方法、產(chǎn)品或設備固有的其它步驟或單元。

通常來說,移動互聯(lián)網(wǎng)行業(yè)應用程序可分為兩種,一種是基于本地操作系統(tǒng),如ios或android操作系統(tǒng)運行的app,稱之為nativeapp;一種是基于智能終端的瀏覽器運行的webapp。對于nativeapp來說,開發(fā)人員可以基于操作系統(tǒng)平臺開發(fā)代碼以進行app的開發(fā);或者,在app內直接引入由前端開發(fā)人員提供的html5頁面。app被開發(fā)出來后,不可避免的需要更新。更新時,廠商到服務器發(fā)布新版本的app,用新版本的app覆蓋舊版本的app,用戶卸載本地舊版本的app,并到服務器下載新版本的app,對廠商和用戶來說,該更新過程及其復雜且成本太高。因此,如何對app進行更新,實為業(yè)界亟待解決的問題

有鑒于此,本申請實施例提供一種熱更新方法及裝置,通過對應用程序進行熱更新,實現(xiàn)降低更新應用程序復雜度及成本的目的。

圖1為本申請熱更新方法實施例一的流程圖,包括:

101、根據(jù)第一壓縮文件獲取第一應用程序的第一類列表,所述第一類列表包含所述第一應用程序中的第一類的第一類名與第一類屬性的第一映射關系。

本申請實施例中,一個應用程序包括多個類(class),熱更新的基礎元素是類,即用修復類替換有問題(bug)的類,以下將待更新的應用程序稱之為第一應用程序,將第一應用程序包含的類稱之為第一類,將對第一應用程序包含的多個第一類進行壓縮得到的文件稱之為第一壓縮文件,將第一類的名稱稱之為第一類名;將對第一應用程序中的第一類進行修復得到的應用程序稱之為第二應用程序,將第二應用程序包含的類稱之為第二類,將對第二應用程序包含的多個第二類進行壓縮得到的文件稱之為第二壓縮文件,將第二類的名稱稱之為第二類名。

本步驟中,在根據(jù)第一應用程序獲得第一壓縮文件后,根據(jù)該第一壓縮文件,獲取第一類列表,第一類列表中包含第一應用程序中的第一類的第一類名與第一類屬性的第一映射關系。其中,第一類屬性例如為第一類的消息摘要算法((message-digestalgorithm,md)5值。也就是說,第一應用程序中的每個第一類具有第一類名和相應的md5值。

102、根據(jù)第二壓縮文件獲取第二應用程序的第二類列表,所述第二類列表包含所述第二應用程序中的第二類的第二類名與第二類屬性的第二映射關系。

本步驟中,在根據(jù)第二應用程序獲得第二壓縮文件后,根據(jù)該第二壓縮文件,獲取第二類列表,第二類列表中包含第二應用程序中的第二類的第二類名與第二類屬性的第二映射關系。其中,第二類屬性例如為第二類的md5值。也就是說,第二應用程序中的每個第二類具有第二類名和相應的md5值。

103、根據(jù)所述第一映射關系與所述第二映射關系,確定修復類,所述修復類為第一類名與第二類相同、第一類屬性與第二類屬性不同的類。

本步驟中,對第一類列表和第二類列表進行比對,確定出第一類名與第二類名相同,但第一類屬性和第二類屬性不同的類。例如,第一應用程序包含的第一類分別為a.class、b.class、c.class,第一類名分別為a、b、c,md5值分別為a、b、c;第二應用程序包含的第二類分別為a1.class、b1.class、c1.class,第二類名分別為a1、b1、c1,md5值分別為a1、b1、c1,若a=a1,b=b1,c≠c1,a≠a1,b≠b1,c≠c1,則修復類為a1.class、b1.class。其中,a1.class是對a.class進行修復得到的,b1.class是對b.class進行修復得到的。

104、根據(jù)所述修復類更新所述第一應用程序。

在得到修復類后,根據(jù)修復類對第一應用程序進行更新。例如,第一應用程序已被終端下載到本地,則服務器只需要將修復類進行處理并發(fā)送給終端,終端根據(jù)該修復類對第一應用程序進行更新,更新過程中,無需關閉第一應用程序,而是在線對第一應用程序進行更新,即實現(xiàn)熱更新。

本申請實施例提供的熱更新方法,根據(jù)第一壓縮文件獲取第一應用程序的第一類列表,第一類列表包含第一應用程序中的第一類的第一類名與第一類屬性的第一映射關系;根據(jù)第二壓縮文件獲取第二應用程序的第二類列表,第二類列表包含第二應用程序中的第二類的第二類名與第二類屬性的第二映射關系;根據(jù)第一映射關系與第二映射關系,確定修復類,修復類為第一類名與第二類相同、第一類屬性與第二類屬性不同的類;根據(jù)修復類更新第一應用程序。該過程中,通過對應用程序進行熱更新,實現(xiàn)降低更新應用程序復雜度及成本的目的。

為了更清楚的描述本申請實施例所述的熱更新方法,下面,先對類的加載過程進行詳細描述。

具體的,基于類加載(classloader)進行熱更新,類加載將類的加載任務委托給路徑列表(pathlist),路徑列表是dexpathlist類型的。通過dexpathlist類型的路徑列表進行類加載時,循環(huán)遍歷元素(element),從元素中確定出要加載的類。元素實質上是dex文件的一個封裝,每一個dex文件對應一個element,而每一個dex是根據(jù)至少一個類的壓縮文件得到的。本申請實施例中,將修復類類封裝成修復dex文件,將該修復dex文件放置在路徑列表的首位,路徑列表包括所述第一應用程序的第一類對應的dex文件。然后,進行類加載時,首先加載的是修復類。而且,同名的類只會被加載一次,當修復類和有bug的類的名稱相同時,由于之前已經(jīng)加載過修復類,因此不會再加載有bug的類。具體的,可參見圖2,圖2為本申請熱更新方法所適用的類加載的示意圖。

請參照圖2,路徑列表中有兩個類,名稱均為wb.class,而該兩個類的屬性不同,即md5值不同,第一個wb.class被封裝到class.dex中,第二個wb.class被封裝到class1.dex中。由于加載時,對于同一個名稱僅加載一次,因此,僅加載首位的wb.class,不加載第二個wb.class。

由上述可知:類被封裝在dex文件中。下面,對如何生成dex文件進行詳細說明。具體的,可參見圖3,圖3為本申請熱更新方法中dex文件的生成過程示意圖。

請參照圖3,原始的代碼文件,如“.java文件”通過編譯生成類文件,即“.class文件”,類文件經(jīng)過打包得到壓縮文件,即“.jar文件”,最后,dx命令將壓縮文件生成能夠被虛擬機,如dalvik識別的dex文件。

圖3展示了一個dex文件的生成過程。根據(jù)圖3可知,對修復類執(zhí)行如圖3所示的各個步驟,即可得到修復dex文件。若通過手動執(zhí)行圖3所示的步驟,則生成修復dex文件的過程復雜、成本高。因此,本申請實施例中,智能的生成修復dex文件。

本申請實施例中,更新前,對所有的class(第一類)文件進行打包生成壓縮文件,即生成第一壓縮文件;更新后,對所有的class(第二類)文件打包生成第二壓縮文件。根據(jù)第一壓縮文件和第二壓縮文件得到不同的dex文件。該過程中,第一壓縮文件是所有第一類的壓縮文件,第二壓縮文件是所有第二類的壓縮文件?;诖丝芍嚎梢愿鶕?jù)第一壓縮文件和第二壓縮文件,確定出修復類,然后將修復類進行打包生成修復壓縮文件并進一步的生成修復dex文件。具體的,可參見圖4,圖4為本申請熱更新方法中修復dex文件的生成過程示意圖。

請參照圖4,在對第一應用程序生成dex文件之前,解壓縮第一壓縮文件,獲得第一類列表,同理,在對第二應用程序生成dex文件之前,解壓縮第二壓縮文件,獲得第二類列表,第一類列表包含第一應用程序中的第一類的第一類名與第一類屬性的第一映射關系,第二類列表包含第二應用程序中的第二類的第二類名與第二類屬性的第二映射關系。之后,根據(jù)第一映射關系與第二映射關系確定出修復類,即第一類名與第二類相同、第一類屬性與第二類屬性不同的類;然后,將修復類進行打包生成修復壓縮文件并進一步的生成修復dex文件。

可選的,在本申請一示例中,根據(jù)所述第一映射關系與所述第二映射關系,確定修復類之前,還采用映射mapping文件混淆所述第一類;采用所述mapping文件混淆所述第二類,所述第一類的第一類名和所述第二類的第二類名相同。

具體的,兩次混淆過程中,若同一個類采用不同的mapping文件混淆,則兩次混淆的情況下生成混淆后的類是不同的。此時,即使后面一次混淆過程中類并未發(fā)生修改,則該類依舊被作為修復類,最終封裝成修改dex文件。為了避免該問題的發(fā)生,本申請實施例中,對于類名相同的第一類和第二類,采用同一個mapping文件混淆第一類,若第二類為發(fā)生修改,采用該相同的mapping文件混淆第二類,則不會發(fā)生由于mapping文件不同導致的將第二類作為修復類的問題。若第二類發(fā)生修改,由于第二類的第二屬性與第一類的第一屬性不同,則認為第二類為修復類。

基于上述,混淆過程中,需要維護mapping文件。維護過程中,對于一個具體的類,需要用到mapping文件時,若文件傳輸協(xié)議(filetransferprotocol,ftp)服務器上有mapping,則先從ftp服務器下載mapping文件,若沒有,則生成mapping文件,混淆后上傳到ftp服務器。

可選的,在本申請一示例中,將所述dex文件放置在路徑列表的首位之后,還生成所述修復dex文件的屬性;將所述dex文件的屬性寫入第一文件,并用私鑰加密所述第一文件;將用私鑰加密后的第一文件寫入第二文件;根據(jù)所述修復dex文件、所述第一文件與所述第二文件生成補丁文件。進一步的,根據(jù)所述修復dex文件、所述第一文件與所述第二文件生成補丁文件之后,還發(fā)布所述補丁文件,以使得客戶端對所述補丁文件進行完整性校驗和身份校驗。

具體的,由于java語言本身容易被反編譯的特征,若修復類被攔截,并返回一個不同安全的補丁文件,則會發(fā)生安全問題。為避免修復類對應的修復dex文件被第三方攔截且給客戶返回不安全的補丁文件,需要客戶端在收到補丁文件后自動舍棄該補丁文件。本申請實施例中,生成公鑰和私鑰,例如通過安卓安裝包(androidpackage,apk)生成公鑰和私鑰,利用非對稱加密算法對補丁文件進行身份校驗和完整性校驗。具體的,可參見圖5a與圖5b,圖5a為本申請熱更新方法中的加密過程示意圖,圖5b為本申請熱更新方法中的解密過程示意圖。

請參照圖5a,加密過程中,基于修復類得到修復dex文件,按照二進制流生成修復dex文件的屬性,如修復dex文件的md5值,將修復dex文件和md5值寫入第一文件,該第一文件例如為sign.mf文件,采用私鑰對第一文件進行加密得到,將加密后的內容寫入第二文件,第二文件例如為sign.rsa。然后,根據(jù)修復dex文件、第一文件與第二文件生成補丁文件,該補丁文件為一個加密補丁文件。

請參照圖5b,客戶端在得到加密的補丁文件后,解壓縮該補丁文件,得到修復dex文件、第一文件與第二文件,根據(jù)修復dex文件、第一文件與第二文件生成補丁文件進行完整性校驗和身份校驗。具體的,包括如下步驟:

201、獲取補丁文件。

202、解壓縮該補丁文件,得到修復dex文件、第一文件與第二文件。

203、比對基于修復dex文件生成的md5值與第一文件中寫入的md5值進行比對,若一致,則執(zhí)行204;若不一致,則執(zhí)行206。

該步驟為完整性校驗過程,該過程中,對基于修復dex文件生成的md5值與第一文件中寫入的md5值進行比對,若兩者一直,則證明該補丁文件是完整的,執(zhí)行步驟204;若兩者不一致,則證明該補丁文件是不完整的,執(zhí)行。

204、用公鑰解密第二文件,得到第一文件,比對公鑰解密得到的第一文件和根據(jù)補丁文件得到的第一文件,若兩者一致,則執(zhí)行205;若不一致,則執(zhí)行206。

205、采用該補丁文件對第一應用程序進行熱更新。

206、舍棄補丁文件。

該步驟為身份校驗過程,該過程中,比對根據(jù)公鑰解密得到的第一文件和根據(jù)補丁文件得到的第一文件,若兩者一直,則說明補丁文件的身份是合法的,身份校驗通過,客戶端認為該補丁文件為可靠的補丁文件,采用該補丁文件對第一應用程序進行熱更新,若身份校驗未通過,則提醒客戶端自動舍棄該補丁文件。

根據(jù)圖5b可知:只有在完整性校驗和身份校驗均通過的情況下,客戶端才根據(jù)補丁文件對第一應用程序進行熱更新,若完整性校驗和身份校驗中的任意一個不通過,則舍棄該補丁文件。

需要說明的是,雖然圖5b中是先執(zhí)行203再執(zhí)行204,即先進行完整性校驗再進行身份校驗,然而,本申請實施例并不以此為限制,在其他可行的實現(xiàn)方式中,也可以先進行身份校驗,再進行完整性校驗。

圖6為本申請熱更新裝置實施例一的結構示意圖,包括:

第一獲取模塊11,用于根據(jù)第一壓縮文件獲取第一應用程序的第一類列表,所述第一類列表包含所述第一應用程序中的第一類的第一類名與第一類屬性的第一映射關系;

第二獲取模塊12,用于根據(jù)第二壓縮文件獲取第二應用程序的第二類列表,所述第二類列表包含所述第二應用程序中的第二類的第二類名與第二類屬性的第二映射關系;

確定模塊13,用于根據(jù)所述第一映射關系與所述第二映射關系,確定修復類,所述修復類為第一類名與第二類相同、第一類屬性與第二類屬性不同的類;

修復模塊14,用于根據(jù)所述修復類更新所述第一應用程序。

本申請實施例提供的熱更新裝置,根據(jù)第一壓縮文件獲取第一應用程序的第一類列表,第一類列表包含第一應用程序中的第一類的第一類名與第一類屬性的第一映射關系;根據(jù)第二壓縮文件獲取第二應用程序的第二類列表,第二類列表包含第二應用程序中的第二類的第二類名與第二類屬性的第二映射關系;根據(jù)第一映射關系與第二映射關系,確定修復類,修復類為第一類名與第二類相同、第一類屬性與第二類屬性不同的類;根據(jù)修復類更新第一應用程序。該過程中,通過對應用程序進行熱更新,實現(xiàn)降低更新應用程序復雜度及成本的目的。

可選的,在本申請一實施例中,所述修復模塊14,具體用于將所述修復類封裝成修復dex文件;將所述修復dex文件放置在路徑列表的首位,所述路徑列表包含所述第一應用程序的第一類對應的dex文件。

圖7為本申請熱更新裝置實施例二的結構示意圖,請參照圖7,本申請實施例提供的熱更新裝置,在上述圖6的基礎上,進一步的,還包括:

加密模塊15,用于在所述修復模塊14將所述dex文件放置在路徑列表的首位之后,生成所述修復dex文件的屬性;將所述dex文件的屬性寫入第一文件,并用私鑰加密所述第一文件;將用私鑰加密后的第一文件寫入第二文件;根據(jù)所述修復dex文件、所述第一文件與所述第二文件生成補丁文件。

再請參照圖7,上述的熱更新裝置還包括:

發(fā)布模塊16,用于在所述加密模塊15根據(jù)所述修復dex文件、所述第一文件與所述第二文件生成補丁文件之后,發(fā)布所述補丁文件,以使得客戶端對所述補丁文件進行完整性校驗和身份校驗。

再請參照圖7,上述的熱更新裝置還包括:

混淆模塊17,用于在所述確定模塊13根據(jù)所述第一映射關系與所述第二映射關系,確定修復類之前,采用映射mapping文件混淆所述第一類;采用所述mapping文件混淆所述第二類,所述第一類的第一類名和所述第二類的第二類名相同。

可選的,在本申請一實施例中,所述混淆模塊17在采用映射mapping文件混淆所述第一類之前,還用于判斷是否存在所述mapping文件;若不存在,則構建所述mapping文件。

可選的,在本申請一實施例中,所述第一類屬性為所述第一類的消息摘要算法md5值,所述第二類屬性為所述第二類的消息摘要算法md5值。

本領域普通技術人員可以理解:實現(xiàn)上述各方法實施例的全部或部分步驟可以通過程序指令相關的硬件來完成。前述的程序可以存儲于一計算機可讀取存儲介質中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質包括:rom、ram、磁碟或者光盤等各種可以存儲程序代碼的介質。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
焦作市| 尤溪县| 宁海县| 木里| 屯昌县| 屏东市| 无为县| 钟山县| 贺兰县| 广州市| 孟州市| 武强县| 马山县| 雷山县| 班玛县| 永平县| 甘洛县| 祁连县| 江孜县| 乐清市| 济南市| 威远县| 新巴尔虎左旗| 双峰县| 万荣县| 茂名市| 沛县| 石台县| 清水河县| 洱源县| 紫金县| 赞皇县| 磴口县| 三都| 莱州市| 邢台县| 新昌县| 海南省| 巴东县| 宝清县| 庆安县|