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

干貨 | 徹底理解ANDROID BINDER通信架構(gòu)(上)

開(kāi)發(fā) 開(kāi)發(fā)工具
Android內(nèi)核是基于Linux系統(tǒng), 而Linux現(xiàn)存多種進(jìn)程間IPC方式:管道, 消息隊(duì)列, 共享內(nèi)存, 套接字, 信號(hào)量, 信號(hào). 為什么Android非要用Binder來(lái)進(jìn)行進(jìn)程間通信呢?

 [[177268]]

一. 引言

1.1 Binder架構(gòu)的思考

Android內(nèi)核是基于Linux系統(tǒng), 而Linux現(xiàn)存多種進(jìn)程間IPC方式:管道, 消息隊(duì)列, 共享內(nèi)存, 套接字, 信號(hào)量, 信號(hào). 為什么Android非要用Binder來(lái)進(jìn)行進(jìn)程間通信呢?

在說(shuō)到Binder架構(gòu)之前, 先簡(jiǎn)單說(shuō)說(shuō)大家熟悉的TCP/IP的五層通信體系結(jié)構(gòu):

  • 應(yīng)用層: 直接為用戶(hù)提供服務(wù);
  • 傳輸層: 傳輸?shù)氖菆?bào)文(TCP數(shù)據(jù))或者用戶(hù)數(shù)據(jù)報(bào)(UDP數(shù)據(jù))
  • 網(wǎng)絡(luò)層: 傳輸?shù)氖前?Packet), 例如路由器
  • 數(shù)據(jù)鏈路層: 傳輸?shù)氖菐?Frame), 例如以太網(wǎng)交換機(jī)
  • 物理層: 相鄰節(jié)點(diǎn)間傳輸bit, 例如集線(xiàn)器,雙絞線(xiàn)等
  • 這是經(jīng)典的五層TPC/IP協(xié)議體系, 這樣分層設(shè)計(jì)的思想, 讓每一個(gè)子問(wèn)題都設(shè)計(jì)成一個(gè)獨(dú)立的協(xié)議, 這協(xié)議的設(shè)計(jì)/分析/實(shí)現(xiàn)/測(cè)試都變得更加簡(jiǎn)單:
  • 層與層具有獨(dú)立性, 例如應(yīng)用層可以使用傳輸層提供的功能而無(wú)需知曉其實(shí)現(xiàn)原理;
  • 設(shè)計(jì)靈活, 層與層之間都定義好接口, 即便層內(nèi)方法發(fā)生變化,只有接口不變, 對(duì)這個(gè)系統(tǒng)便毫無(wú)影響;
  • 結(jié)構(gòu)的解耦合, 讓每一層可以用更適合的技術(shù)方案, 更合適的語(yǔ)言;
  • 方便維護(hù), 可分層調(diào)試和定位問(wèn)題;

Binder架構(gòu)也是采用分層架構(gòu)設(shè)計(jì), 每一層都有其不同的功能:

  • Java應(yīng)用層: 對(duì)于上層應(yīng)用通過(guò)調(diào)用AMP.startService, 完全可以不用關(guān)心底層,經(jīng)過(guò)層層調(diào)用,最終必然會(huì)調(diào)用到AMS.startService.
  • Java IPC層: Binder通信是采用C/S架構(gòu), Android系統(tǒng)的基礎(chǔ)架構(gòu)便已設(shè)計(jì)好Binder在Java framework層的Binder客戶(hù)類(lèi)BinderProxy和服務(wù)類(lèi)Binder;
  • Native IPC層: 對(duì)于Native層,如果需要直接使用Binder(比如media相關(guān)), 則可以直接使用BpBinder和BBinder(當(dāng)然這里還有JavaBBinder)即可, 對(duì)于上一層Java IPC的通信也是基于這個(gè)層面.
  • Kernel物理層: 這里是Binder Driver, 前面3層都跑在用戶(hù)空間,對(duì)于用戶(hù)空間的內(nèi)存資源是不共享的,每個(gè)Android的進(jìn)程只能運(yùn)行在自己進(jìn)程所擁有的虛擬地址空間, 而內(nèi)核空間卻是可共享的. 真正通信的核心環(huán)節(jié)還是在Binder Driver.

1.2 分析起點(diǎn)

