国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

iOS Pod 構(gòu)建緩存方案

共 6100字,需瀏覽 13分鐘

 ·

2021-07-07 17:30

本文由作者 猶落 授權(quán)轉(zhuǎn)載

猶落,公眾號:零行代碼iOS Pod 構(gòu)建緩存方案

前言

上周 SwiftGG 在北京舉辦了一場技術(shù)沙龍[1],其中字節(jié)跳動的《動態(tài)化研發(fā)模式-ARK》和滴滴的《使用 Xcode Cache 為構(gòu)建打包提速》,都表達了對研發(fā)效率的探索和分享。

我當然沒有參加,只是今天無意中拿到了相關(guān)文檔,其中一份PPT使用 Xcode Cache 為構(gòu)建打包提速》(下文簡稱PPT),初衷與我兩年前的方案一致,都是使用源碼編譯緩存手段,避免Pod二進制可能的運行時問題,同時加速構(gòu)建。

PPT的細節(jié)不盡詳述,我的理解是通過各種手段,將Xcode的編譯緩存目錄復(fù)用,使得構(gòu)建打包的增量編譯效果與本機開發(fā)的一致。

而我的這個Pod緩存方案,基于MD5自己實現(xiàn)了一套緩存策略,達到增量編譯的效果。

那就借此機會,重新整理一下吧。圖為我兩年前發(fā)布在公司內(nèi)網(wǎng)的文章《iOS工程自動化緩存實現(xiàn)極速構(gòu)建》。

目標

最初的目標,是減少CI構(gòu)建機上的 iOS App 構(gòu)建時間,以提高測試階段多次提交多次交付的效率。至于開發(fā)者機器上的編譯耗時,暫時不在這里的討論范圍。

iOS App 是典型的 CocoaPods 工程,包括 GitHub 庫、公司私有庫以及本地組件化的 Development Pods

為什么不使用Pod二進制

最重要的原因是人力成本,包括上百個私有庫的獨立倉庫、獨立構(gòu)建、版本號維護和集成,這些都比較繁瑣,而且難以完全自動化(盡管可以部分自動化)。

另一個不能忽視的原因在于編譯依賴與運行依賴的不一致性,導(dǎo)致的 Pod 二進制運行問題。

我以前舉了個編譯宏的例子,假如AAA的宏發(fā)生變化,但BBB沒有重新編譯,這時實際運行結(jié)果就會不符合預(yù)期。

PPT 中舉的例子也很直觀。B的方法發(fā)生變化,但A二進制沒有重新編譯,雖然編譯鏈接通過,但運行起來 PodA 就會因為unrecognized selector發(fā)生崩潰。

截圖來源PPT

這個問題,在組件二進制推進比較完善的美團,在文章中《美團外賣iOS多端復(fù)用的推動、支撐與思考[2]》中也有提及

這里有一個問題需要解決,即引用二進制帶來的弊端,顯而易見的就是將編譯期的問題帶到了運行期。某個宏修改了,但是編譯完的二進制代碼不感知這種改動,并且依賴版本不匹配的話,原本的方法缺失編譯錯誤,就會帶到運行期發(fā)生崩潰。解決此類問題的方法也很簡單,就是在所有的打包工程中都配置了打包自動切換源碼。二進制僅僅用來在開發(fā)中獲得更高的效率,一旦打提測包或者發(fā)布包都會使用全源碼重新編譯一遍。

但不可否認,大型App的全源碼重新編譯耗時實在嚴重影響研發(fā)效率。

思路

最快的編譯是不編譯。

盡管迭代了多個版本,但思路沒變。在編譯前后增加腳本,由全量編譯改為增量編譯。

每次構(gòu)建在pod update之后、開始編譯之前,根據(jù)編譯組件產(chǎn)物所需的源文件、編譯參數(shù)、依賴文件信息,生成一個MD5,根據(jù)這個MD5查詢緩存產(chǎn)物,以決定是復(fù)用緩存還是重編譯。這個思路來源于 Xcode的編譯過程,同時也是受開源的ccache啟發(fā),但ccache的并發(fā)性能、兼容性、穩(wěn)定性在實測中并沒有達到預(yù)期。

方案

目前的方案已經(jīng)在幾個app項目穩(wěn)定構(gòu)建運行一段時間了,包括測試包和AppStore正式包。

特性如下

  1. 支持 Objective-C
  2. 支持 Swift
  3. 支持 CocoaPodsgenerate_multiple_pod_projects 以及 incremental_installation
  4. 支持 com.apple.product-type.library.staticcom.apple.product-type.bundletarget類型
  5. 支持不同工作目錄、不同工程、不同分支下的組件緩存復(fù)用
  6. 支持不同的 configuration
  7. 支持Pods工程中的PodsDevelopment Pods
  8. 不支持主工程或其他工程的文件緩存
  9. 使用腳本集成,對項目倉庫無侵入

為什么不使用文件時間戳

