精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Android開發:由模塊化到組件化(一)

移動開發 Android
在Android SDK一文中,我們談到模塊化和組件化,現在我們來聊聊組件化開發背后的哪些事.最早是在廣告SDK中應用組件化,但是同樣適用于普通應用開發。以下高能,請做好心理準備,看不懂請發私信來交流.本文不推薦新手閱讀,如果你剛接觸Android開發不久,請立刻放棄閱讀本文.

在Android SDK一文中,我們談到模塊化和組件化,現在我們來聊聊組件化開發背后的哪些事.最早是在廣告SDK中應用組件化,但是同樣適用于普通應用開發。

以下高能,請做好心理準備,看不懂請發私信來交流.本文不推薦新手閱讀,如果你剛接觸Android開發不久,請立刻放棄閱讀本文.

模塊化和組件化

模塊化

組件化不是個新概念,其在各行各業都一直備受重視.至于組件化什么時候在軟件工程領域提出已經無從考究了,不過呢可以確認的是組件化最早應用于服務端開發,后來在該思想的指導下,前端開發和移動端開發也產生各自的開發方式.

在了解組件化之前,先來回顧下模塊化的定義

Modular programming is a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect of the desired functionality.

簡單來說,模塊化就是將一個程序按照其功能做拆分,分成相互獨立的模塊,以便于每個模塊只包含與其功能相關的內容。模塊我們相對熟悉,比如登錄功能可以是一個模塊,搜索功能可以是一個模塊,汽車的發送機也可是一個模塊.

組件化

現在來看看”組件化開發”,這里我們看一下其定義:

Component-based software engineering (CBSE), also known as component-based development (CBD), is a branch of software engineering that emphasizes the separation of concerns in respect of the wide-ranging functionality available throughout a given software system. It is a reuse-based approach to defining, implementing and composing loosely coupled independent components into systems. This practice aims to bring about an equally wide-ranging degree of benefits in both the short-term and the long-term for the software itself and for organizations that sponsor such software.

通俗點就是:組件化就是基于可重用的目的,將一個大的軟件系統按照分離關注點的形式,拆分成多個獨立的組件,已較少耦合。

咋樣一看還是非常抽象,說了這么多好像還是不明白.什么是組件呢?組件可以是模塊、web資源,軟件包,比如汽車的發動機是一個模塊,也是一個組件,再或者前端中的一個日歷控件是一個模塊,也一個組件.

模塊化 vs 組件化

當你看到這的時候,想必心理一陣惡寒:模塊化?組件化?到底是什么鬼?有啥區別.

有這種感覺才是對的,模塊化和組件化本質思想是一樣的,都是”大化小”,兩者的目的都是為了重用和解耦,只是叫法不一樣.如果非要說區別,那么可以認為模塊化粒度更小,更側重于重用,而組件化粒度稍大于模塊,更側重于業務解耦.

組件化優缺點

組件化開發的好處是顯而易見:系統級的控制力度細化到組件級的控制力度,一個復雜系統的構建最后就是組件集成的結果.每個組件都有自己獨立的版本,可以獨立的編譯,測試,打包和部署

產品組件化后能夠實現完整意義上的按需求進行產品配置和銷售,用戶可以選擇使用那些組件,組件之間可以靈活的組建.

配置管理,開發,測試,打包,發布完全控制到組建層面,并帶來很多好處.比如一個組件小版本進行升級,如果對外提供的接口沒有發生任何變化,其他組件完全不需要再進行測試.

但是組件化的實施對開發人員和團隊管理者提出了更高水平的要求.相對傳統方式,在項目的管理和組織上難度加大,要求開發人員對業務有更深層次上的理解.

進軍Android 項目

為什么要在Android中實行組件化開發

為什么要在Android中實行組件化開發呢,其根本原因在于業務的增長提高了項目的復雜性,為了更好的適應團隊開發,提高開發效率,實行組件化乃大勢所趨.