Binder在Android系統(tǒng)使用頗為廣泛, 幾乎是整個(gè)Android架構(gòu)的頂梁柱, Binder系統(tǒng)如此龐大, 那么這里需要尋求一個(gè)出發(fā)點(diǎn)來(lái)穿針引線(xiàn), 一窺視Binder全貌. 那么本文將從全新的視角,以startService流程分析 為例子來(lái)說(shuō)說(shuō)Binder所其作用.首先在發(fā)起方進(jìn)程調(diào)用AMP.startService,經(jīng)過(guò)binder驅(qū)動(dòng),最終調(diào)用系統(tǒng)進(jìn)程AMS.startService,如下圖:

AMP和AMN都是實(shí)現(xiàn)了IActivityManager接口,AMS繼承于AMN. 其中AMP作為Binder的客戶(hù)端,運(yùn)行在各個(gè)app所在進(jìn)程, AMN(或AMS)運(yùn)行在系統(tǒng)進(jìn)程system_server.

1.3 Binder IPC原理

Binder通信采用C/S架構(gòu),從組件視角來(lái)說(shuō),包含Client、Server、ServiceManager以及binder驅(qū)動(dòng),其中ServiceManager用于管理系統(tǒng)中的各種服務(wù)。下面說(shuō)說(shuō)startService過(guò)程所涉及的Binder對(duì)象的架構(gòu)圖:

可以看出無(wú)論是注冊(cè)服務(wù)和獲取服務(wù)的過(guò)程都需要ServiceManager,需要注意的是此處的Service Manager是指Native層的ServiceManager(C++),并非指framework層的ServiceManager(Java)。ServiceManager是整個(gè)Binder通信機(jī)制的大管家,是Android進(jìn)程間通信機(jī)制Binder的守護(hù)進(jìn)程,Client端和Server端通信時(shí)都需要先獲取Service Manager接口,才能開(kāi)始通信服務(wù), 當(dāng)然查找懂啊目標(biāo)信息可以緩存起來(lái)則不需要每次都向ServiceManager請(qǐng)求。

圖中Client/Server/ServiceManage之間的相互通信都是基于Binder機(jī)制。既然基于Binder機(jī)制通信,那么同樣也是C/S架構(gòu),則圖中的3大步驟都有相應(yīng)的Client端與Server端。

 

  1. 注冊(cè)服務(wù):首先AMS注冊(cè)到ServiceManager。該過(guò)程:AMS所在進(jìn)程(system_server)是客戶(hù)端,ServiceManager是服務(wù)端。
  2. 獲取服務(wù):Client進(jìn)程使用AMS前,須先向ServiceManager中獲取AMS的代理類(lèi)AMP。該過(guò)程:AMP所在進(jìn)程(app process)是客戶(hù)端,ServiceManager是服務(wù)端。
  3. 使用服務(wù): app進(jìn)程根據(jù)得到的代理類(lèi)AMP,便可以直接與AMS所在進(jìn)程交互。該過(guò)程:AMP所在進(jìn)程(app process)是客戶(hù)端,AMS所在進(jìn)程(system_server)是服務(wù)端。

圖中的Client,Server,Service Manager之間交互都是虛線(xiàn)表示,是由于它們彼此之間不是直接交互的,而是都通過(guò)與Binder Driver進(jìn)行交互的,從而實(shí)現(xiàn)IPC通信方式。其中Binder驅(qū)動(dòng)位于內(nèi)核空間,Client,Server,Service Manager位于用戶(hù)空間。Binder驅(qū)動(dòng)和Service Manager可以看做是Android平臺(tái)的基礎(chǔ)架構(gòu),而Client和Server是Android的應(yīng)用層.

這3大過(guò)程每一次都是一個(gè)完整的Binder IPC過(guò)程, 接下來(lái)從源碼角度, 僅介紹第3過(guò)程使用服務(wù), 即展開(kāi)AMP.startService是如何調(diào)用到AMS.startService的過(guò)程.

Tips: 如果你只想了解大致過(guò)程,并不打算細(xì)扣源碼, 那么你可以略過(guò)通信過(guò)程源碼分析, 僅看本文***段落和***段落也能對(duì)Binder所有理解.

二. 通信過(guò)程

2.1 AMP.startService

[→ ActivityManagerNative.java ::ActivityManagerProxy]

