久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

深入理解Android熱修復技術原理之資源熱修復技術

瀏覽:8日期:2022-09-17 16:39:42
目錄一、普遍的實現方式二、資源文件的格式三、運行時資源的解析四、另辟蹊徑的資源修復方案4.1、新增的資源及其導致 id 偏移4.2、內容發生改變的資源4.3、刪除了的資源4.4、對于type的影響五、更優雅地替換AssetManager六、本章小結一、普遍的實現方式

目前市面上的很多資源熱修復方案基本上都是參考了 Instant Run的實現。

簡要說來,Instant Run中的資源熱修復分為兩步:

1.構造一個新的 AssetManager,并通過反射調用 addAssetPath,把這個完 整的新資源包加入到AssetManager中。這樣就得到了一個含有所有新資源的 AssetManager。

2.找到所有之前引用到原有 AssetManager的地方,通過反射,把引用處替換 為 AssetManager。

一個 Android 進程只包含一個 ResTable, ResTable 的成員變量 mPackageGroups 就是所有解析過的資源包的集合。任何一個資源包中都含有 resources.arsc,它記錄了所有資源的id分配情況以及資源中的所有字符串。這些信息是以二進制方式存儲的。底層的AssetManager做的事就是解析這個文件,然后把相關信息存儲到 mPackageGroups 里面。

二、資源文件的格式

整個 resources.arse 文件,實際上是由一個個 ResChunk (以下簡稱 chunk) 拼接起來的。從文件頭開始,每個 chunk 的頭部都是一個 ResChunk_header結構,它指示了這個chunk的大小和數據類型。

深入理解Android熱修復技術原理之資源熱修復技術

通過ResChunk_header中的type成員,可以知道這個chunk是什么類型, 從而就可以知道應該如何解析這個chunko

解析完一個 chunk 后,從這個 chunk + size的位置開始,就可以得到下一個 chunk 起始位置,這樣就可以依次讀取完整個文件的數據內容。

一般來說,一個 resources.arsc 里面包含若干個package,不過默認情況下, 由打包工具aapt 打出來的包只有一個 package。這個 package里包含了 app中的 所有資源信息。

資源信息主要是指每個資源的名稱以及它對應的編號。我們知道,Android中的每個資源,都有它唯一的編號。編號是一個 32 位數字,用十六進制來表示就是0xPPTTEEEE。PP 為 package id, TT 為 type id, EEEE 為 entry id。

它們代表什么?在 resources.arse 里是以怎樣的方式記錄的呢?

對于 package id,每個 package 對應的是類型為 RES_TABLE_PACKAG E_ TYPE 的 ResTable_package 結構體,ResTable_package 結構體的 id 成員變量就表示它的 package id。 對于 type id,每個type對應的是類型為 RES_TABLE_TYPE_SPEC_ TYPE 的 ResTable_typeSpec 結構體。它的id成員變量就是type id。但是,該type id 具體對應什么類型,是需要到package chunk 里的 Type String Pool 中去解析得到的。比如 Type String Pool 中依次有 attr、 drawablex mipmap、layout 字符串。就表示 attr 類型的 type id 為 1, drawable 類型的 type id 為 2, mipmap 類型的 type id 為 3, layout 類型的type id 為 4。所以,每個 type id對應了 Type String Pool里的字符順序 所指定的類型。 對于 entry id,每個 entry表示一個資源項,資源項是按照排列的先后順序 自動被標機編號的。也就是說,一個type里按位置出現的第一個資源項,其 entry id 為0x0000,第二個為 0x0001,以此類推。因此我們是無法直接指定entry id的,只能夠根據排布順序決定。資源項之間是緊密排布的,沒有空隙,但是可以指定資源項為ResTable_type::NO_ENTRY來填入一個空資源。

舉個例子,我們隨便找個帶資源的 apk,用 aapt解析一下,看到其中的一行是:

$ aapt d resources app-debug.apk

 ......

 spec resource 0x7f040019 com.taobao.patch.demo:layout/activity_main: flags=0x00000000

 ......

這就表示,activity_main.xml 這個資源的編號是 0x7f040019。它的 package id 是 0x7f,資源類型的id為0x04, Type String Pool里的第四個字符串正是 layout 類型,而 0x04 類型的第 0x0019 個資源項就是 activity_main 這個資源。

三、運行時資源的解析

默認由 Android SDK 編出來的 apk,是由 aapt 具進行打包的,其資源包的 package id 就是 0x7f。