為了更好的幫助大家理解上面這句話,我將從最早的Android 項目開發方式說起.

簡單開發模型

所謂的簡單開發模型是最基礎的開發方式,工程中沒有所謂的模塊,沒有所謂的規劃,常見于初學者學習階段或者是個人學習過程所寫的demo,其結構大概如下: 

 

 

 

不難發現,往往是在一個界面中存在著大量的業務邏輯,而業務邏輯中充斥著各種各種網絡請求,數據操作等行為,整個項目中沒有所謂的模塊的概念,項目組成的基本單位不是模塊,而是方法級的.

關于這種開發模型沒什么需要介紹的,我們早期都經歷過,現在除了很少非常古老的項目以及初學者練手之作,已經很少見到.

單工程開發模型

該種開發模型已經有了明確的模塊劃分,并且通過邏輯上的分層呈現出較好結構,該模型最為我們所熟悉,通常用于早期產品的快速開發,團隊規模較小的情況下.該種開發模型結構如下: 

 

 

 

隨著產品的迭代,業務越來越復雜,隨之帶來的是項目結構復雜度的極度增加,此時我們面臨著幾個問題:

  1. 實際業務變化非常快,但是工程之前的業務模塊耦合度太高,牽一發而動全身.
  2. 對工程所做的任何修改都必須要編譯整個工程
  3. 功能測試和系統測試每次都要進行.
  4. 團隊協同開發存在較多的沖突.不得不花費更多的時間去溝通和協調,并且在開發過程中,任何一位成員沒辦法專注于自己的功能點,影響開發效率.
  5. 不能靈活的對工程進行配置和組裝.比如今天產品經理說加上這個功能,明天又說去掉,后天在加上.

在面臨這些問題的前提下,我們重新來思考組件化,看看它是否能解決我們在Android 項目開發中所遇到的難題.

主工程多組件開發模型

借助組件化這一思想,我們在”單工程”模型的基礎上,將業務層中的各業務抽取出來,封裝成相應的業務組件,將基礎庫中各部分抽取出來,封裝成基礎組件,而主工程是一個可運行的app,作為各組件的入口(主工程也被稱之為殼程序).這些組件或以jar的形式呈現,或以aar的形式呈現.主工程通過依賴的方式使用組件所提供的功能. 

 

 

 

(需要注意這是理想狀態下的結構圖,實際項目中,業務組件之間會產生通信,也會產生依賴,關于這一點,我們在下文會談)

不論是jar還是aar,本質上都是Library,他們不能脫離主工程而單獨的運行.當團隊中成員共同參與項目的開發時,每個成員的開發設備中必須至少同時具備主工程和各自負責組件,不難看出通過對項目實行組件化,每個成員可以專注自己所負責的業務,并不影響其他業務,同時借助穩定的基礎組件,可以極大減少代碼缺陷,因而整個團隊可以以并行開發的方式高效的推進開發進度.

不但如此,組件化可以靈活的讓我們進行產品組裝,要做的無非就是根據需求配置相應的組件,最后生產出我們想要的產品.這有點像玩積木,通過不同擺放,我們就能得到自己想要的形狀.

對測試同學而言,能有效的減少測試的時間:原有的業務不需要再次進行功能測試,可以專注于發生變化的業務的測試,以及最終的集成測試即可.

到現在為止,我們已經有效解決了”單工程開發模型”中一些問題,對于大部分團隊來說這種已經可以了,但是該模型仍然存在一些可以改進的點:每次修改依賴包,就需要重新編譯生成lib或者aar.比如說小顏同學接手了一個項目有40多個組件,在最后集成所有組件的時候,小顏同學發現其中某組件存在問題,為了定位和修改該組件中的問題,小顏同學不斷這調試該組件.由于在該模型下,組件不能脫離主工程,那么意味著,每次修改后,小顏同學都要在漫長的編譯過程中等待.更糟糕的是,現在離上線只有5小時了,每次編譯10分鐘,為改這個bug,編譯了20次,恩….什么也不用干了,可以提交離職報告了