主要功能:

  • 獲取或創(chuàng)建兩個(gè)Parcel對(duì)象,data用于發(fā)送數(shù)據(jù),reply用于接收應(yīng)答數(shù)據(jù).
  • 將startService相關(guān)數(shù)據(jù)都封裝到Parcel對(duì)象data, 其中descriptor = “android.app.IActivityManager”;
  • 通過(guò)Binder傳遞數(shù)據(jù),并將應(yīng)答消息寫(xiě)入reply;
  • 讀取reply應(yīng)答消息的異常情況和組件對(duì)象;

2.2 Parcel.obtain

[→ Parcel.java]

sOwnedPool是一個(gè)大小為6,存放著parcel對(duì)象的緩存池,這樣設(shè)計(jì)的目標(biāo)是用于節(jié)省每次都創(chuàng)建Parcel對(duì)象的開(kāi)銷(xiāo)。obtain()方法的作用:

先嘗試從緩存池sOwnedPool中查詢(xún)是否存在緩存Parcel對(duì)象,當(dāng)存在則直接返回該對(duì)象;

如果沒(méi)有可用的Parcel對(duì)象,則直接創(chuàng)建Parcel對(duì)象。

2.2.1 new Parcel

[→ Parcel.java]

nativeCreate這是native方法,經(jīng)過(guò)JNI進(jìn)入native層, 調(diào)用android_os_Parcel_create()方法.

2.2.2 android_os_Parcel_create

[→ android_os_Parcel.cpp]

創(chuàng)建C++層的Parcel對(duì)象, 該對(duì)象指針強(qiáng)制轉(zhuǎn)換為long型, 并保存到Java層的mNativePtr對(duì)象. 創(chuàng)建完P(guān)arcel對(duì)象利用Parcel對(duì)象寫(xiě)數(shù)據(jù). 接下來(lái)以writeString為例.

2.2.3 Parcel.recycle

將不再使用的Parcel對(duì)象放入緩存池,可回收重復(fù)利用,當(dāng)緩存池已滿(mǎn)則不再加入緩存池。這里有兩個(gè)Parcel線(xiàn)程池,mOwnsNativeParcelObject變量來(lái)決定:

mOwnsNativeParcelObject=true, 即調(diào)用不帶參數(shù)obtain()方法獲取的對(duì)象, 回收時(shí)會(huì)放入sOwnedPool對(duì)象池;

mOwnsNativeParcelObject=false, 即調(diào)用帶nativePtr參數(shù)的obtain(long)方法獲取的對(duì)象, 回收時(shí)會(huì)放入sHolderPool對(duì)象池;

2.3 writeString

[→ Parcel.java]

2.3.1 nativeWriteString

[→ android_os_Parcel.cpp]

2.3.2 writeString16

[→ Parcel.cpp]

Tips: 除了writeString(),在Parcel.java中大量的native方法, 都是調(diào)用android_os_Parcel.cpp相對(duì)應(yīng)的方法, 該方法再調(diào)用Parcel.cpp中對(duì)應(yīng)的方法.

調(diào)用流程: Parcel.java –> android_os_Parcel.cpp –> Parcel.cpp.

2.4 mRemote究竟為何物

mRemote的出生,要出先說(shuō)說(shuō)ActivityManagerProxy對(duì)象(簡(jiǎn)稱(chēng)AMP)創(chuàng)建說(shuō)起, AMP是通過(guò)ActivityManagerNative.getDefault()來(lái)獲取的.

2.4.1 AMN.getDefault

[→ ActivityManagerNative.java]

gDefault的數(shù)據(jù)類(lèi)型為Singleton<IActivityManager>, 這是一個(gè)單例模式, 接下來(lái)看看Singleto.get()的過(guò)程

2.4.2 gDefault.get

***調(diào)用時(shí)需要?jiǎng)?chuàng)建,創(chuàng)建完之后保持到mInstance對(duì)象,之后可直接使用.

2.4.3 gDefault.create

文章Binder系列7—framework層分析,可知ServiceManager.getService(“activity”)返回的是指向目標(biāo)服務(wù)AMS的代理對(duì)象BinderProxy對(duì)象,由該代理對(duì)象可以找到目標(biāo)服務(wù)AMS所在進(jìn)程

2.4.4 AMN.asInterface

[→ ActivityManagerNative.java]