Xcode使用的緩存策略之一,就是文件時間戳變化會重新編譯。這經(jīng)常導(dǎo)致一些不必要的重新編譯,尤其是在pod update之后。所以PPT的方案采取了修正時間戳的手段。

截圖來源PPT

而實際上,我們的構(gòu)建機器很可能多個項目、多個分支并發(fā)構(gòu)建,這會導(dǎo)致不同的工作目錄從而導(dǎo)致完全重新編譯,所以修正時間戳的作用比較受限。

我當時首先進行了全工程所有文件的MD5計算,腳本運行耗時也只是幾十秒。如果每次構(gòu)建可以穩(wěn)定減少幾分鐘甚至幾十分鐘,那么這幾十秒的開銷也是值得的。當然這個開銷也是我這個方案不適合在本機開發(fā)使用的主要原因之一。

實踐證明,使用MD5的方案,可以使得Pod構(gòu)建緩存可以在不同的App、不同的分支、不同的工作目錄中盡可能復(fù)用,加速效果與Pod二進制一致,編譯效果與源碼編譯一致,同時達到既安全又快速的效果。

如何獲取編譯參數(shù)

編譯參數(shù)主要是指Xcode傳遞給編譯器的參數(shù)以及鏈接器的參數(shù)。由以下幾個來源合并生成

  • Configuration
  • Xcode Project xcconfig File
  • Xcode Project Build Settings
  • Target xcconfig File
  • Target Build Settings
  • File Compiler Flags

將以上內(nèi)容加入到PodMD5的計算輸入中,使得編譯參數(shù)不同就會重新編譯。比如很多工程會在Podfilepost_install里注入一些編譯宏,不同的宏應(yīng)該需要重新編譯。注意這里的編譯參數(shù)是批量讀取而不是逐個獲取的,理論上不存在Xcode升級引起的不兼容的問題。

另外,考慮到實際上的SEARCH_PATHS不參與實際編譯(參與實際編譯的是依賴的頭文件),所以也會去除相關(guān)的SEARCH_PATHS以減少不必要的緩存miss。舉例如下

  • FRAMEWORK_SEARCH_PATHS
  • HEADER_SEARCH_PATHS
  • LD_RUNPATH_SEARCH_PATHS
  • LIBRARY_SEARCH_PATHS
  • USER_HEADER_SEARCH_PATHS

如何分析依賴

兩年前第一版的方案使用的是手動正則遞歸解析#include#import進行頭文件的依賴分析,運行了幾個月,后來發(fā)現(xiàn)部分個例場景下有Bug導(dǎo)致了匹配復(fù)用到錯誤的緩存,雖然當時修復(fù)了,但始終不靠譜。

就正如PPT中提到了的這個問題

截圖來源PPT

那有什么方法可以100%保證分析結(jié)果的準確呢?有的,調(diào)用編譯器進行預(yù)編譯,獲取所有的依賴文件。但這個開銷太大,以至于總體結(jié)果很有可能是負優(yōu)化。

還有其他靠譜的分析依賴的方法呢?還有的,Xcode使用clangswift編譯時,默認都會生成.d的依賴分析結(jié)果在中間產(chǎn)物目錄,里面包含某個文件編譯時所需的所有頭文件。

對應(yīng)的編譯命令精簡一下表達如下

.../clang ... -MMD -MT dependencies -MF .../YYWebImage.build/Objects-normal/arm64/YYWebImageManager.d ....../swift-frontend ... -emit-dependencies-path .../SwiftMessages.build/Objects-normal/arm64/SwiftMessages.d ...

舉例看看YYWebImageManager.dswiftclang生成的.d會復(fù)雜一些,不過問題不大。

dependencies: \  /Users/dengweijun/xxx/Pods/YYWebImage/YYWebImage/YYWebImageManager.m \  /Users/dengweijun/xxx/Pods/Target\ Support\ Files/YYWebImage/YYWebImage-prefix.pch \  /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.5.sdk/usr/include/mach-o/compact_unwind_encoding.modulemap \  /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.5.sdk/usr/include/mach-o/dyld.modulemap \  /Users/dengweijun/xxx/Pods/YYWebImage/YYWebImage/YYWebImageManager.h \  /Users/dengweijun/xxx/Pods/YYWebImage/YYWebImage/YYWebImage.h \  /Users/dengweijun/xxx/Pods/YYWebImage/YYWebImage/YYImageCache.h \  /Users/dengweijun/xxx/Pods/YYWebImage/YYWebImage/YYWebImageOperation.h \  /Users/dengweijun/xxx/Pods/Headers/Private/YYImage/YYImage.h \  /Users/dengweijun/xxx/Pods/Headers/Private/YYImage/YYFrameImage.h \  /Users/dengweijun/xxx/Pods/Headers/Private/YYImage/YYAnimatedImageView.h \  /Users/dengweijun/xxx/Pods/Headers/Private/YYImage/YYSpriteSheetImage.h \  /Users/dengweijun/xxx/Pods/Headers/Private/YYImage/YYImageCoder.h

好家伙,簡直完美。