如何解決這種每次修改組件都要連同主工程一起編譯的問題?下面我們來看主工程多子工程開發模型是如何解決該問題的.

主工程多子工程開發模型

該種開發模型在”主工程多組件”開發模型的基礎上做了改進,其結構圖如下: 

 

 

 

不難發現,該種開發模型在結構上和”主工程多組件”并無不同,唯一的區別在于:所有業務組件不再是mouble而是作為一個子工程,基礎組件可以使moudle,也可以是子工程,該子工程和主工程不同:Debug模式下下作為app,可以單獨的開發,運行,調試;Release模式下作為Library,被主工程所依賴,向主工程提供服務.

在該種模型下,當小顏同學發現某個業務組件存在缺陷,會如何做呢?比如是基礎組件2出現問題,由于在Debug模式下,基礎組件2作為app可以獨立運行的,因此可以很容易地對該模塊進行單獨修改,調試.最后修改完后只需要重新編譯一次整個項目即可.

不難發現該種開發模型有效的減少了全編譯的次數,減少編譯耗時的同時,方便開發者進行開發調試.

對測試同學來說,功能測試可以提前,并且能夠及時的參與到開發環節中,將風險降到最低.

到現在,我們在理論層次上講明了采用組件化開發給我們帶來的便利,空口無憑是沒有說服力的,在下面的一小節中,我們來談談如何組件化在Android中的實施過程.

組件化過程中遇到的問題

組件劃分

組件化首要做的事情就是劃分組件.如何劃分并沒有一個確切的標準,我建議早期實施組件化的時候,可以以一種”較粗”的粒度來進行,這樣左右的好處在于后期隨著對業務的理解進行再次細分,而不會有太大的成本.當然,我建議劃分組件這一工作有團隊架構人員和業務人員協商定制.

子工程工作方式切換

在”主工程多子工程模型”中,我們提到子工程在Debug模式下做為單獨的Application運行,在Release模式下作為Library運行,如何去動態修改子工程的運行模式呢?我們都知道采用Gradle構建的工程中,用apply plugin: 'com.android.application'來標識該為Application,而apply plugin: 'com.android.library'標志位Library.因此,我們可以在編譯的是同通過判斷構建環境中的參數來修改子工程的工作方式,在子工程的gradle腳本頭部加入以下腳本片段: 

 

 

 

除此之外,子工程中在不同的運行方式下,其AndroidMainifest.xml也是不相同的,需要為其分別提供自己AndroidManifest.xml文件:在子工程src目錄下(其他位置創建)創建兩個目錄,用來存放不同的AndroidManifest.xml,比如這里我創建了debug和release目錄 

 

 

 

接下來同樣需要在該子工程的gradle構建腳本中根據構建方式制定: 

 

 

 

組件通信與組件依賴

在”主工程多組件”這種理想模型下業務組件是不存在相互通信和依賴的,但現實卻是相反的,如下圖: 

 

 

 

這里,業務組件1和業務組件3同時向業務組件2提供服務,即業務組件2需要同時依賴業務組件3和業務組件1.

現在我們再來看一種更糟糕的情況: 

 

 

 

由此看來,在業務復雜的情況下,組件與組件之間的相互依賴會帶來兩個問題:

重復依賴:比如可能存在業務組件3依賴業務組件1,而業務組件2又依賴業務組件3和業務組件1,此時就導致了業務組件1被重復依賴.

子系統通信方式不能依靠傳統的顯示意圖.在該種模型下,使用顯示意圖將導致組件高度耦合.比如業務組件2依賴業務組件1,并通過顯示意圖的方式進行通信,一旦業務組件1不再使用,那么業務組件2中使用現實意圖的地方會出現錯誤,這顯然與我們組件化的目的背道而馳.

解決組件通信

先來解決業務組件通信問題.當年看到上面那張復雜的組件通信圖時,我們不難想到操作系統引入總線機制來解決設備掛載問題,同樣,借用總線的概念我們在工程添加”組件總線”,用于不同組件間的通信,此時結構如下: 

 

 

 