此時(shí)obj為BinderProxy對(duì)象, 記錄著遠(yuǎn)程進(jìn)程system_server中AMS服務(wù)的binder線(xiàn)程的handle.

2.4.5 queryLocalInterface

[Binder.java]

對(duì)于Binder IPC的過(guò)程中, 同一個(gè)進(jìn)程的調(diào)用則會(huì)是asInterface()方法返回的便是本地的Binder對(duì)象;對(duì)于不同進(jìn)程的調(diào)用則會(huì)是遠(yuǎn)程代理對(duì)象BinderProxy.

2.4.6 創(chuàng)建AMP

[→ ActivityManagerNative.java :: AMP]

可知mRemote便是指向AMS服務(wù)的BinderProxy對(duì)象。

2.5 mRemote.transact

[→ Binder.java ::BinderProxy]

mRemote.transact()方法中的code=START_SERVICE_TRANSACTION, data保存了descriptor,caller, intent,resolvedType, callingPackage, userId這6項(xiàng)信息。

transactNative是native方法,經(jīng)過(guò)jni調(diào)用android_os_BinderProxy_transact方法。

2.6 android_os_BinderProxy_transact

[→ android_util_Binder.cpp]

gBinderProxyOffsets.mObject中保存的是BpBinder對(duì)象, 這是開(kāi)機(jī)時(shí)Zygote調(diào)用AndroidRuntime::startReg方法來(lái)完成jni方法的注冊(cè).

其中register_android_os_Binder()過(guò)程就有一個(gè)初始并注冊(cè)BinderProxy的操作,完成gBinderProxyOffsets的賦值過(guò)程. 接下來(lái)就進(jìn)入該方法.

2.7 BpBinder.transact

[→ BpBinder.cpp]

IPCThreadState::self()采用單例模式,保證每個(gè)線(xiàn)程只有一個(gè)實(shí)例對(duì)象。

2.8 IPC.transact

[→ IPCThreadState.cpp]

transact主要過(guò)程:

  • 先執(zhí)行writeTransactionData()已向Parcel數(shù)據(jù)類(lèi)型的mOut寫(xiě)入數(shù)據(jù),此時(shí)mIn還沒(méi)有數(shù)據(jù);
  • 然后執(zhí)行waitForResponse()方法,循環(huán)執(zhí)行,直到收到應(yīng)答消息. 調(diào)用talkWithDriver()跟驅(qū)動(dòng)交互,收到應(yīng)答消息,便會(huì)寫(xiě)入mIn, 則根據(jù)收到的不同響應(yīng)嗎,執(zhí)行相應(yīng)的操作。

此處調(diào)用waitForResponse根據(jù)是否有設(shè)置TF_ONE_WAY的標(biāo)記:

  • 當(dāng)已設(shè)置oneway時(shí), 則調(diào)用waitForResponse(NULL, NULL);
  • 當(dāng)未設(shè)置oneway時(shí), 則調(diào)用waitForResponse(reply) 或 waitForResponse(&fakeReply)

2.9 IPC.writeTransactionData

[→ IPCThreadState.cpp]

 

【本文是51CTO專(zhuān)欄“小米開(kāi)放平臺(tái)”原創(chuàng)文章,“小米開(kāi)放平臺(tái)”微信公眾號(hào)xiaomideveloper】

責(zé)任編輯:武曉燕 來(lái)源: 小米開(kāi)放平臺(tái)
相關(guān)推薦

2016-11-28 14:44:55

ANDROID BIN通信架構(gòu)

2021-05-13 08:55:33

Android架構(gòu)功能

2019-01-09 08:31:07

2018-02-26 16:07:48

Android3DDepth

2021-09-07 08:49:35

Android

2021-08-15 08:11:54

AndroidSynchronize關(guān)鍵字

2021-09-04 07:29:57

Android

2020-03-03 14:15:49

Redis持久化數(shù)據(jù)庫(kù)

2019-06-11 14:45:25

2019-11-07 10:37:36

CookieSessionToken

2025-08-28 07:58:18

2024-03-15 08:23:26

異步編程函數(shù)

2024-11-25 16:39:17

2025-08-07 08:22:57

2022-10-24 08:08:27

閉包編譯器

2023-12-28 10:39:57

數(shù)組節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)

2021-12-27 09:33:12

