精品欧美一区二区三区在线观看 _久久久久国色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)

亚洲 欧美 自拍偷拍| 久久精品视频国产| 国产人与zoxxxx另类91| 亚洲精品精品亚洲| 久久精品日产第一区二区三区乱码 | 亚洲一区二区自拍偷拍| 精品久久国产视频| 国产毛片一区| 亚洲天堂福利av| 成人精品久久av网站| 日本特黄特色aaa大片免费| 国产综合久久久| 日韩欧美国产小视频| 日韩电影免费观看在| 精品无码m3u8在线观看| 免费电影一区二区三区| 91精品国产麻豆| 欧美三级午夜理伦三级| 亚洲第一图区| 蜜臀av性久久久久av蜜臀妖精 | www.五月天色| 自拍偷拍欧美视频| 一区二区三区自拍| 无码免费一区二区三区免费播放| 日韩欧美a级片| 日本精品三区| 亚洲精品一区中文字幕乱码| 在线成人免费av| 操你啦视频在线| 久久精品亚洲精品国产欧美kt∨| 99久久一区三区四区免费| 波多野结衣爱爱| 国产麻豆综合| 国内免费久久久久久久久久久| 欧美美女性生活视频| 欧美极品在线观看| 日韩成人在线网站| 北京富婆泄欲对白| 久久av网站| 欧美妇女性影城| 天天爽人人爽夜夜爽| 99视频在线观看地址| 97成人超碰视| 国产日韩欧美二区| 成人午夜免费福利| 国产精品白丝av| 992tv在线成人免费观看| 国产一区二区播放| 影音先锋成人在线电影| www.国产一区| 欧美xxxooo| 色天天久久综合婷婷女18| 亚洲人高潮女人毛茸茸| 人妻丰满熟妇aⅴ无码| 国内自拍欧美| 色播五月激情综合网| 国产精品333| av剧情在线观看| 午夜欧美大尺度福利影院在线看| 妞干网在线播放| 欧美日韩国产亚洲沙发| 91蜜桃传媒精品久久久一区二区| 国产伦精品一区二区三毛| 成人毛片在线精品国产| 成人黄色网址在线观看| 久久国产主播精品| 免费一级毛片在线观看| 久久精品视频免费| 日韩欧美手机在线| 日本在线观看| 亚洲免费三区一区二区| 97超碰国产精品| 国产精品13p| 欧美视频免费在线| 国产aaa一级片| 91另类视频| 制服.丝袜.亚洲.中文.综合| 制服.丝袜.亚洲.中文.综合懂| 97成人在线| 亚洲国产精品一区二区三区| 女尊高h男高潮呻吟| 精品久久久久久久久久久下田| 在线丨暗呦小u女国产精品| 亚洲高清在线不卡| 一本色道69色精品综合久久| 亚洲第一福利视频| 亚洲国产日韩一区无码精品久久久| 超碰成人久久| 欧美夫妻性生活xx| 国产一二三四视频| 午夜日韩av| 亲子乱一区二区三区电影| 九九免费精品视频| 99在线观看免费视频精品观看| 国产aⅴ夜夜欢一区二区三区 | 亚洲欧美日韩专区| 国产日韩欧美91| 亚洲成人一级片| 久久美女高清视频| 欧美少妇一区二区三区| 夜鲁夜鲁夜鲁视频在线播放| 欧美日本一区二区在线观看| 白嫩情侣偷拍呻吟刺激| 91影院成人| 欧美专区国产专区| av中文字幕在线免费观看| 97国产精品videossex| 这里只有精品66| 悠悠资源网亚洲青| 欧美一级专区免费大片| 九色porny自拍视频| 欧美激情成人在线| 国产精品久久久久久久久借妻| 国产黄色大片网站| 国产精品久久久久久久久免费相片 | 国产91在线免费观看| 精品国产乱码| 午夜精品久久久久久久男人的天堂| 一级特黄色大片| 久久免费午夜影院| 久操网在线观看| 秋霞午夜一区二区三区视频| 尤物yw午夜国产精品视频| 中文在线观看免费网站| 国产精品一区二区不卡| 亚洲一区二区三区免费观看| 少妇一区视频| 亚洲电影在线看| 久久久久成人精品无码| 激情深爱一区二区| 亚洲欧美日韩国产成人综合一二三区 | 欧美毛片免费观看| 欧美国产中文字幕| 国产人妻精品一区二区三| 蜜桃在线一区二区三区| 蜜桃精品久久久久久久免费影院| 欧美1—12sexvideos| 欧美色窝79yyyycom| 亚洲一级片网站| 免费成人结看片| 亚洲91精品在线观看| 精品久久久久成人码免费动漫| 亚洲欧洲日产国码二区| 91精品无人成人www| av永久不卡| 国产精品久久久久久久久久99| 欧洲天堂在线观看| 日韩欧美中文第一页| 欧亚乱熟女一区二区在线| 欧美私人啪啪vps| 91久久精品www人人做人人爽| 欧洲美女少妇精品| 欧美亚洲综合色| 日本美女bbw| 毛片不卡一区二区| 国产精品theporn88| 色www永久免费视频首页在线| 91精品国产aⅴ一区二区| 老司机深夜福利网站| 麻豆成人综合网| 懂色av粉嫩av蜜臀av| 99re8精品视频在线观看| 亚洲国产成人av在线| 日本中文字幕网| 久久久久88色偷偷免费| 免费激情视频在线观看| 日韩国产一区二区| 91探花福利精品国产自产在线| gogo在线高清视频| 精品免费视频.| 天天操天天摸天天干| 久久er精品视频| 中文字幕一区综合| 日韩免费一级| 欧美一级大片视频| www.在线播放| 欧美一级淫片007| www成人在线| 国产偷国产偷亚洲高清人白洁 | 亚洲精品视频一二三| 91亚洲精品在看在线观看高清| 久热精品视频在线观看| 欧美一区二区黄片| 亚洲男帅同性gay1069| 久久久久亚洲av无码网站| 一区二区91| 亚洲欧洲在线一区| 国产精品宾馆| 欧美在线视频免费播放| 日本视频在线| 亚洲第一综合天堂另类专| aaa在线视频| 亚洲精品视频在线观看网站| 中文字幕乱码在线| 久久精品噜噜噜成人av农村| 国产一级爱c视频| 成人婷婷网色偷偷亚洲男人的天堂| 亚洲已满18点击进入在线看片 | 午夜免费一级片| 久久国产精品久久w女人spa| 丰满女人性猛交| 高清亚洲高清| 欧美精品xxx| av在线收看| 亚洲激情成人网| 国产精品一级视频| 日韩欧美在线中文字幕| 免费一级片在线观看| 欧美国产视频在线| 波多野结衣加勒比| 国内精品不卡在线| 天天影视综合色| 日韩午夜激情| 欧美交换配乱吟粗大25p| jlzzjlzz亚洲女人| 精品欧美日韩在线| 国产精品高清一区二区| 国产精品久久久久久久久久99| 成人免费高清观看| 超碰91人人草人人干| www视频在线观看免费| 日韩精品在线观看网站| 亚洲xxx在线| 91精品久久久久久蜜臀| 成人小视频在线播放| 无码av免费一区二区三区试看 | 天堂av中文在线资源库| 欧美日韩国产综合新一区| 四虎成人免费影院| 久久综合久久综合亚洲| 娇妻高潮浓精白浆xxⅹ| 国产高清一区日本| 一级黄色片在线免费观看| 日韩av高清在线观看| 日本a级片免费观看| 伊人成年综合电影网| 国产一区 在线播放| 欧美88av| 成人在线视频一区二区三区| 91成人超碰| 国产高清精品软男同| 四虎8848精品成人免费网站| 图片区小说区区亚洲五月| 国产一区毛片| 欧美日韩在线一二三| 免费一区二区| 日本一区二区视频| 国产精品xnxxcom| 成人自拍性视频| 国产精品日本一区二区三区在线| 国产精品专区一| 欧美91在线|欧美| 国产中文字幕91| 高清久久一区| 亚洲一区二区三区777| 精品国产鲁一鲁****| 99久久精品久久久久久ai换脸| 久久视频免费| 99久久99久久精品国产片| 懂色av一区二区| 久久精品二区| 精品久久久久久久久久久aⅴ| 亚州欧美一区三区三区在线 | 伊人久久综合97精品| 成人影院免费观看| 日韩视频永久免费观看| 超鹏97在线| 久久男人资源视频| 中国字幕a在线看韩国电影| 国产91精品最新在线播放| 男人亚洲天堂| 动漫美女被爆操久久久| 日韩av字幕| 亚洲第一导航| 中文在线播放一区二区| 人人妻人人添人人爽欧美一区| 亚洲综合二区| 天天操狠狠操夜夜操| 国产成人自拍网| 菠萝菠萝蜜网站| 中文字幕一区二区5566日韩| 妺妺窝人体色www婷婷| 一本一道久久a久久精品综合蜜臀| 波多野结衣av无码| 欧美成人精品1314www| 色视频在线看| 久久视频国产精品免费视频在线| 国产盗摄精品一区二区酒店| 欧美一级电影久久| 99精品国产九九国产精品| 精品欧美一区二区三区久久久 | 国产91在线|亚洲| 成人午夜福利一区二区| 亚洲精选视频免费看| 国产www在线| 欧美一区二区在线免费播放| 青青色在线视频| 久久亚洲精品一区| 少妇淫片在线影院| 7777精品伊久久久大香线蕉语言| 日韩高清影视在线观看| 日本一区二区免费高清视频| 亚洲欧美高清| 先锋资源在线视频| 欧美高清在线一区二区| 日韩精品久久久久久久| 欧美人伦禁忌dvd放荡欲情| 日韩一区二区三区不卡| 久久夜色精品亚洲噜噜国产mv| 亚洲欧美电影| 国产精品成人一区二区三区| 日本一二区不卡| 久久无码高潮喷水| 成人高清av在线| 极品魔鬼身材女神啪啪精品| 国产精品不卡在线观看| 午夜毛片在线观看| 欧美成人性战久久| 欧美日韩视频在线播放| 国产国产精品人在线视| 嫩草国产精品入口| 白白操在线视频| 精品在线一区二区三区| 国产精品免费无码| 黑人巨大精品欧美一区二区| 亚洲免费国产视频| 欧美超级乱淫片喷水| 中文字幕成人| 亚洲国产精品视频一区| 日韩福利电影在线| 久久精品无码一区| 欧美丝袜一区二区| 天堂资源中文在线| 久久久久久久亚洲精品| 一区二区三区视频免费视频观看网站| 亚洲午夜精品一区二区| 狂野欧美一区| 91网站免费视频| 欧美日韩在线免费| 外国精品视频在线观看| 性色av一区二区三区| 国产精品白浆| 青青草视频在线免费播放| 成人国产视频在线观看| 国产精品999久久久| 精品国产99国产精品| 天堂а√在线8种子蜜桃视频 | 中文字幕高清在线播放| 国内精品久久国产| 国产视频一区三区| 国产精品无码一区二区三区免费| 性欧美疯狂xxxxbbbb| 五十路在线观看| 欧美中文字幕视频在线观看| 亚洲另类春色校园小说| 青青青在线播放| 久久精品一区四区| www.久久网| 日韩精品一区二区三区四区 | 4p变态网欧美系列| 欧美人与拘性视交免费看| 一区二区在线播放视频| 中文字幕一区二区三区四区不卡 | 亚洲第一精品电影| 日韩精品av| 日韩jizzz| 国产中文字幕一区| 国产在线视频二区| 精品亚洲夜色av98在线观看| 怡红院成人在线| 一区二区三区三区在线| 国产一区二区不卡| www..com国产| 色一情一乱一区二区| 天堂精品久久久久| 黄色片视频在线播放| 国产精品高清亚洲| 国产18精品乱码免费看| 日本高清视频精品| 久久精品久久久| 国产精品久久AV无码| 欧美系列一区二区| 日皮视频在线观看| 美媛馆国产精品一区二区| 理论电影国产精品| 日韩精品一卡二卡| 一区二区三区美女xx视频| 亚洲综合影院| 成人免费毛片播放| 亚洲综合色噜噜狠狠| 国产在线网站| 99一区二区三区| 日韩高清欧美激情| 懂色av.com| www.久久撸.com| 亚洲理论电影| 亚洲精品久久一区二区三区777| 色婷婷综合视频在线观看| а天堂中文在线官网| 欧美在线激情|