所有掛載到組件總線上的業務組件,都可以實現雙向通信.而通信協議和HTTP通信協議類似,即基于URL的方式進行.至于實現的方式一種可以基于系統提供的隱式意圖的方式,另一種則是完全自行實現組件總線.這篇文章不打算在此不做詳細說明了.

解決重復依賴

對于采用aar方式輸出的Library而言,在構建項目時,gradle會為我們保留最新版本的aar,換言之,如果以aar的方式向主工程提供提供依賴不會存在重復依賴的問題.而如果是直接以project形式提供依賴,則在打包過程中會出現重復的代碼.解決project重復依賴問題目前有兩種做法:1.對于純代碼工程的庫或jar包而言,只在最終項目中執行compile,其他情況采用provider方式;2.在編譯時檢測依賴的包,已經依賴的不再依賴

資源id沖突

在合并多個組件到主工程中時,可能會出現資源引用沖突,

最簡單的方式是通過實現約定資源前綴名(resourcePrefix)來避免,需要在組件的gradle腳本中配置: 

 

 

 

一旦配置resourcePrefix,所有的資源必須以該前綴名開頭.比如上面配置了前綴名為moudle_prefix,那么所有的資源名都要加上該前綴,如:mouble_prefix_btn_save.

組件上下文(Context)

最后需要注意在Debug模式下和Release模式下,所需要的Context是否是你所希望的,以避免產生強轉異常.

結束語

最早接觸組件化這個概念是在從事廣告SDK工作中,最近陸續續的做了一些總結,因此有了這篇關于”組件化開發”的文章.另外,組件化開發不是銀彈,并不能完全解決當前業務復雜的情況,在進行項目實施和改進之前,一定要多加考量.

敬請期待第二篇,我們將在第二篇內介紹如何對項目實施組件化. 

責任編輯:龐桂玉 來源: Android技術之家
相關推薦

2017-07-11 11:02:03

APP模塊化架構

2014-04-27 10:16:31

QCon北京2014Andrew Bett

2018-09-07 23:06:18

量子計算機架構開發

2019-08-28 16:18:39

JavaScriptJS前端

2017-05-18 11:43:41

Android模塊化軟件

2010-08-02 09:10:36

Flex模塊化

2011-01-11 13:40:44

webcssdiv

2017-04-10 14:23:01

typescriptjavascriptwebpack

2025-02-26 13:07:57

2025-07-10 03:00:00

2017-05-18 10:23:55

模塊化開發RequireJsJavascript

2020-09-17 10:30:21

前端模塊化組件

2013-08-20 15:31:18

前端模塊化

2015-10-10 11:29:45

Java模塊化系統初探

2022-03-11 13:01:27

前端模塊

2020-09-18 09:02:32

前端模塊化

2022-09-21 11:51:26

模塊化應用

2023-01-04 18:10:26

服務模塊化jre

2024-11-21 16:37:30

客戶端業務解耦框架

2017-07-04 13:59:28

Android模塊化
點贊
收藏

51CTO技術棧公眾號