系統的資源包,也就是 framework-res.jar, package id 為 0x01。

在走到 app的第一行代碼之前,系統就已經幫我們構造好一個已經添加了安裝包資源的 AssetManager 了。

深入理解Android熱修復技術原理之資源熱修復技術

因此,這個 AssetManager里就已經包含了系統資源包以及 app的安裝包,就是 package id 為 0x01 的 framework-res.jar 中的資源和 package id 為 0x7f 的 app 安裝包資源。

如果此時直接在原有 AssetManager 上繼續 addAssetPath的完整補丁包的 話,由于補丁包里面的package id 也是 0x7f,就會使得同一個 package id的包被 加載兩次。這會有怎樣的問題呢?

在 Android L 之后,這是沒問題的,他會默默地把后來的包添加到之前的包的同—個 PackageGroup 下面。

而在解析的時候,會與之前的包比較同一個 type id所對應的類型,如果該類型 下的資源項數目和之前添加過的不一致,會打出一條warning log,但是仍舊加入到該類型的TypeList 中。

在獲取某個 Type的資源時,會從前往后遍歷,也就是說先得到原有安裝包里 的資源,除非后面的資源的config比前面的更詳細才會發生覆蓋。而對于同一個 config 而言,補丁中的資源就永遠無法生效了。所以在 Android L以上的版本,在原有AssetManager 上加入補丁包,是沒有任何作用的,補丁中的資源無法生效。

而在 Android 4.4 及以下版本,addAssetPath只是把補丁包的路徑添加到 了 mAssetPath中,而真正解析的資源包的邏輯是在app第一次執行 AssetManager::getResTable 的時候。

而在執行到加載補丁代碼的時候,getResTable已經執行過了無數次了。這是因為就算我們之前沒做過任何資源相關操作,Android framework里的代碼也會多 次調用到那里。所以,以后即使是addAssetPath,也只是添加到了 mAssetPath, 并不會發生解析。所以補丁包里面的資源是完全不生效的!

所以,像 Instant Run 這種方案,一定需要一個全新的 AssetManager時,然后再加入完整的新資源包,替換掉原有的AssetManager。

四、另辟蹊徑的資源修復方案

而一個好的資源熱修復方案是怎樣的呢?

首先,補丁包要足夠小,像直接下發完整的補丁包肯定是不行的,很占用空間。

而像有些方案,是先進行 bsdiff,對資源包做差量,然后下發差量包,在運行時 合成完整包再加載。這樣確實減小了包的體積,但是卻在運行時多了合成的操作,耗費了運行時間和內存。合成后的包也是完整的包,仍舊會占用磁盤空間。

而如果不采用類似 Instant Run 的方案,市面上許多實現,是自己修改aapt, 在打包時將補丁包資源進行重新編號。這樣就會涉及到修改 Android SDK工具包, 即不利于集成也無法很好地對將來的aapt 版本進行升級。

針對以上幾個問題,一個好的資源熱修復方案,既要保證補丁包足夠小,不在 運行時占用很多資源,又要不侵入打包流程。我們提出了一個目前市面上未曾實現 的方案。

簡單來說,我們構造了一個 package id 為 0x66的資源包,這個包里只包含改變了的資源項,然后直接在原有AssetManager 中 addAssetPath 這個包。然后就可以了。真的這么簡單?

沒錯!由于補丁包的 package id 為 0x66,不與目前已經加載的 0x7f沖突,因 此直接加入到已有的AssetManager中就可以直接使用了。補丁包里面的資源,只包含原有包里面沒有而新的包里面有的新增資源,以及原有內容發生了改變的資源。

而資源的改變包含增加、減少’ 修改這三種情況,我們分別是如何處理的呢?

對于新增資源,直接加入補丁包,然后新代碼里直接引用就可以了,沒什么好說的。 對于減少資源,我們只要不使用它就行了,因此不用考慮這種情況,它也不影響補丁包。 對于修改資源,比如替換了一張圖片之類的情況。我們把它視為新增資源, 在打入補丁的時候,代碼在引用處也會做相應修改,也就是直接把原來使用舊資源 id 的地方變為新 id。

用一張圖來說明補丁包的情況,是這樣的:

深入理解Android熱修復技術原理之資源熱修復技術

圖中綠線表示新增資源。紅線表示內容發生修改的資源。黑線表示內容沒有變 化,但是id 發生改變的資源。x 表示刪除了的資源。

