精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产三级在线观看完整版| 美女av免费在线观看| 性猛交xxxx乱大交孕妇印度| 黑人一区二区| 国产视频在线一区二区| 国产日韩欧美久久| av剧情在线观看| 国产亚洲欧美中文| 99国产在线视频| 国内自拍视频在线播放| 99久久精品费精品国产风间由美| 欧美精品一区二区在线播放| www.色偷偷.com| 日韩伦理电影网站| 欧美激情一区在线观看| 99视频免费观看蜜桃视频| 日韩电影在线观看一区二区| 午夜欧美精品| 中文字幕日韩欧美在线视频| yjizz视频| 欧美xxxx性| 丁香五六月婷婷久久激情| 亚洲精品久久区二区三区蜜桃臀 | 日韩一区二区在线| 日韩av一区在线观看| 午夜xxxxx| 奇米777日韩| 亚洲国产美国国产综合一区二区| 一区二区三区四区不卡| 你懂的免费在线观看视频网站| 国产精品正在播放| 国产精品美乳在线观看| 男人的天堂一区二区| 女人色偷偷aa久久天堂| 色噜噜狠狠色综合网图区| 色天使在线视频| av在线亚洲色图| 91精品中文字幕一区二区三区| 99热成人精品热久久66| freexxx性亚洲精品| 亚洲另类在线制服丝袜| 懂色av一区二区三区四区五区| 粉嫩一区二区三区国产精品| 久久天天做天天爱综合色| 国产视色精品亚洲一区二区| 亚洲黄色小说网| 狠狠色综合播放一区二区| 国产精品老牛影院在线观看| 高潮毛片又色又爽免费| 久久永久免费| 浅井舞香一区二区| 久久亚洲精品石原莉奈| 丝袜美腿亚洲一区二区图片| 欧美一级淫片aaaaaaa视频| 国产一级免费观看| 亚洲高清激情| 午夜剧场成人观在线视频免费观看| 久久久久久激情| 精品99视频| 国内精品免费午夜毛片| 国产精品美女毛片真酒店| 亚洲第一区色| 91精品国产高清自在线看超| 免费黄色网址在线| 久久亚洲电影| 国产精品入口夜色视频大尺度| 中文字幕视频在线播放| 久久99国产精品麻豆| 91日韩在线视频| www.av在线.com| 成人黄色网址在线观看| 久久久久久久久久久久久久一区 | 日韩精品视频在线| 国产美女喷水视频| 亚洲资源网你懂的| 中文字幕成人在线| 男人操女人的视频网站| 黄色亚洲大片免费在线观看| 69视频在线免费观看| 成人免费视频国产免费| 老司机一区二区| 亚洲专区中文字幕| 天天干天天舔天天射| 久久久久久久综合色一本| 亚洲在线欧美| 污影院在线观看| 日韩欧美亚洲成人| 在线观看免费不卡av| 97久久精品| 亚洲欧美一区二区三区四区| 日韩av网站在线播放| 欧美日韩蜜桃| 欧美综合第一页| 亚洲午夜精品久久久| 粉嫩高潮美女一区二区三区| 欧美激情国产日韩| 国产网站在线免费观看| 精品久久久久久久久久久| 杨幂毛片午夜性生毛片| 成人看片爽爽爽| 在线精品国产成人综合| 久久国产免费观看| 日韩制服丝袜先锋影音| 97超级碰碰| 精品推荐蜜桃传媒| 亚洲卡通动漫在线| 欧美伦理片在线看| 成人台湾亚洲精品一区二区| 最好看的2019年中文视频| 日韩精品一区二区av| 免费在线观看精品| 激情小说网站亚洲综合网 | 超碰成人97| 日韩亚洲一区二区| 色屁屁影院www国产高清麻豆| 国产一区二区看久久| 麻豆久久久av免费| 日本在线视频网址| 欧美日韩精品久久久| 国产又粗又长又爽| 欧美国产三区| 国产精品亚洲自拍| 免费a在线观看| 午夜视频在线观看一区二区三区| 欧洲美女亚洲激情| 欧美日韩一二| 欧美一级bbbbb性bbbb喷潮片| www国产一区| 国产精品久久久久久久久晋中| www.玖玖玖| 久久精品国产亚洲5555| 欧美人与性动交| 国产色综合视频| 国产精品成人午夜| 亚洲天堂网一区| 狠狠做深爱婷婷综合一区| 国产91精品久久久久| 天天综合网天天综合| 一区二区三区在线高清| 日韩成人av免费| 欧美电影《轻佻寡妇》| 国产精品欧美久久久| 国产女主播在线直播| 色综合天天视频在线观看 | 欧美激情一区二区| 99免费视频观看| 视频一区在线观看| 欧美孕妇与黑人孕交| 色欲av永久无码精品无码蜜桃 | 不卡一区二区在线| 国产va亚洲va在线va| 国产精品久久久网站| 久久久久久久久久久av| 日本激情视频网站| 午夜视频在线观看一区二区三区| 久久久午夜精品福利内容| 激情欧美丁香| 好吊色欧美一区二区三区四区 | 国产精品视频一区二区高潮| 国产区视频在线| 精品视频一区 二区 三区| 久久精品三级视频| 国内精品伊人久久久久av影院| 在线观看亚洲视频啊啊啊啊| 欧美综合影院| 久久成人18免费网站| 午夜精品在线播放| 五月天久久比比资源色| 精品国产av无码| 免费观看日韩电影| 国产av不卡一区二区| 日韩高清二区| 77777少妇光屁股久久一区| 日韩a级作爱片一二三区免费观看| 欧美视频中文字幕在线| 黄色av片三级三级三级免费看| 国产专区欧美精品| 免费毛片网站在线观看| 欧美极品中文字幕| 91精品久久久久久久久久久| 成人免费高清观看| 亚洲男女自偷自拍图片另类| 在线视频1卡二卡三卡| 亚洲美女淫视频| av2014天堂网| 久久精品国产免费| 韩日视频在线观看| 国产99久久精品一区二区300| 国产日韩视频在线观看| 黑人精品视频| 一区国产精品视频| 风流老熟女一区二区三区| 色综合色综合色综合| 秋霞欧美一区二区三区视频免费| 成人美女视频在线看| 日韩av片网站| 在线国产欧美| 一区不卡视频| 欧美在线关看| 亚洲一区二区久久久久久| 中文字幕乱码中文乱码51精品| 色婷婷综合久久久久中文字幕1| 午夜精品一区二区三| 欧美综合亚洲图片综合区| 久久亚洲成人av| 中文字幕+乱码+中文字幕一区| 折磨小男生性器羞耻的故事| 奇米综合一区二区三区精品视频| 日韩亚洲欧美视频| 欧美成人直播| 欧美一区二区三区在线免费观看 | 精品视频导航| www.久久爱.com| 国产精品久久久久久久久久99| 888av在线视频| 久久国产色av| 日本中文字幕在线视频| 精品亚洲aⅴ在线观看| 精品国自产拍在线观看| 欧美日韩精品一区二区三区| 无码人妻丰满熟妇区五十路| 亚洲高清在线视频| 国产极品国产极品| 国产精品人妖ts系列视频| av2014天堂网| heyzo一本久久综合| av影片在线播放| 九一九一国产精品| 性欧美极品xxxx欧美一区二区| 一区二区福利| 日本欧美视频在线观看| 欧美日本精品| 日本丰满大乳奶| 天天综合一区| 自拍亚洲欧美老师丝袜| 久久福利影院| 亚洲精品一卡二卡三卡四卡| 国内精品久久久久久久影视简单 | 国产伦精品一区二区三区千人斩 | 成人黄色在线观看视频| 91麻豆精品国产91久久久使用方法 | 亚洲国产视频一区二区| 青青操视频在线播放| 日韩美女视频19| 久久高清内射无套| 国产精品国产a级| 顶级黑人搡bbw搡bbbb搡| 一区精品在线播放| 老司机成人免费视频| 亚洲丝袜自拍清纯另类| 人人澡人人澡人人看| 成人欧美一区二区三区| 无码人妻精品中文字幕 | 久久综合色综合| 一区二区免费在线| 国产无精乱码一区二区三区| 亚洲成a人片在线观看中文| 日本网站在线免费观看| 日韩欧美在线第一页| 欧产日产国产69| 欧美午夜宅男影院| 国产精品久久综合青草亚洲AV| 91麻豆精品91久久久久久清纯 | 国产精品迅雷| 国产精品福利在线| 亚洲精品乱码日韩| 97国产超碰| 日韩深夜福利| 日韩欧美一区二区三区四区| 日韩精品第一区| 久久免费视频2| 黄色成人在线网址| 116极品美女午夜一级| 日韩福利视频网| 免费网站在线观看黄| 成人午夜私人影院| 久久精品老司机| 国产精品久久久久精k8| 免费在线看黄网址| 91久久精品国产91性色tv| 一区二区久久精品66国产精品| 日韩午夜电影在线观看| 手机亚洲第一页| 色吧影院999| 蜜臀av在线播放| 日本久久久久久| 欧美日韩破处视频| 国产精品一区二| 精品国产欧美日韩| 女人床在线观看| 午夜在线视频观看日韩17c| 亚洲无在线观看| 99久久精品免费看国产| 色噜噜噜噜噜噜| 亚洲成人综合网站| 国产精品午夜一区二区| 亚洲精品在线三区| 免费超碰在线| 欧美一区二区视频97| 日韩精品视频一区二区三区| 欧美日韩一区二区三区在线观看免| 国产电影一区二区在线观看| 久久精品视频16| 激情亚洲综合在线| 国产呦小j女精品视频| 一区二区三区四区在线播放| 凹凸精品一区二区三区| 亚洲国内精品在线| 黄色在线观看网站| 国产成人亚洲精品| 久久精品色播| 日日噜噜夜夜狠狠久久丁香五月| 老司机午夜精品视频| 国产调教打屁股xxxx网站| 欧美激情一区不卡| 国产一级做a爱片久久毛片a| 日韩一区二区在线免费观看| 北岛玲日韩精品一区二区三区| 91av在线影院| 成人偷拍自拍| 日本高清视频免费在线观看| 蜜乳av一区二区| 91视频免费观看网站| 午夜精品一区二区三区免费视频| av 一区二区三区| 日韩在线观看av| 成人在线爆射| 免费国产一区二区| 亚洲久久一区二区| 无码国产精品久久一区免费| 亚洲私人影院在线观看| 亚洲最新av网站| 色偷偷9999www| jizz欧美| 久久亚洲国产精品日日av夜夜| 亚洲第一黄色| 美女伦理水蜜桃4| 亚洲一区二区三区四区不卡| 精品人妻无码一区二区色欲产成人| 精品国产欧美一区二区五十路 | 欧美无砖砖区免费| 男女网站在线观看| 欧美综合在线观看| 要久久电视剧全集免费| 91猫先生在线| 26uuu亚洲综合色欧美 | 欧美军同video69gay| 日本中文字幕视频在线| 成人黄色大片在线免费观看| 99久久精品国产亚洲精品| 日韩成人av免费| 一区二区三区资源| 丰满人妻一区二区| 久久久女女女女999久久| 久久亚洲黄色| 日本免费一级视频| 国产女人aaa级久久久级| 正在播放木下凛凛xv99| 中文字幕日韩在线播放| av在线亚洲一区| 青春草国产视频| av电影一区二区| 中文字幕av第一页| www亚洲精品| 亚洲网一区二区三区| www.av片| 久久久www成人免费毛片麻豆| 国内av在线播放| 精品久久久av| 成午夜精品一区二区三区软件| 无码中文字幕色专区| 久久久一区二区三区捆绑**| 中文字幕一区二区人妻视频| 精品国产依人香蕉在线精品| 9l视频自拍九色9l视频成人| 青青青国产在线观看| 国产午夜久久久久| 国产美女精品视频国产| 欧美激情亚洲一区| 美日韩中文字幕| 色婷婷激情视频| 午夜亚洲国产au精品一区二区| 超碰免费97在线观看| 超碰97国产在线| 久久久www| 欧美黄色aaa| 亚洲视频在线播放| 免费观看亚洲视频大全| 黄www在线观看| 亚洲天堂免费看| 日韩在线免费看| 亚洲va久久久噜噜噜| 国产精品综合色区在线观看| 五月综合色婷婷| 亚洲精品自拍视频| 精品精品视频| 天天爽天天爽夜夜爽| 亚洲一区二区精品3399| 在线观看精品一区二区三区| 精品高清视频|