那問題來了,在編譯之前的時候,需要這個依賴信息生成MD5作為查詢組件緩存的key,這時怎樣在不編譯的情況下高效拿到這個依賴信息呢?

我的做法是使用源文件+編譯參數(shù)生成一級MD5,然后查詢一級MD5對應(yīng)的依賴信息列表,遍歷這個列表,再遍歷依賴信息里的所有文件。如果找到一份依賴信息,與當前工作目錄的對應(yīng)文件都完全匹配(MD5一致),則認為依賴一致,使用源文件+編譯參數(shù)+依賴信息生成最終MD5,作為查詢組件緩存的key。另外,為了達到最佳的緩存命中效果,會將緩存的查詢key中的絕對路徑改為相對路徑。

這種多依賴多緩存的方案,盡可能保存并關(guān)聯(lián)每次的編譯結(jié)果,無論是對比Xcode只有一份依賴一份緩存的方案,還是對比PPT中整個工作目錄單依賴多緩存的方案,都使得增量編譯更容易命中緩存。實測遍歷依賴文件和MD5計算的開銷在可接受的預(yù)期范圍內(nèi)。

怎樣復(fù)用緩存

每次編譯成功之后,將上述的組件粒度的MD5作為緩存的key,將依賴信息(.d以及所有依賴文件的MD5)和組件產(chǎn)物(.a.bundle等)復(fù)制到構(gòu)建機器的指定的全局緩存目錄。由于復(fù)制到同一臺機器不需要依賴網(wǎng)絡(luò),所以整個緩存方案更加穩(wěn)定可靠。在這個緩存目錄下使用LRU的策略清除長期不會命中的緩存,在空間和時間上取得平衡。