4.1、新增的資源及其導致 id 偏移

可以看到,新的資源包與舊資源包相比,新增了 holo_grey 和 dropdn_item2 資源,新增的資源被加入到 patch中。并分配了 0x66 開頭的資源 id。

而新增的兩個資源導致了在它們所屬的 type 中跟在它們之后的資源 id發生了 位移。比如 holojight, id 由 0x7f020002 變為 0x7f020003,而 abc_dialog 由 0x7f030004 變為 0x7f030003。新資源插入的位置是隨機的,這與每次 aapt打包 時解析xml 的順序有關。發生位移的資源不會加入 patch,但是在 patch的代碼中會調整id 的引用處。

比如說在代碼里,我們是這么寫的

imageView.setImageResource(R.drawable.holo_light);

這個 R.drawable.holojight 是一個int 值,它的值是 aapt指定的,對于開發者 透明,即使點進去,也會直接跳到對應res/drawable/holo_light.jpg,無法查看。不過可以用反編譯工具,看到它的真實值是0x7f020002。所以這行代碼其實等價于:

imageView.setImageResource(0x7f020002);

而當打出了一個新包后,對開發者而言,holojight的圖片內容沒變,代碼引用處也沒變。但是新包里面,同樣是這句話,由于新資源的插入導致的id改變,對于 R.drawable.holojight 的引用已經變成了:

imageView.setImageResource(0x7f020003);

但實際上這種情況并不屬于資源改變,更不屬于代碼的改變,所以我們在對比新舊代碼之前,會把新包里面的這行代碼修正回原來的id。

imageView.setImageResource(0x7f020002);

然后再進行后續代碼的對比。這樣后續代碼對比時就不會檢測到發生了改變。

4.2、內容發生改變的資源

而對于內容發生改變的資源(類型為 layout 的 activity_main,這可能是我們修 改了 activity_main.xml 的文件內容。還有類型為 string 的 no,可能是我們修改了這個字符串的值),它們都會被加入到 patch 中,并重新編號為新 id。而相應的代碼,也會發生改變,比如,

setContentView(R.layout.activity_main);

實際上也就是

setContentView(0x7f030000);

在生成對比新舊代碼之前,我們會把新包里面的這行代碼變為

setContentView(0x6 6020000);

這樣,在進行代碼對比時,會使得這行代碼所在函數被檢測到發生了改變。于是相應的代碼修復會在運行時發生,這樣就引用到了正確的新內容資源。

4.3、刪除了的資源

對于刪除的資源,不會影響補丁包。

這很好理解,既然資源被刪除了,就說明新的代碼中也不會用到它,那資源放在那里沒人用,就相當于不存在了。

4.4、對于type的影響

可以看到,由于 type0x01 的所有資源項都沒有變化,所以整個 type0x01資源都沒有加入到patch 中。這也使得后面的 type 的 id 都往前移了一位。因此 Type String Pool 中的字符串也要進行修正,這樣才能使得 0x01 的 type 指向 drawable, 而不是原來的 attr。

所以我們可以看到,所謂簡單,指的是運行時應用patch變的簡單了。

而真正復雜的地方在于構造 patch 。我們需要把新舊兩個資源包解開,分別解析 其中的resources.arsc 文件,對比新舊的不同,并將它們重新打成帶有新 package id 的新資源包。這里補丁包指定的 package id 只要不是 0x7f 和 0x01就行,可以是 任意0x7f 以下的數字,我們默認把它指定為 0x66。

構造這樣的補丁資源包,需要對整個resources.arsc的結構十分了解,要對二 進制形式的一個一個chunk進行解析分類,然后再把補丁信息一個一個重新組裝成 二進制的chunk。這里面很多工作與 aapt做的類似,實際上開發打包工具的時候也是參考了很多aapt和系統加載資源的代碼。

五、更優雅地替換AssetManager

對于 Android L 以后的版本,直接在原有 AssetManager 上應用 patch就行 了。并且由于用的是原來的AssetManager,所以原先大量的反射修改替換操作就 完全不需要了,大大提高了加載補丁的效率。

但之前提到過,在 Android KK 和以下版本,addAssetPath是不會加載資源 的,必須重新構造一個新的AssetManager 并加入 patch,再換掉原來的。那么我們不就又要和Instant Run —樣,做一大堆兼容版本和反射替換的工作了嗎?

對于這種情況,我們也找到了更優雅的方式,不需要再如此地大費周章。