內(nèi)存泄漏程序

2023-01-06 08:42:41

動(dòng)態(tài)規(guī)劃字符

2019-12-10 13:55:10

Go指針存儲(chǔ)

2023-09-07 08:15:58

場(chǎng)景同步異步
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧洲精品国产| 欧美中文在线视频| 亚洲精品一二三四| 丁香花视频在线观看| 99久久久久久| 国产精品高潮粉嫩av| 疯狂试爱三2浴室激情视频| 一区二区三区在线免费看| 精品久久久久久国产| 色姑娘综合av| 亚洲第一精品网站| 天堂一区二区在线免费观看| 日韩中文在线不卡| 亚洲熟女一区二区三区| 欧美大片免费高清观看| 免费看日本一区二区| 欧美在线观看禁18| www.欧美黄色| 可以在线观看的av| 国产一区视频在线看| 日av在线播放中文不卡| 午夜国产福利一区二区| 国产成人精品三级高清久久91| 中文字幕在线不卡视频| 国产欧美欧洲| 国产精品乱码久久久| 99精品免费网| 亚洲大尺度美女在线| 亚洲乱码日产精品bd在线观看| 五月婷婷开心中文字幕| 丝袜国产日韩另类美女| 欧美交受高潮1| 色噜噜噜噜噜噜| 欧美日日夜夜| 欧美v亚洲v综合ⅴ国产v| 牛夜精品久久久久久久| 日本福利午夜视频在线| 国产精品99久久久久久久vr| 国产精品wwwwww| 日韩手机在线观看| 女主播福利一区| 亚洲最大在线视频| 深爱五月激情网| 国产亚洲成av人片在线观黄桃| 欧美日韩不卡在线| 激情婷婷综合网| 日本不良网站在线观看| 亚洲电影在线免费观看| 四虎4hu永久免费入口| gogogo高清在线观看免费完整版| 91麻豆国产自产在线观看| 国产精品区免费视频| 亚洲春色一区二区三区| 国产乱色国产精品免费视频| 国产日本欧美一区| 这里只有精品6| 日韩av在线发布| 国产a∨精品一区二区三区不卡| 久久狠狠高潮亚洲精品| 亚洲裸体俱乐部裸体舞表演av| 欧美激情一区二区三区高清视频| 国产又黄又爽又无遮挡| 外国成人免费视频| 久久精品视频va| caoporn91| 中文字幕一区二区av| 久久久精品一区| 天堂网avav| 欧美在线网站| 欧美精品手机在线| 精品无码一区二区三区电影桃花 | 搡老熟女老女人一区二区| 国产精品乱战久久久| 亚洲国产精久久久久久久| 亚洲少妇18p| 蜜乳av综合| 中文字幕在线观看日韩| jizz亚洲少妇| 91久久久久| 热99久久精品| 中文字幕第31页| 九九**精品视频免费播放| 亚洲999一在线观看www| 亚洲经典一区二区| 2020国产精品久久精品美国| 国产成人精品av在线| 高潮毛片又色又爽免费| 理论片日本一区| 99九九电视剧免费观看| 婷婷丁香花五月天| 91免费观看在线| 亚洲一区二区三区乱码| 在线看福利影| 日韩欧美在线看| 一区二区三区欧美精品| 在线精品自拍| 亚洲欧美精品一区二区| 欧美成人久久久免费播放| 欧美激情aⅴ一区二区三区| 26uuu另类亚洲欧美日本老年| 蜜桃av免费观看| 欧美日本亚洲韩国国产| 2020国产精品视频| 国产又黄又大又爽| 99精品视频免费在线观看| 水蜜桃亚洲一二三四在线| 欧美xxxx免费虐| 91国偷自产一区二区三区成为亚洲经典| www.69av| 香蕉视频亚洲一级| 日韩亚洲欧美高清| 中文字幕免费看| 亚洲区综合中文字幕日日| 2024亚洲男人天堂| av男人天堂av| 久久99国产精品尤物| 国产精品亚洲不卡a| h网站视频在线观看| 午夜欧美一区二区三区在线播放| 99热都是精品| 国产免费不卡| 欧美性生交xxxxxdddd| 91插插插影院| 国产尤物久久久| 久久久久久久成人| 国产精品人人妻人人爽| 久久久亚洲午夜电影| 女人色极品影院| 男人天堂久久| 国产亚洲精品美女久久久| 国产精品99精品| 黄一区二区三区| 日韩av一区二区三区在线 | 国产精品青草久久| 国产麻花豆剧传媒精品mv在线| 91精品久久久久久综合五月天| 中文字幕精品一区久久久久| 一级片中文字幕| 国产99久久精品| 国产91免费视频| 天天综合天天综合| 一区二区三区精品| 欧美成人手机在线视频| 日韩激情在线| 久久亚洲欧美日韩精品专区| 日本中文在线视频| 美女网站视频久久| 四虎影视永久免费在线观看一区二区三区| h片在线观看下载| 日韩免费观看高清完整版在线观看| 亚洲色图100p| 久久99蜜桃精品| 亚洲综合五月天| 日韩电影精品| 色偷偷av亚洲男人的天堂| 最近中文字幕在线观看| 国产伦精品一区二区三区视频青涩| 视频一区视频二区视频三区视频四区国产 | 精品国产伦一区二区三| 中文字幕在线观看不卡| 992tv人人草| 欧美激情综合色综合啪啪| 99r国产精品视频| 欧美hdxxx| 日韩成人在线播放| 狠狠人妻久久久久久综合| 久久免费视频一区| 日本xxxx黄色| 91精品啪在线观看国产81旧版| 91久久国产婷婷一区二区| 国产剧情在线| 亚洲成人中文在线| 免费日本黄色网址| 久久久xxx| 亚洲永久一区二区三区在线| 99tv成人影院| 欧美极品在线播放| 男操女在线观看| 欧美日韩国产综合草草| 男人与禽猛交狂配| 成人av电影免费在线播放| 黄色a级片免费| 成人影视亚洲图片在线| 久久久久久国产免费| 亚洲aaa在线观看| 欧美日韩国产在线播放| japanese中文字幕| 国产资源精品在线观看| 欧美在线一区视频| 欧美一区二区三区高清视频| 91精品国产综合久久久久久久久| 91蜜桃在线视频| 日韩av综合中文字幕| 亚洲视频在线观看免费视频| 一区二区三区四区不卡在线| 国产制服丝袜在线| 久久国产欧美日韩精品| 国产a级片网站| 成久久久网站| 国产超碰91| 亚洲天堂1区| 亚洲欧美日韩精品| 国产一区二区在线视频聊天| 亚洲成人久久影院| 国产真人真事毛片视频| 懂色一区二区三区免费观看| 能看的毛片网站| 欧美三级乱码| 欧洲精品一区色| 97se亚洲| 国产综合久久久久| 激情视频网站在线播放色| 日韩中文视频免费在线观看| 三级视频在线| 日韩精品一区二区三区老鸭窝| www.久久精品视频| 亚洲一区二区欧美| 色哟哟一一国产精品| 久久只精品国产| www.美色吧.com| 久久99精品国产| 国产又大又黄又粗的视频| 亚洲国产网站| 久久视频免费在线| 日韩欧美高清| 欧美午夜精品理论片a级大开眼界 欧美午夜精品久久久久免费视 | 亚洲性视频网址| 欧美一级在线免费观看| 欧美一区二区日韩| 在线免费看av网站| 国产欧美一区二区在线| 欧洲一级黄色片| 成人亚洲精品久久久久软件| 九九热视频免费| 蜜桃视频免费观看一区| 国产成人精品无码播放| 国产一区二区三区久久久久久久久| 亚洲av综合色区| 久久裸体网站| 亚洲mm色国产网站| www.26天天久久天堂| 国产91在线视频| 中文不卡1区2区3区| 97久久精品在线| 黄色网址在线播放| 欧美无人高清视频在线观看| 亚洲 欧美 成人| 欧美日韩免费看| 成人精品在线看| 欧美日韩综合视频网址| 黄网在线观看视频| 图片区小说区国产精品视频| 久草视频在线免费看| 亚洲激情综合网| 波多野结衣在线网址| 亚洲另类中文字| 青青草原国产视频| 一级日本不卡的影视| 国产一级二级三级| 五月婷婷欧美视频| 国产成人综合欧美精品久久| 欧美性猛交xxxx免费看漫画 | 国产成人激情视频| 在线观看欧美日韩电影| 国产999精品久久久| 亚洲www啪成人一区二区| 国产精品九九久久久久久久| 日本成人福利| 成人有码在线视频| 一本色道69色精品综合久久| 国产欧美日韩亚洲| 国产麻豆精品久久| 这里只有精品66| 欧美日韩亚洲一区三区 | 日本亚洲三级在线| 最新免费av网址| 国产精品99久久久久久久女警| 男女性杂交内射妇女bbwxz| 91在线观看免费视频| 欧美做受xxxxxⅹ性视频| 中文字幕成人网| 欧美第一页在线观看| 亚洲成人激情av| 超碰在线97观看| 日韩欧美一区在线观看| 外国精品视频在线观看 | 亚洲xxxx3d| 美女一区2区| 欧美在线播放一区| 亚洲欧美综合久久久| 免费在线观看亚洲视频| 日韩国产高清影视| 亚洲妇女无套内射精| 91免费在线播放| 顶级黑人搡bbw搡bbbb搡| 亚洲国产精品精华液网站| 成人公开免费视频| 欧美一区二区三区免费视频| 涩爱av在线播放一区二区| 日韩在线观看免费高清完整版| 久草在线视频福利| 国产精品久久久久久久久久尿| 麻豆精品久久| 成人疯狂猛交xxx| eeuss国产一区二区三区四区| 欧美欧美一区二区| 欧美va亚洲va日韩∨a综合色| 日本三级免费观看| 国产成人超碰人人澡人人澡| 亚洲黄色小说视频| 亚洲图片欧美色图| 一本久道久久综合无码中文| 亚洲国产小视频在线观看| 日韩一卡二卡在线| 色噜噜久久综合伊人一本| а√在线中文在线新版| 91精品久久久久久久久青青| 亚洲妇女av| 日韩精品一区在线视频| 国产中文字幕一区| 国产真人做爰视频免费| 午夜精品免费在线| 精品乱子伦一区二区| 综合网日日天干夜夜久久| 在线免费看h| 国产麻豆一区二区三区在线观看| 国产精品久久久乱弄| youjizzxxxx18| 91美女视频网站| 国产无套在线观看| 日韩女优毛片在线| av在线免费观看网址| 91精品久久久久久久久久另类| 伊人久久大香线蕉无限次| 国产美女在线一区| 粉嫩欧美一区二区三区高清影视| 久久福利免费视频| 欧美人妇做爰xxxⅹ性高电影| 国产三区四区在线观看| 欧美洲成人男女午夜视频| 欧美变态挠脚心| aa视频在线播放| 不卡的av电影在线观看| 国产大片中文字幕| 精品久久五月天| 亚洲第一图区| www.久久草| 黑人一区二区| 能在线观看的av| 日本va欧美va瓶| 婷婷色一区二区三区| 91国内精品野花午夜精品| 国外av在线| 国产精品99久久99久久久二8| 亚洲a级精品| av片中文字幕| 国产嫩草影院久久久久| 国产精品无码粉嫩小泬| 在线播放国产一区二区三区| 国产一区二区三区朝在线观看| 秋霞久久久久久一区二区| 男人的天堂亚洲一区| 国产精品久久国产精麻豆96堂| 欧美高清视频一二三区| a级网站在线播放| 国产精品午夜av在线| 久久深夜福利| 免费一级suv好看的国产网站| 欧美精品第1页| 1stkiss在线漫画| 国精产品99永久一区一区| 国产精品毛片在线看| 免费黄在线观看| 正在播放亚洲一区| 国产白丝在线观看| 欧美日韩亚洲一区二区三区四区| 日韩1区2区日韩1区2区| 91高清免费看| 亚洲精品国产综合久久| 黄色精品视频| 影音先锋成人资源网站| av在线综合网| av首页在线观看| 粗暴蹂躏中文一区二区三区| 国产精品传媒| 日本成年人网址| 国产精品你懂的在线欣赏| xxxx18国产| 日本精品免费一区二区三区| 99久久国产综合精品成人影院| 麻豆短视频在线观看| 日韩欧美在线免费观看| 欧美成人精品一区二区男人看| 国产高清在线一区| 日本欧美韩国一区三区| 欧美日韩人妻精品一区二区三区| 国产偷国产偷亚洲清高网站| 91麻豆精品国产综合久久久 | 韩国中文字幕在线| 久久五月天婷婷|