精品视频99| 综合日韩av| 国产高清亚洲一区| 91国语精品自产拍在线观看性色| 欧美高清性xxxx| 国产精品粉嫩| 秋霞综合在线视频| 91久久国产综合久久| 综合色婷婷一区二区亚洲欧美国产| 国产女人18毛片18精品| 宅男噜噜噜66一区二区| 日韩在线中文字| av在线天堂网| 成人涩涩视频| 亚洲h在线观看| 成人激情视频在线播放| 亚洲熟女乱综合一区二区三区| 范冰冰一级做a爰片久久毛片| 国产精品丝袜黑色高跟| 国产精品theporn88| 无码人妻精品一区二区三区蜜桃91| 99re91这里只有精品| 中文av一区二区| 国产精品v欧美精品∨日韩| 波多野结衣激情视频| 激情欧美亚洲| 久久久精品久久久| 在线不卡av电影| 成人福利一区| 制服视频三区第一页精品| 国产裸体舞一区二区三区| 亚洲男同gay网站| 亚洲国产精品t66y| 蜜桃视频在线观看91| 亚洲欧美另类综合| 国产一区二区免费在线| 国产精品视频久久久| www.中文字幕在线观看| 在线电影一区| 久久精品99久久久久久久久| 亚洲精品国产一区黑色丝袜| 日韩精品欧美大片| 亚洲成人网av| 丰满少妇xbxb毛片日本| 91禁在线看| 亚洲激情一二三区| 一级做a爰片久久| 91亚洲精选| 久久成人精品无人区| 国产精品狼人色视频一区| 国产成人精品777777| 国产美女精品| 欧美在线视频一区二区| 日本一级黄色大片| 亚洲精品欧美| 97超视频免费观看| 麻豆久久久久久久久久| 国产精品一区毛片| 日韩av手机在线| 亚洲女人久久久| 久久国产影院| 久久天天躁狠狠躁夜夜爽蜜月| 自拍偷拍第9页| 久久精品一区二区不卡| 久久这里只有精品视频首页| h色网站在线观看| 黄色工厂这里只有精品| 68精品国产免费久久久久久婷婷 | 午夜精品久久久久久久99热影院| 成人在线视频观看| 欧美浪妇xxxx高跟鞋交| 国产探花在线观看视频| 国产精品白浆| 亚洲人高潮女人毛茸茸| 日韩在线一卡二卡| 欧美日韩一区自拍| 亚州精品天堂中文字幕| 激情视频网站在线观看| 久久机这里只有精品| 亚洲va久久久噜噜噜| 国产激情视频在线播放| 午夜在线视频观看日韩17c| 欧美在线观看网址综合| 伊人久久久久久久久久久久| 九九**精品视频免费播放| 97视频中文字幕| 青青草视频免费在线观看| 国产精品1区二区.| 韩国一区二区三区美女美女秀| 欧美孕妇孕交| 国产精品的网站| 久久99精品久久久久子伦| 免费av在线电影| 国产精品国产馆在线真实露脸| 福利在线小视频| 黑人巨大亚洲一区二区久| 欧美日本一区二区在线观看| 亚洲激情 欧美| 91嫩草亚洲精品| 91国在线精品国内播放| 国产一区二区波多野结衣| bt欧美亚洲午夜电影天堂| 亚洲欧美日韩精品在线| √8天堂资源地址中文在线| 欧美性一区二区| xxxwww国产| 91精品一区二区三区综合| 欧美亚洲国产成人精品| aaa一区二区三区| 国产欧美日韩综合精品一区二区 | 三级网站在线免费观看| 欧美日韩福利| 国产成人拍精品视频午夜网站| 国产白浆在线观看| 中文字幕成人av| 免费看又黄又无码的网站| 9999精品| 欧美片网站yy| 亚洲做受高潮无遮挡| 欧美日韩免费观看一区=区三区| 国产www精品| 人妻无码中文字幕| 亚洲欧美成aⅴ人在线观看| 国产天堂在线播放| 久久精品亚洲成在人线av网址| 久久激情视频免费观看| 日本一区二区三区久久| 91一区在线观看| 久久av综合网| 2021中文字幕在线| 3d成人h动漫网站入口| 亚洲v国产v欧美v久久久久久| 亚洲黄色一区| 99国产在线视频| 成人直播在线| 欧美精品vⅰdeose4hd| 一级在线观看视频| 日本欧美大码aⅴ在线播放| 久久综合一区| 欧美少妇精品| 精品亚洲aⅴ在线观看| 免费a v网站| 欧美激情视频一区二区三区免费| 成人免费淫片视频软件| 香蕉视频免费在线播放| 欧美吻胸吃奶大尺度电影 | 中文久久久久久| 国产精品免费99久久久| 国产成人精品免高潮在线观看| 日韩毛片在线一区二区毛片| 欧美日韩亚洲视频| 天天插天天射天天干| 妖精视频成人观看www| 精品国产aⅴ麻豆| 新版的欧美在线视频| 国产视频精品久久久| 六月丁香激情综合| 久久久精品免费观看| 亚洲一区二区三区四区五区xx| 色综合天天爱| 91丝袜脚交足在线播放| 第一av在线| 国产视频自拍一区| 亚洲精品国产欧美在线观看| 日本一区二区久久| 不卡中文字幕在线观看| 欧美一区二区三区久久精品茉莉花| 91免费看国产| 天天舔天天干天天操| 五月天婷婷综合| 亚洲做受高潮无遮挡| 美腿丝袜在线亚洲一区| eeuss中文| 丁香5月婷婷久久| 日韩av电影在线播放| 在线激情网站| 日韩精品一区二区三区视频| 国产成人精品一区二三区| 国产嫩草影院久久久久| 激情在线观看视频| 亚洲黄色精品| 亚洲欧美久久234| 试看120秒一区二区三区| 亚洲人成伊人成综合网久久久| 中文字幕av影视| 亚洲精品欧美二区三区中文字幕| 亚洲午夜精品在线观看| 亚洲伊人观看| 女女同性女同一区二区三区按摩| 国内精品麻豆美女在线播放视频| 国产精品99免视看9| 秋霞在线午夜| 中文字幕精品一区二区精品| 成人av手机在线| 色偷偷久久人人79超碰人人澡| 亚洲色偷偷综合亚洲av伊人| 日韩高清在线观看| 久久99国产精品一区| 亚洲国产精品嫩草影院久久av| 国产一区二区在线免费视频| 啊啊啊久久久| 精品国产91洋老外米糕| 黄色av网站免费| 一区二区国产盗摄色噜噜| 欧美 日韩 成人| 成人黄色大片在线观看| 午夜国产一区二区三区| 国产农村妇女精品一二区| 中文字幕日韩一区二区三区不卡| 欧美一级三级| 97se亚洲综合在线| 激情久久99| 色偷偷噜噜噜亚洲男人| 五十路在线视频| 91精品福利在线一区二区三区| 国内精品福利视频| 亚洲国产日日夜夜| 精品国产国产综合精品| 国产午夜精品一区二区| 日韩少妇一区二区| 国产精品一区二区视频| 中文字幕av不卡在线| 国模精品一区| 九九99玖玖| 亚洲无线观看| 成人天堂噜噜噜| 外国电影一区二区| 日韩美女激情视频| 激情黄产视频在线免费观看| 久久99久久亚洲国产| 国产三级在线播放| 综合国产在线视频| 搞黄视频在线观看| 久久99国产精品免费网站| 欧美在线观看网站| av福利导福航大全在线| 久精品免费视频| 成人黄视频在线观看| 神马久久久久久| av天在线观看| 中文字幕欧美日韩在线| 国产三级视频在线| 亚洲日韩欧美视频| 日韩电影在线观看完整版| 亚洲黄色av网站| 四虎免费在线观看| 亚洲国产另类久久精品| 日本国产在线观看| 亚洲国模精品一区| 午夜国产在线视频| 日韩电视剧免费观看网站| 婷婷五月综合激情| 亚洲精品网址在线观看| 青青草娱乐在线| 一区二区三区视频在线| 91精品国产91久久久久游泳池| 在线看福利67194| 黄色在线论坛| 九九久久综合网站| gogo久久| 欧美孕妇与黑人孕交| 朝桐光一区二区| 国产剧情日韩欧美| 国产精选久久| 国产精品三区在线| 亚洲免费福利一区| 天堂av一区二区| 亚洲中无吗在线| 欧美精品自拍视频| 久久久成人网| 182午夜在线观看| 国产精品一区专区| 在线黄色免费网站| 国产日韩欧美精品一区| 情侣偷拍对白清晰饥渴难耐| 亚洲欧美一区二区久久| 91丝袜在线观看| 26uuu亚洲综合色| 91欧美一区二区三区| 国产高清精品在线| 亚洲永久无码7777kkk| 国产日韩精品久久久| 波兰性xxxxx极品hd| 一区二区三区精品| 国产99久久久| 在线不卡a资源高清| 亚洲第一页视频| 欧美午夜寂寞影院| 国产视频www| 亚洲激情第一页| 永久免费av在线| 久久久久女教师免费一区| 高潮一区二区| wwwxx欧美| jvid福利在线一区二区| 做爰高潮hd色即是空| 国产精品久久777777毛茸茸| 五月婷婷六月丁香激情| 成人国产一区二区三区精品| 一级黄色录像毛片| 亚洲图片有声小说| 中文字幕在线播出| 亚洲精品动漫久久久久| 男人天堂久久久| 欧美资源在线观看| 一区二区在线视频观看| 婷婷久久伊人| 国产精品一区毛片| 又色又爽又黄18网站| 国产精品国产三级国产普通话蜜臀 | 日韩免费高清在线观看| 精品国产不卡一区二区| 国产美女91呻吟求| 国产精品99久久免费观看| 亚洲伊人婷婷| 麻豆久久精品| xxxxxx黄色| 亚洲综合成人在线视频| 在线观看亚洲一区二区| 欧洲一区在线电影| 乱色精品无码一区二区国产盗| 日韩在线播放av| 深夜视频一区二区| 欧美精品久久| 中文久久精品| 亚洲高清无码久久| 亚洲精品中文在线观看| 中文字幕网址在线| 亚洲欧美在线一区| 男女羞羞在线观看| 成人免费观看网站| 午夜精品久久| 久久精品国产99久久99久久久| 国产清纯美女被跳蛋高潮一区二区久久w| 亚欧洲精品在线视频| 日韩视频一区二区三区在线播放| 在线视频91p| 国产精品久久久久久一区二区| 天海翼亚洲一区二区三区| 97视频久久久| jiyouzz国产精品久久| 美女毛片在线观看| 日韩免费高清av| 日本色护士高潮视频在线观看| 91亚洲国产成人久久精品网站| 97精品在线| 国产永久免费网站| 国产精品国产三级国产普通话三级| 中文字幕av免费观看| 综合136福利视频在线| 国产精品蜜月aⅴ在线| 亚洲欧洲另类精品久久综合| 美女视频黄免费的久久| 日本免费网站视频| 3d动漫精品啪啪| 蜜臀av在线| 国产精品视频一区二区三区经| 亚洲茄子视频| 国产网站无遮挡| 色婷婷综合久久久中文字幕| 国外av在线| 91精品啪在线观看麻豆免费 | 久久亚洲电影天堂| 无码国模国产在线观看| r级无码视频在线观看| 99国产精品久久久久| 人妻丰满熟妇av无码区| 中文欧美在线视频| 电影中文字幕一区二区| 91.com在线| 久久综合狠狠综合久久激情| 亚洲精品毛片一区二区三区| 深夜成人在线观看| 久久丁香四色| 国产网站免费在线观看| 国产女人aaa级久久久级| 国产绿帽一区二区三区| 久久久久久国产精品久久| 亚洲小说图片| 久国产精品视频| 天天色图综合网| chinese偷拍一区二区三区| 97人人模人人爽人人少妇| 国产精品日韩| 国产乱子轮xxx农村| 精品欧美一区二区在线观看| 巨大荫蒂视频欧美大片| 国产精品视频500部| 蜜桃视频在线观看一区二区| 欧美人妻精品一区二区三区| 亚洲久久久久久久久久| 亚州欧美在线| 免费在线观看亚洲视频| 国产精品久久777777| 天堂av一区二区三区| 国产在线视频一区| 国产视频欧美| 国产精品 欧美激情| 亚洲人成网站999久久久综合| 日韩高清二区|