深入理解Android熱修復技術原理之資源熱修復技術

明顯,這個是用來銷毀 AssetManager并釋放資源的函數,我們來看看它具體做了什么吧。

深入理解Android熱修復技術原理之資源熱修復技術

可以看到,首先,它析構了 native 層的 AssetManager,然后把 java層的 AssetManager 對 native 層的 AssetManager 的引用設為空。

深入理解Android熱修復技術原理之資源熱修復技術

native 層的 AssetManager 析構函數會析構它的所有成員,這樣就會釋放之前加載了的資源。

而現在,java 層的 AssetManager 已經成為了空殼。我們就可以調用它的 init 方法,對它重新進行初始化了!

深入理解Android熱修復技術原理之資源熱修復技術

這同樣是個native方法,

深入理解Android熱修復技術原理之資源熱修復技術

這樣,在執行 init 的時候,會在 native層創建一個沒有添加過資源,并且 mResources 沒有初始化的的 AssetManager。然后我們再對它進行 addAssetPath,之后由于 mResource 沒有初始化過,就可以正常走到解析 mResources的邏輯,加載所有此時add進去的資源了 !

由于我們是直接對原有的 AssetManager進行析構和重構,所有原先對 AssetManager 對象的引用是沒有發生改變的,這樣,就不需要像 Instant Run那樣進行繁瑣的修改了。

順帶一提,類似 Instant Run 的完整替換資源的方案,在替換 AssetManager這一步,也可以采用我們這種方式進行替換,省時省力又省心。

六、本章小結

總結一下,相比于目前市面上的資源修復方式,我們提出的資源修復的優勢在于:

不侵入打包,直接對比新舊資源即可產生補丁資源包。(對比修改 aapt方式的 實現) 不必下發完整包,補丁包中只包含有變動的資源。(對比 Instanat Run,Amigo 等方式的實現) 不需要在運行時合成完整包。不占用運行時計算和內存資源。(對比 Tinker的 實現)

唯一有個需要注意的地方就是,因為對新的資源的引用是在新代碼中,所有資源修復是需要代碼修復的支持的。也因此所有資源修復方案必然是附帶代碼修復的。而 之前提到過,本方案在進行代碼修復前,會對資源引用處進行修正。而修正就是需要 找到舊的資源id,換成新的id。查找舊 id 時是直接對 int值進行替換,所以會找到 0x7f ?????? 這樣的需要替換 id。但是,如果有開發者使用到了 0x7f ??????這樣的數字,而它并非資源id,可是卻和需要替換的id數值相同,這就會導致這個數字 被錯誤地替換。

但這種情況是極為罕見的,因為很少會有人用到這樣特殊的數字,并且還需要碰巧這數字和資源id相等才行。即使出現,開發者也可以用拼接的方式繞過這類數字的產生。所以基本可以不用擔心這種情況,只是需要注意它的存在。