而每次編譯之前,查詢組件緩存,對于命中緩存的組件(target

  1. 刪除工程文件的target,使得Xcode不編譯這個target的相關(guān)文件
  2. 將緩存產(chǎn)物從指定的全局緩存目錄復(fù)制到這個targetXcode產(chǎn)物目錄

這種對工程文件的破壞性修改,只能在構(gòu)建機自動完成,也是不適合在本機開發(fā)使用的第二個主要原因。

由于命中緩存后不編譯的組件的頭文件路徑和產(chǎn)物鏈接路徑保持不變,所以理論上不影響其他組件以及主工程的編譯。

整個腳本有些實際操作上的細節(jié)處理,比如

  1. 刪除target之后若其dependency需要重新編譯,需要保證能夠觸發(fā)其編譯。
  2. 由于xcodebuild archive本身會刪除緩存,所以需要往Pods工程注入腳本使得在xcodebuild archive開始時才執(zhí)行實際復(fù)制

怎樣使用

構(gòu)建腳本修改示意如下,增加兩行ruby腳本即可完成接入。即將開源,敬請期待。

pod updateruby hy_auto_build_cache_v4.rb -stage apply -configuration Release # 查詢和復(fù)用緩存xcodebuild archive xxxruby hy_auto_build_cache_v4.rb -stage cache -configuration Release # 新增緩存

為什么以組件為粒度緩存

開源的ccache是以文件(如目標文件.o)為粒度緩存,我自己也寫過類似的方案,修改CC以使用自己的編譯器來轉(zhuǎn)發(fā)編譯,但實測上以文件為粒度的緩存方案,雖然有更精確的編譯參數(shù)控制和依賴文件分析,以及有更高的命中率,但在平均情況下總體性能明顯不如以組件為粒度緩存的方案。我的理解是主要兩個原因,以文件為粒度的緩存方案,一個是Xcode的實際編譯的計算開銷依然非常大,另一個是逐個文件加入緩存的緩存計算開銷也不少。所以最后在構(gòu)建機使用的是以組件為粒度的緩存方案,直接整個組件移除編譯,直接減少Xcodebuild tasks總數(shù)。

總結(jié)

實測在Apple M1的機器上,使用這個Pod緩存方案,在足夠組件化的工程中,完全命中緩存的情況下,xcodebuild編譯耗時從9分鐘下降至1分鐘(不包括另外1分鐘左右的緩存開銷),效果顯著。平時的實際編譯耗時取決于增量修改的影響范圍,如果修改了較底層的頭文件,可能會觸發(fā)較大范圍的重新編譯。

這個Pod緩存方案雖然受限于Pods工程,但近乎完美的安全的緩存查詢策略,顯著的命中提速效果,較低的開銷,都證明了這個方案的實用性。

歡迎交流。

參考資料

[1]

技術(shù)沙龍: https://www.bagevent.com/event/7454056

[2]

美團外賣iOS多端復(fù)用的推動、支撐與思考: https://tech.meituan.com/2018/06/29/ios-multiterminal-reuse.html


瀏覽 117
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 亚洲无码高清在线观看视频| 国产成人精品一区二区| 欧美性爱高清| 伊人免费在线| 精品国产久久| 日韩成人AV在线播放| 91人妻无码精品一区二区三区| 天天操天天干天天射| 天天插在线视频| 欧美性天天| 成人三级电影在线观看| www.天天射视频| 猛男大粗猛爽H男人味| AV网站在线播放| 日本成人中文字幕在线观看| 亚洲AV无码秘翔田| 天天日天天干天天日| 黄色av免费看| 黄色高清无码视频| 日本精品人妻无码77777| 69国产成人精品二区| av在线资源观看| 黄色大片网站| 2024国产精品| 无码人妻一区二区三区线花季传件| 欧美性爱XXXX| 国产香蕉av| 超碰青娱乐| 欧美在线亚洲| 在线黄片视频| 91精品国产综合久久久蜜臀图片 | 色欲插插| 激情五月丁香花| 久久永久视频| 精品一区二区三区毛片| 77久久| AV解说| 中文字幕无码影院| 国产无码片| 在线一区观看| 国产精品人妻AⅤ在线看| 蜜桃视频91| 婷婷在线电影| 五月天毛片| 大香蕉免费在线观看| 日韩国产在线观看| 加勒比人妻| 三级片在线观看视频| 成人无码影院日韩,成人年…| 日逼黄色| 51嘿嘿嘿国产精品伦理| 亚洲无码黄片| 久草视频资源| 草比视频| 欧美成人性爱影院| 青青操B| 亚洲AV永久无码国产精品久久 | 日韩欧美在线播放| 国产成人欧美| 成人精品18| 国产热99| 91福利在线观看| 日韩精品视频一区二区三区| 91av视频| 亚洲男人天堂AV| 国内成人精品网站| 性爱av天堂| 亚洲激情网址| 久久精品www人人爽人人| 婬乱欧美一二三区| 男女啪啪| 亚洲欧美日韩免费| 97人妻无码一区二区| 人人妻人人爱人人| 亚洲高清无码在线| 欧美成人看片黄a免费看| 亚洲中文字幕av| 乌克兰性爱视频| 成人免费黄| 亚洲欧美日韩动漫| 色色免费黄色视频| 欧美日韩国产在线播放| 最美人妖系列国产Ts涵涵| 人人操碰| 一级大香蕉| 99中文字幕| 亚洲国产电影| 一区二区Av| 69av在线观看视频| 粉嫩一区二区三区四区| 精品国产AⅤ麻豆| 青青青国产在线| 成人久久电影| 久操婷婷| 欧美日韩精品一区二区三区| 久久免费视频观看| 丰滿人妻一区二区三| 丁香五月在线| 久在线视频| 久久天堂一区| 大鸡巴在线观看| 国产美女AV| 久久久无码精品亚洲日韩男男| 91蝌蚪网| 毛片aaa| 日韩99在线观看| 亚洲无码一级片| 996热re视频精品视频| 亚洲中文无码在线| 九九九精品在线| 亚洲jizzjizz| 国产偷拍| eeuss一区二区| 成人视频黄片| 亚洲性爱AV| 色婷婷精品视频| 免费无遮挡视频网站视频| www.高清无码| 国产TS变态重口人妖| 五月天堂婷婷| 黄色免费网站在线观看| 美腿丝袜中文字幕精品| 婷婷色色五月| 日韩理论片| 99国产精品免费视频观看8| 蜜桃做爱| 国产色天使| 亚洲国产精品久久久| 在线国产福利| 十八禁福利网站| 日本色综合| 巨爆乳肉感一区二区三区| 99热999| 午夜无码鲁丝片午夜精品| 免费亚洲无码| 开心激情网五月天| 免费看黄色大全| 日本A视频| 91精品国产三级| 国产精品XXX视频| 婷婷成人五月天| a视频在线| 亚洲国产天堂| 免费人成视频在线| 久久精品片| 麻豆乱伦| 国产香蕉网| www.91AV| 亚洲精品福利视频导航| 中文字幕免费AV| 黄色A级毛片| 骚五月| 九九热在线精品视频| 美女久草| 免费A级毛片| 亚洲无码自拍偷拍| 手机在线看A片| 7x7x7x人成免费观学生视频| 成人资源站| 中文字幕免费高清| 国产黄在线观看| 欧美一级特黄AAAAAA片| 色五月网站| 成人无码高清在线观看| 日韩无码高清视频| 国产一区二区三区免费| 老太色HD色老太HD| 成人久久综合| 欧美特级黄| 开心激情播播网| 大香蕉啪啪| 在线永久看片免费的视频| 欧美亚洲动漫| 操操操av| 人人摸人人操人人爱| 无码日韩av| 国产精品123区| 亚洲中文AV| A片免费在线| 777777国产7777777| 蝌蚪窝在线视频免费观看| 做爱网站在线观看| 老师机性爱视频在线播放| 婷婷综合视频| 欧美性猛交XXXX乱大交蜜桃 | 亚洲午夜福利在线观看| 一级黄色免费电影| a视频免费| 亚洲草逼| 91操b| 中字AV| 另类激情网| 91亚洲在线观看| 精品乱码一区| 国产福利视频| 成人三区| 亚洲人人操| 婷婷成人电影| 大鸡吧在线视频| 免费观看成人| 亚洲午夜在线| 欧美日韩免费在线| 日韩日韩日韩日韩| www.久热| 日韩在线网址| 天天干免费视频| 日本A∨在线| 激情婷婷色五月| 五月天无码av| 人妻人人干| 大香蕉伊人成人网| 翔田千里被躁120分钟| 迷奸91| 亚洲aaa| 亚洲色图偷拍| 国产在线激情| 九九热精品视频| 亚洲国产91| 精品无码一区二区三| 国产av影视| 午夜精品无码| 在线一级片| 国产精品久久久久毛片SUV| 波多野结衣无码AV在线| av免费在线播放| 免费V片| 91资源在线| 波多野结衣AV在线播放| 风流少妇一区二区三区91| 五月丁香亭亭| 操逼视频观看| 四虎欧美| 黄色影片在线观看| 国产黄色视频免费观看| 丁香五月婷婷综合| 日韩一级欧美一级| 午夜福利码一区二区| 成人精品三级AV在线看| 中文字幕日本| 操逼黄色视频| 黑巨茎大战欧美白妞| 2024天天操| 日韩一区二区不卡| 91毛片在线观看| 亚洲不卡在线观看| 午夜精品电影| 香蕉网址| www.狠狠撸| 特级黄色片| 国产骚逼| 中文字幕一区二区蜜桃| 国产a一级a毛一级视频| 欧美三区四区| 91无码精品国产AⅤ| 一个人看的www日本高清视频| 大炕上公让我高潮了六次| 国产男女视频| 日韩高清无码一区二区三区| 超碰人人草| 无码人妻一区二区一牛影视| 男人天堂影院| 热逼视频| 日韩欧美不卡色不卡| 人人干日日干| 亚洲欧美国产另类| 国产免看一级a一片成人aⅴ| 欧美一区二区三区四| 91一区二区在线观看| 制服丝袜在线视频| 丰滿人妻一区二区三区| 天堂亚洲AV无码精品成人| 欧美老妇另类BBwBBw| 可以免费看AV的网站| 亚洲第一在线| 大香蕉亚洲网| 一本色道久久综合无码人妻软件| 青青草97国产精品麻豆| 亚洲GV成人无码久久精品| 在线观看18s| 无码无遮挡| 精品人妻一区二区| 安徽妇搡BBB搡BBBB户外老太太| 欧美日韩亚洲一区二区| 欧美一区免费| 色吟AV| 一级特黄AA片| 欧美激情视频一区二区三区不卡| 日韩国产免费| 成人小说在线观看| 俺也去俺去啦| 无码无遮挡| 精品视频在线播放| 中国操逼毛片| 亚洲小说区图片区| 欧美性爱XXXX| 婷婷五月天基地| 操逼免费看| 国产小视频在线免费观看| 欧美亚洲性爱| 尤物av在线| 精品国产成人a在线观看| 91香蕉视频| 伊人大香蕉视频在线观看| 国产传媒在线| 92自拍视频| 99热网| 国产精品无毛五区六区| 色汉综合| 91成人无码视频| 99视频免费| 日日摸日日添日日躁AV| 中文乱伦视频| 日韩国产高清无码| 国产特级毛片AAAAAA| 69婷婷国产精品| 色婷婷一区二区三区四区五区精品视| 特黄AAAAAAAAA真人毛片| 欧美在线中文字幕| 九七在线视频| 理论片熟女奶水哺乳| 激情五月丁香花| 91青青草视频| 操操操操操操操操逼| 国产欧美日韩一区二区三区| 强伦轩人妻一区二区三区最新版本更新内容| 国产一级做a爱免费视频| 亚洲一区在线免费观看| 午夜老司机福利| 婷婷久久婷婷| 国产激情都市一区二区三区欧美 | 五月天一区二区三区| 操逼大全| 老汉av| 黄片免费观看视频| 9一区二区三区| 午夜免费视频1000| 九九惹伊人| 99热国产免费| 蜜乳AV一区二区三区| 69AV在线播放| 正在播放无码| 亚洲熟妇无码| 精品国产午夜福利| 亚洲欧美v| 蜜桃av久久久亚洲精品| 视频一区二区三区在线观看| 99热中文字幕在线观看| 国产小电影在线| 麻豆黄网| 日韩中文字码无砖| 日本在线www| 91蝌蚪视频在线观看| 爱视频福利网| 玖玖成人电影| 男人天堂无码成人| 亚洲成人网在线观看| 久久九九国产精品怡红院| 成人免费在线| 亚洲无码成人AV| 狠狠天天| 在线视频观看一区| 亚洲无码在线播放| 国产91在线看| 99热亚洲| 99免费在线视频| 国产激情自拍| 日韩欧美在线中文字幕| 亚洲视频在线播放| 婷婷精品免费久久| 久久成人综合网| 超碰97在线免费观看| 人妻人人干| 在线看片你懂的| 97人妻一区二区精品免费视频| 人人澡人人爱| www在线视频| 无码av在线观看| 免费在线观看A| 亚洲色图偷拍| 三级片视频网址| 成人三级电影网| 91成人无码视频| 久久婷婷精品| 日韩精品视频在线免费观看| 国产乱子伦一区二区三| 五月丁香综合网| 爱草在线| 五月天青青草超碰免费公开在线观看 | 成人性生活一级片| 密臀AV在线| 3D动漫精品啪啪一区二区| 91九色视频| 91大神在线免费观看| 欧美日韩免费看| 国产1区2区3区中文字幕| 你懂的在线视频| 亚洲a片在线观看| 牛牛精品一区二区AV| 午夜成人小电影| 亚洲午夜福利视频在线观看 | 青青草免费福利视频| 熟妇人妻中文AV无码| 91在线电影| 91人人澡人人爽人人看| 夜夜福利| 日都一级A片| 中文字幕免费在线播放| 无套内射在线播放| 国内自拍偷拍| 无码无码一区二区三区| 五月无码视频| 免费的毛片| 精品九九九九九| 人人爽人人爽| 国产精品成人一区二区| 久久露脸国语精品国产91| 嫩草在线观看| 婷婷午夜福利| 综合欧美国产视频二区| 日韩欧美视频一区| 亚洲熟妇在线观看| 91在线精品秘一区二区黄瓜| 波多野结衣亚洲视频| 中国黄色一级A片| 国产AV一区二区三区精品| 丰滿人妻一区二区三| av拍拍| 日本精品中文字幕| 亚洲无码少妇| 在线视频中文字幕| 四川少妇BBBB| 人成视频免费观看| 嫩BBB嫩BBB嫩BBB| 天天操天天射天天日| 茄子av| 欧美草逼视频| 国产成人亚洲综合AV婷婷| 天天日天天日天天日| 91色噜噜狠狠色婷婷| 色五月婷婷激情| 人人摸人人操人人摸| 操逼亚洲| 爆操网站| 亚洲国际中文字幕在线| 亚洲色情在线| 国产1区2区3区中文字幕| 亚洲人在线观看| 91人妻无码成人精品一区二区| 欧美在线视频网| b逼一区| 国产综合精品久久久久成人AV| 国产激情无码免费| 国产麻豆AⅤMDMD0071 | 日韩成人无码一区二区视频| 8x8x黄色| 中国精品77777777| 老司机永久免费91| 免费精品视频| 在线播放www| 丁香五月亭亭| 天天撸在线视频| 少妇高潮喷水视频| 中文字幕在线播放av| 免费亚洲婷婷| 可以在线观看的av| 免费色色视频| 亚洲无码久久飞鱼网站| 全国最大成人网| 亚洲AV成人无码精品| 无码精品人妻一区二区欧美| 成人欧美一区二区三区黑人免费| 日韩高清无码毛片| 国产精品视频导航| 亚洲AV白浆| 久久综合久久鬼| 男人天堂视频网站| 怕怕怕视频| 欧美黄色电影网站| 亚洲黄色影视| 久久97人妻AⅤ无码一区| 88海外华人免费一区| 婷婷视频在线| 91AV视频在线| 国产美女被爽到高潮免费A片软件| 色婷婷丁香五月| 欧美午夜在线| 欧洲AV在线| 国产91小视频| 天a堂8在线www| 精品自拍偷拍| 18精品爽国产冫绿帽社| 国产高潮视频在线观看| 欧美爱爱网| 成人做爰100部免费网站| 亚洲有码中文字幕| 东京热网站在线观看| 国产性爱网| 国产一区二区三区视频在线观看| 日韩,变态,另类,中文,人妻| 亚洲精品无码在线播放| 草逼免费视频| 欧美超碰在线| 一二三久久| 国产在线接入| 操比二区| 精品国产三级| 色情片在线观看| 黄色日逼网站| 韩国一区二区三区在线观看 | 日韩精品毛片一区二区视频免费| 国产一级在线| 91欧美日韩综合| 日本免费爱爱| www.一级片| 18禁片网站| 色婷婷久久综合久色| 福利毛片| 亚洲中文字幕2019| 欧美视频在线观看一区| 色第一页| 亚洲综合小说| 九色国产视频| 九九综合网| 激情五月天激情网| 九九九九九九国产| 一级A片免费看| 香蕉操逼视频| 国产在线视频91| 地表最强网红八月未央道具大秀 | 久久夜色精品噜噜亚洲AV| 97国产在线视频| 亚洲中文字幕网站| 九九自拍视频| av无码av天天av天天爽| 高潮喷水AⅤ| 国产高清视频在线| 欧美日韩操逼视频| 玖玖资源网站| 六月婷婷五月| 日韩wuma| 狼人香蕉在线视频| 久久久久成人电影| 97在线观看免费| 成人动漫在线观看| 日韩精品A片| 2024av在线| 翔田千里无码流出两部| 久久三级电影| 在线黄片视频| 无码人妻精品一区二区蜜桃91| 91麻豆精品无码| 欧美v在线观看| 一级黄色影片| 91大神久久| 91香蕉在线| 一级a一级a爱片免费视频| 69国产精品成人无码视频色 | 亚洲无码电影网站| 亚洲性爱视频| 国产又粗又黄| 天天做天天日| 国产卡一卡二在线观看| 久久久久久国际四虎免费精品视频| 丁香五月欧美| 欧美久久网| 一区二区水蜜桃| 内射婷婷| 久久久久999| 日韩AA片| 正在播放无码| 欧美特级毛片| 在线观看免费黄色视频| 久久精品小视频| 一曲二曲三曲在线观看中文字| 日韩美女在线| AV无码免费| 91大鸡| 亚洲成人性爱在线| 亚洲V在线观看| 国产精品一麻了麻了| 婷婷五月色| 亚洲天堂精品在线观看| 国产人妻精品| 久久99久久99久久99| 五月天婷婷丁香网| 免费观看一级毛一片| 东北老女人性爱视频| 国产高潮视频在线观看| 新超碰在线观看| 免费看性蜜桃| 男女操逼网站| 日韩毛| 日本操逼网站| 操少妇视频| 亚洲黄片免费在线观看| 国产三级片在线观看视频| 成人毛片AV无码| 色情片免费看| 久久久91人妻无码精品蜜桃ID| 日韩性生活| 天天爽天天爽夜夜爽| 中文字幕日本欧美| 免费视频一区二区| 91午夜福利| 影音先锋aV成人无码电影| 人妻精品一区二区三区| 亚洲日韩av在线| 香蕉三级片| 国产成人a亚洲精品无码| 亚洲一区三区| 午夜福利爱爱视频| 色视频在线播放| 午夜黄色视频在线观看| 国产免费久久久| 国产第七页| 中文字幕丰满的翔田千里| 五月天色婷婷丁香| 97人人操人人干| va色婷婷亚洲在线| 日本黄色的视频| 在线观看av中文字幕| 91迷奸| 天天干天天干| A片免费在线观看| 爱爱打炮影院| 欧美大香蕉视频| 在线中文字幕网站| 亚洲网站在线| 四虎国产| 99久久婷婷国产综合精品草原| 99久久99九九99九九九| 豆花视频成人精品视频| 国产精品三级在线观看| 暖暖无码| 日本a片在线观看| 亚洲成人性爱网站| 91色在线| 91在线无码精品秘国产| 久久AV秘一区二区三区水生| Chinese搡老女人| 麻豆自拍偷拍| 国产三级国产三级国产| avwww| 日韩AV一级片| 成人黄色免费观看| 91精品国产99久久久久久天美 | 日韩人妻精品中文字幕免费| 青青国产| 闷骚艳岳的婬乱生活视频| 五月天婷婷丁香| 亚洲天堂一区| 亚洲一区二区无码| 日韩天堂| 婷婷色在线观看| 黄色在线免费看| 色情一级AA片免费观看| 欧美日韩一区二区三区四区| 麻豆亚洲| 国产黄片一区二区| 伊人大香蕉在线视频| 激情一区二区| 午夜黄色| 亚洲无码影视| 柠檬福利第一导航| 亚洲日韩乱码在线| 日韩AV三级片| 77q视频| 国产一级免费观看| 久久露脸国语精品国产91| 亚洲美穴| jzzijzzij亚洲成熟少妇在线观看 九色蝌蚪9l视频蝌蚪9l视频成人熟妇 | 伊人婷婷久久| 大香蕉久久久久久久| 免费看黄色录像| 夜夜撸一撸| 免费三级怡红院| 伊人黄色视频| 久久午夜无码鲁丝| 制服无码| 性爱av天堂| 秋霞福利网| 亚洲精品国产av| 亚洲AV无码一区| 秋霞一区| 成人亚洲性情网站www在线| 久久草成人网| 中文字幕国产在线| 人人艹人人干| 国产AⅤ爽aV久久久久成人| 97色在线| 91在线播放视频| jiujiuav| 手机免费av| 黄色伊人| 亚洲无码影院| 久久68| 五月天婷婷国产| 久久国产精品在线| 91精品91久久久中77777| 欧美a片在线看| 国产伦精品一级A片视频夜夜| 久久久九九九| 成人自拍网| 一级电影网| 亚洲欧美性爱| 欧美在线观看视频| 蜜桃秘一二三区最新| 国产免费黄色av| 成人黄网在线观看| 天堂成人AV| 国产黄色一级电影| 亚洲第一色播| 西西4444大胆无码视频| 亚洲黄在线观看| 99久久99久久久精品棕色圆| 无码一区二区三区四区五区六区 | 日韩在线成人视频| 日本A片免费观看| 少妇白洁在线观看| 日韩高清无码电影| 国产精品一二三区夜夜躁| 欧美成人精品欧美一级乱黄| 国产精品乱伦| 精品无码久久久久久久久app| 亚洲欧洲免费看| 久久久久久亚洲AV黄床| 丝袜久久| 成人毛片AV无码| 国产无码操逼| 久久久久久久久国产| 亚洲视频免费看| 神马午夜福利视频| 91在线视频观看| XXXX操| 伊人在线综合| 亚洲五月天色| 另类老妇性BBwBBw图片| 精品人妻无码一区二区三区四川人 | 国产色情视频| 免费a级毛片| 黄色视频| 国产真人一级a爱做片| 无码高清18| 国产在线观看无码| 色欲91| 天天弄天天操| 尤物视频网| 人妻少妇精品视频| 久久久久久无码日韩欧美电影| 欧美一级黄片免费看| 人妻一区二区在线| 亚洲天堂网在线观看视频| 东京热视频免费观看| 99久久久国产精品无码| 日韩欧美在线免费观看| 四虎av| 欧美激情无码炮击| 91网站在线免费观看| 日韩無码专区| 人人妻人人澡人人爽人人爽| 国产成人在线免费| 91成人免费| 国产午夜福利电影| 88国产精品| 9999re| A片免费网址| 欧美日一区二区三区| 在线永久看片免费的视频| 精品福利在线观看| 亚洲乱码国产乱码精品天美传媒 | 一级黄色免费片| 美女操逼网站| 一本色道久久综合亚洲精品久久| 操逼在线观看| 久久这里有精品视频| 亚洲综合一区二区三区| 久久黄色精品视频| 亚洲专区在线| 亚洲视频在线看| BBWBBw嫩| 色婷婷Av一区| 91精品婷婷国产综合久久蝌蚪| 豆花在线视频| 99久久久久久| 亚洲操逼视频| 日本不卡在线观看| 国产自慰一区| 欧洲第一无人区观看| 亚洲无码视频网站| 91中文字幕在线观看| 99大香蕉视频| 无码波多野结衣| 成人AV中文字幕| 五月婷丁香| 日韩一级黄色片| 成年人免费黄色视频| 免费观看一级毛一片| 欧美又粗又大AAA片| 中文无码99| 国产熟睡乱子伦午夜视频_第1集| 人人看人人摸人人搞| 精品九九九九| 伊人网站| 国产又粗又猛又黄又爽无遮挡 | 91久久人澡人妻人人澡人人爽| 亚洲无码性爱视频| 中文字幕第12页| 欧美日韩一区二区三区| 亚洲精品鲁一鲁一区二区三区| sm国产在线调教视频| 日韩欧美在线中文| 国产午夜福利视频在线观看| 欧美性猛交XXXX乱大交3| 久色网| 国产理论视频在线观看| 91人人精品| 操碰视频在线| 蜜桃视频一区| 欧美日韩AV| 少妇A片| 国产学生妹在线播放| 日本Sm/调教/捆绑/紧缚| 人妻在线无码| 俺去俺来也在线www色情网 | 欧美二区三区| 国产女人视频| 97精品人妻一区二区三区在线| 国产一级a毛一级a做免费高清视频| www.91av| 国产夫妻自拍av| 99久久夜色精品国产亚洲| 九九成人电影| 韩国精品久久久| 亚洲综合伊人| 日本欧美中文字幕| 91色秘乱码一区二区| 欧美三级在线视频| 国产乱码精品一区二区三区的特点| 樱桃性爱视频| 水蜜桃在线观看视频| 亚洲高清在线| 在线观看免费a片| 天天射天天射| 中文字幕毛片| 免费看黄色大全| 丁香六月综合激情| 一级女婬片A片AAAA片| 中文字幕高清无码在线播放| 亚洲精品一区二区三区无码电影| 久久久久亚洲AV成人网人人软件 | 成人小说视频在线社区| 久久久久久久久黄色| 欧美高清视频| 性爱免费视频| 欧美va亚洲va| 蜜臀久久99精品久久久兰草影视 | 亚洲香蕉国产| 东北老女人操逼| 成人精品三级AV在线看| 高清毛片AAAAAAAAA片| 少妇搡BBBB搡BBB搡造水多/| 精品国产乱码久久久久久郑州公司| 国产一级影院| 超碰97老师| 国产一级a爱做片免费☆观看| 国产18女人水真多免费看| 亚洲欧美久久久| 无码欧美成人| 国精产品一二三区| 国产原创精品| 亚洲精品一区二区三区新线路| 亚洲AV免费在线观看| 久久久久99| 国产作爱| 中文字幕精品无码亚| 成年视频在线观看| 97人妻天天摸天天爽天天| 亚洲久久久| 亚洲精品无| 五月婷婷网站| 国产香蕉视频| 免费在线观看亚洲| www| 无码人妻中文字幕| 芳芳的骚逼| 国产亲子乱婬一级A片借种| 久久女人视频| 日本乱码视频| 日本成人高清视频| 超碰AV在线| 特黄特色免费视频| 嫩BBB槡BBBB槡BBBB撒尿| 欧美毛视频| 欧美色图另类图片| 大鸡巴久久| 蜜桃视频成人版网站| 精品国产欧美| 国产视频久久| 一级A片黄色| 欧美性猛交XXXX乱大交蜜桃 |