以上就是深入理解Android熱修復技術原理之資源熱修復技術的詳細內容,更多關于Android資源熱修復的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 国产亚洲综合一区二区 | 国产美女网站视频 | 91精品一区二区三区久久久久久 | 国产精品久久久爽爽爽麻豆色哟哟 | 69日影院| 久久91精品久久久久久9鸭 | 久久国产一区视频 | 亚洲精品aaa | 婷婷欧美| 国产精品久久久久久久久久东京 | 在线观看免费黄色 | 超碰在线国产 | 国产精品毛片一区二区在线看 | 日韩精品小视频 | 成人免费在线观看 | 欧美在线一区二区三区 | 一区二区日本 | 欧美在线a | 麻豆国产免费 | 亚洲欧美日韩在线 | 91中文在线观看 | 91精品国产综合久久久久久丝袜 | 亚洲精品成人在线 | 国产区视频在线观看 | 99热少妇 | 欧美黄色性视频 | 香蕉久久久久久 | 久久青| 99国内精品久久久久久久 | 欧美激情性国产欧美无遮挡 | 色8久久 | 国产成人精品一区二 | 久久视频在线看 | 久久99这里只有精品 | 正在播放亚洲 | 欧美日韩国产精品久久久久 | 日韩免费视频一区二区 | 欧美性影院 | 老司机福利在线视频 | 亚洲精品久久久久久动漫 | julia一区二区三区中文字幕 | 成人在线观看免费视频 | 欧美视频中文字幕 | 日韩一区二区观看 | 日本a v网站 | 国产精品入口久久 | 国产精品久久久久久久久久三级 | 国产精品成人一区二区 | 国产一区二区视频免费 | 久久亚洲一区二区 | 日本精品一区二区三区视频 | 色吊丝在线永久观看最新版本 | 国产免费看 | 狠狠做深爱婷婷综合一区 | 免费黄色av| 成人免费观看视频 | 久久99深爱久久99精品 | 国产成人久久精品一区二区三区 | 特一级毛片| 国产欧美综合一区二区三区 | 国内精品久久久久国产 | 午夜免费 | 国产超碰人人模人人爽人人添 | 国产精品久久久999 成人亚洲视频 | 亚洲综合国产 | 午夜一区二区三区在线观看 | 成人免费小视频 | 黄色片网站在线观看 | 精品久久久精品 | 成年人网站国产 | 99精品久久精品一区二区爱城 | 欧美一区二区三 | 成人高清视频在线观看 | 亚洲一区二区中文字幕 | 午夜一级片 | 久草成人 | 国产精品永久免费自在线观看 | 国产一级特黄aaa | 国产乱人伦av在线a jizz久久久 www.亚洲 | 亚洲精品国产偷自在线观看 | 中文字幕一页二页 | 一区不卡 | 亚洲视频综合 | 亚洲tv久久爽久久爽 | 久久人| 欧美一级淫片免费看 | 日韩视频精品 | 欧美色v| 精品久久久久久国产 | 91伦理片 | 免费在线色| 国产在线视频在线 | 91综合网 | av一区二区在线观看 | 欧美另类专区 | 91色站| 国产传媒在线 | 国产一区二区三区在线免费观看 | 日韩一区二区三区在线观看 | 亚洲人免费| 午夜精品久久久久久久久久久久久 | 欧美国产视频 | 欧美日韩在线免费观看 | 日韩电影一区二区三区 | 欧美激情一区二区三区在线视频 | 国产精品一区二区不卡 | 自拍视频在线播放 | 欧美日韩精品久久久 | 国产日韩欧美 | 在线干| 中文字幕一区二区三区在线视频 | 国产精品片aa在线观看 | 欧美一区在线视频 | 成人午夜免费视频 | 免费一二三区 | 手机看片亚洲 | 97国产精品视频人人做人人爱 | 爱草在线 | 日本在线视频观看 | 欧美黄视频在线观看 | 日韩三级在线免费观看 | 午夜精品久久久久久久久 | 亚洲视频中文字幕 | 日韩欧美一区二区在线观看视频 | 国产视频中文字幕 | 麻豆精品国产传媒 | 国产精品久久久久久吹潮 | 理论片免费在线观看 | 91视频国产区 | 玖玖精品 | 一区二区三区国产 | 中文字幕在线一区二区三区 | 国产精品毛片久久久久久久 | 中文字幕在线观看的电影 | 欧美精品第一页 | 国产精品国产成人国产三级 | 丁香婷婷在线 | 日韩欧美在线播放视频 | 日韩无在线 | 在线观看视频一区 | 精品久久久久久久人人人人传媒 | 精品久久网 | 国产午夜精品久久 | 综合伊人久久 | 欧美一级欧美三级在线观看 | 在线观看免费av网 | 在线免费成人 | 久久久久久综合 | 久久久久久成人 | 黄的视频网站 | 日韩电影一区二区三区 | 午夜精品福利一区二区三区蜜桃 | 亚洲精品日韩激情在线电影 | 日韩在线成人 | 欧美在线免费 | 免费av播放 | 国产午夜精品一区二区三区 | 一级做a毛片 | 欧美一区永久视频免费观看 | 91视频一88av| 亚洲电影中文字幕 | 日韩成人在线观看 | 不用播放器的免费av | 天堂中文在线视频 | 亚洲tv久久爽久久爽 | 日日夜夜一区二区 | 犬夜叉在线观看 | 亚洲国产成人精品女人 | 久草.com| 亚洲三区在线观看 | 国产日韩欧美精品一区二区三区 | 久久亚洲一区 | 在线免费观看一区 | 久久久精品网站 | 欧美视频一级片 | 激情福利视频 | 91精品久久久久久久久中文字幕 | 久久久国产一区二区三区 | 亚洲激情久久 | 精品免费视频 | 一区二区三区欧美在线 | 成人片在线播放 | 欧美福利网| 久久不色 | 久久久91| 狠狠爱天天干 | 日本一区二区高清视频 | 国产成人精品一区二区在线 | 国内精品一级毛片国产99 | 精品xxxx户外露出视频 | 人妖天堂狠狠ts人妖天堂狠狠 | 成人欧美一区二区三区黑人孕妇 | 亚洲视频在线观看 | 黄色激情网站 | 久久在线视频 | 午夜视频网站 | 密室大逃脱第六季大神版在线观看 | 国产一区二区精品丝袜 | 免费 视频 1级 | 91社区在线观看 | 一区影院 | 欧美成人黑人xx视频免费观看 | av大片在线观看 | 涩涩视频网站在线观看 | 亚洲一区二区三区日韩 | 欧美精品在欧美一区二区少妇 | 一区二区三区在线 | 成人国产精品久久久 | 综合二区 | 男女国产网站 | 99精品国产在热久久 | 黄色成人在线观看视频 | 欧美色综合天天久久综合精品 | 国产成人精品免高潮在线观看 | 久久精品一区二区三区四区毛片 | 1000部精品久久久久久久久 | 精品久久中文字幕 | 亚洲精品日韩精品 | 精品国产乱码久久久久久久软件 | 日韩国产二区 | 亚洲午夜在线 | 中文字幕1区 | 久久精品一区二区三区不卡牛牛 | 久久国内| av亚洲在线| 大黄网站在线观看 | 男人天堂中文字幕 | 午夜亚洲福利 | 天天爽天天操 | 日本亚洲最大的色成网站www | 亚洲网站在线观看 | 欧美寡妇偷汉性猛交 | 久久久久久a女人 | 蜜桃一区二区 | 国产欧美综合一区二区三区 | 黄色资源网站 | 一区二区免费 | 久久国产婷婷国产香蕉 | chinese中国真实乱对白 | 成人午夜精品久久久久久久3d | 色鲁97精品国产亚洲 | 一区二区精品在线观看 | 天天天天爽 | www.色涩涩.com网站 | 亚洲欧洲日韩在线 | 欧美色图亚洲自拍 | 另类五月天 | av一道本| 暖暖av| 亚洲日韩欧美一区二区在线 | 在线观看国产www | 日韩www| 久久综合网址 | 日韩欧美国产精品综合嫩v 高清av网站 | www国产精品 | 欧美一级黄色网 | 久久久香蕉 | 精品久久国产老人久久综合 | 天天操网| 男女午夜视频 | 欧美一级一区 | 精品av| 日韩精品久久久久 | 亚洲不卡视频 | 日韩av在线一区 | 精品国产91亚洲一区二区三区www | 午夜爽爽影院 | www.五月天婷婷 | 亚洲va中文字幕 | 美女国产网站 | 亚洲视频中文字幕 | 久久久精品一区二区 | 国产精品91久久久久 | 欧美精品一区二区三区在线四季 | 一区二区在线视频 | 在线免费观看日韩视频 | 一区二区三区精品 | 亚洲精品四区 | 天天干人人 | 久久精品黄 | 亚洲天堂一区二区 | 婷婷丁香五 | 在线欧美亚洲 | 午夜影院入口 | 狠狠艹 | 久久久精品网 | 免费黄色网址在线播放 | 日韩精品中文字幕在线播放 | 久久免费精品视频 | 国产一区二区在线看 | 少妇淫片aaaaa毛片叫床爽 | 久久精品国产99国产精品 | 久久久精品久久 | 国产精品一区二区不卡 | 天天久 | 亚洲日本精品视频 | 99热成人在线 | 一区二区视屏 | 久久精品久久久 | 国产精品久久久久久中文字 | 成人片免费看 | 欧美xxxx片 | 成人精品视频 | 国产精品久久久久久久一区探花 | 亚洲 成人 av | 亚洲一区二区三区在线 | 日韩中文字幕在线播放 | 中文字幕日韩欧美一区二区三区 | 欧美精品xx | 日韩一区二区三区四区五区 | 在线亚洲精品 | 精品久久久久久久久久久久 | 国产成人午夜 | 成人a级片在线观看 | 久久久久久毛片免费播放 | 狠狠插天天干 | 99热最新网站 | 亚洲欧洲一区二区 | 亚洲97 | 色天天综合久久久久综合片 | 精品国产乱码久久久久久1区2区 | 国产精品69毛片高清亚洲 | 欧美二区在线 | 亚洲视频精品一区 | 成人性视频在线 | 天天干天天躁 | 成人午夜激情 | 久操伊人 | 亚洲综合色自拍一区 | 国产精品毛片久久久久久 | 91高清在线 | 一区二区日韩视频 | 91视频免费看 | 亚洲一区二区 | 波多野结衣一二三区 | 中文字幕视频在线 | 亚洲国产高清在线 | 久久激情网站 | 欧美在线a | 久久久久女人精品毛片九一韩国 | av国产精品 | 欧美激情在线狂野欧美精品 | 久久精品亚洲精品 | 欧美成人二区 | 北条麻妃一区二区免费播放 | 日本福利视频网 | 激情综合五月 | 日本福利网站 | 色香蕉久久 | 福利视频一区 | 国产成人精品a视频一区www | 欧美成人激情 | 国产传媒毛片精品视频第一次 | 亚洲欧美日韩精品久久奇米色影视 | 国产精品久久久久久久久免费桃花 | 色婷婷av一区二区三区大白胸 | 亚洲一区在线日韩在线深爱 | 欧美日韩激情 | 日韩在线视频观看 | 一区二区免费视频观看 | 99综合在线 | 黄色一级视频 | 国产精品一区二区三区在线 | 香蕉久久久久久 | 国产综合精品 | 日韩国产欧美一区 | 日韩三区在线 | 在线亚州 | 午夜激情视频在线观看 | 国产精品成人在线观看 | 日本精品在线播放 | 91视频电影 | 欧美日本韩国一区二区三区 | 国产精品乱码一区二区三区 | 日日搞夜夜操 | 在线观看理论电影 | av不卡在线播放 | 久久久成人精品视频 | 成人黄色电影小说 | 国产欧美精品一区二区色综合 | 亚洲欧洲视频 | 久草在线免费福利资源 | 狠狠夜夜 | 一级片免费视频 | 91精品国产欧美一区二区 | 亚洲女人天堂av | 国产成人欧美一区二区三区的 | 日本三级做a全过程在线观看 | 久久久国产精品一区 | 国产精品一区久久久久 | 亚洲高清视频在线观看 | 中文字幕av一区 | 国产1区2区精品 | 一区二区三区在线 | 亚洲国产免费 | 成人欧美一区二区三区黑人孕妇 | 国产欧美日韩综合精品一区二区 | 伊人网在线视频 | 中文字幕av亚洲精品一部二部 | 欧美a在线| 3bmm在线观看视频免费 | 综合中文字幕 | 一级在线观看 | 色视频久久 | 日韩精品在线视频观看 | 蜜月aⅴ免费一区二区三区 99re在线视频 | 在线观看中文字幕 | av第一页| 精品久久久久久久久久久久久久久久久久 | 天天干天天曰天天操 | 欧美中文在线观看 | 日韩免费网站 | 涩涩视频在线看 | 999精品免费 | 欧洲一级毛片 | 精品av | 久色视频在线观看 | 欧美视频免费看 | 97成人在线| 欧美日韩国产在线观看 | 毛片站 | 91精品久久久久久久久久 | 成人欧美一区二区三区白人 | 一区二区三区日韩精品 | 日韩欧美中文在线 | 亚洲一区二区三区免费在线观看 | 久久av资源 | 精品99久久久久久 | 成人福利影院 | 成人午夜免费视频 | 91亚洲精品久久久 | 久久久影院 | 亚洲成人三级 | 99热在线播放 | 国产中文 | 精久久久 | 久久视频一区 | 在线永久免费观看日韩a | 在线色av| 天堂av中文| 毛片入口 | 午夜视频在线观看网站 | 久草美女 | 91亚洲日本aⅴ精品一区二区 | 女同理伦片在线观看禁男之园 | 一区在线看 | 亚洲精品久久久久久下一站 | 亚洲国产视频精品 | 国产精品视频免费播放 | 日本久久99| 欧美精品一区久久 | 亚洲久久在线 | 日韩久久久久久久久久久 | 91在线免费视频 | 精品久久影院 | 九色av| 成人国产精品一级毛片视频 | 日韩二区三区 | 美女视频一区 | 日韩综合一区二区 | 91高清视频在线观看 | 日韩成人在线播放 | 91tv亚洲精品香蕉国产一区 | 精品久久久久久久 | av在线精品 | 天天干天天看天天操 | 久久久999国产 | 91在线观看| 国产日韩欧美一区二区 | 欧美一级免费观看 | 国产视频大全 | 国产91久久精品一区二区 | 中文一区二区 | 精品一区不卡 | 欧美久久视频 | 日韩电影三级 | 久久久久女人精品毛片九一韩国 | 色天天综合久久久久综合片 | 夜夜天天| 日韩在线欧美 | 久久久久一区二区 | 午夜激情福利视频 | 亚洲精品一区中文字幕乱码 | 久久中文视频 | 久久五月视频 | 裸体的日本在线观看 | av看片网| 成人午夜在线视频 | 欧美在线观看一区 | 吴梦梦到粉丝家实战华中在线观看 | 偷派自拍 | a国产精品 | 午夜视频在线观看免费视频 | 亚洲看片网站 | 日韩视频一区二区三区在线观看 | 亚洲免费在线观看 | h在线视频| 欧美综合成人网 | 亚洲欧美视频 | 精品国产鲁一鲁一区二区三区 | 久久香蕉国产视频 | 伊人春色在线播放 | 国产乱a视频在线 | 久久99精品一区二区三区三区 | 免费精品 | 国产欧美精品一区二区 | 午夜精品一区二区三区在线视频 | 欧美午夜在线观看 | www.久久 | 成人一级视频在线观看 | 中文字幕日韩一区 | 一区二区三区在线观看视频 | 久久久久久亚洲国产 | 亚洲一区av| 在线日韩视频 | 久热中文字幕 | 久久精品亚洲精品国产欧美 | 欧美激情在线观看 | 一区二区免费播放 | 亚洲97视频 | 一级毛片免费网站 | www.久久精品 | 国产日韩精品视频 | 好姑娘影视在线观看高清 | 欧美综合在线观看 | 欧美在线综合视频 | 亚洲一级毛片 | 色黄视频在线观看 | 91免费视频 | 91精品国产欧美一区二区 | 黄色骚片 | 国产不卡免费视频 | 国产精品第一区 | 狠狠插天天干 | 99国产精品| 国产无套丰满白嫩对白 | 91在线精品一区二区 | 9uu在线观看 | 日日操天天爽 | 国产探花在线精品一区二区 | 五月婷婷综合激情 | 能在线观看的黄色网址 | 亚洲免费人成在线视频观看 | 黄色一级免费观看 | 中文字幕在线电影观看 | 亚洲国产高清高潮精品美女 | 一区二区三区av | 国产一区二区日韩 | 国产精品一任线免费观看 | 毛片黄色 | 91在线精品视频 | 蜜桃av一区二区三区 | 99视频精品 | 国产传媒毛片精品视频第一次 | 国产色 | 欧美日本国产欧美日本韩国99 | 欧美日韩在线视频观看 | 精品999www | 欧美日韩中文在线 | 欧美另类一区二区 | 欧美福利影院 | 精品一区二区av | 国产一区二区精品在线 | japan23xxxxhd乱| 日韩欧美国产成人一区二区 | 亚洲天堂一区二区 | 国产精品一区av | 91久久精品国产亚洲a∨麻豆 | 蜜桃精品久久久久久久免费影院 | 欧美1区 | 成人免费在线观看网址 | 日本免费电影一区 | 成人午夜精品 | 北条麻妃99精品青青久久 | 91久久夜色精品国产九色 | 日韩在线不卡 | 午夜视频福利在线观看 | 成人午夜精品久久久久久久蜜臀 | 一区二区久久 | 欧美综合一区二区 | 亚洲电影一区二区三区 | 人人操日日干 | 亚洲一区电影 | 亚洲精品久久久一区二区三区 | 久久精品国产99国产 | www.亚洲一区 | 欧美成人精品一区 | 综合二区 | 国产精品毛片久久久久久久 | 日日夜夜精品网站 | 精品国产乱码一区二区三区a | 精品一区二区三区在线观看 | 欧美黄色大片网站 | 成人av网址在线观看 | 精品国产污网站污在线观看15 | 久久福利电影 | 国产一级纯肉体一级毛片 | 玖玖色资源| 久久久国产一区 | 国产一区二区精品在线观看 | 嫩草视频在线观看免费 | 国产精品成人一区二区 | 久色成人 | 9191视频| 成年网站视频 | 亚州中文字幕蜜桃视频 | 中文字幕在线第一页 | 亚洲成人免费影院 | 婷婷激情五月 | 日韩爽妇网| av免费网站在线观看 | 夜夜撸av | 日韩成人免费 | 看片久久 | 伊人超碰|