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

讓 Flutter 在鴻蒙系統上跑起來

系統
鴻蒙系統(HarmonyOS)是華為推出的一款面向未來、面向全場景的分布式操作系統。在傳統單設備系統能力的基礎上,鴻蒙提出了基于同一套系統能力、適配多種終端形態的分布式理念。

前言

鴻蒙系統(HarmonyOS)是華為推出的一款面向未來、面向全場景的分布式操作系統。在傳統單設備系統能力的基礎上,鴻蒙提出了基于同一套系統能力、適配多種終端形態的分布式理念。自 2020 年 9 月 HarmonyOS 2.0 發布以來,華為加快了鴻蒙系統大規模落地的步伐,預計 2021 年底,鴻蒙系統會覆蓋包括手機、平板、智能穿戴、智慧屏、車機在內數億臺終端設備。對移動應用而言, 新的系統理念、新的交互形式,也意味著新的機遇 。如果能夠利用好鴻蒙的開發生態及其特性能力,可以讓應用覆蓋更多的交互場景和設備類型,從而帶來新的增長點。

與面臨的機遇相比,適配鴻蒙系統帶來的挑戰同樣巨大。當前手機端,盡管鴻蒙系統仍然支持安卓 APK 安裝及運行,但長期來看,華為勢必會拋棄 AOSP,逐步發展出自己的生態,這意味著現有安卓應用在鴻蒙設備上將會逐漸變成“二等公民”。然而,如果在 iOS 及 Android 之外再重新開發和維護一套鴻蒙應用,在如今業界越來越注重開發迭代效率的環境下,所帶來的開發成本也是難以估量的。因此,通過打造一套合適的跨端框架,以相對低的成本移植應用到鴻蒙平臺,并利用好該系統的特性能力,就成為了一個非常重要的選項。

在現有的眾多跨端框架當中,Flutter 以其自渲染能力帶來的多端高度一致性,在新系統的適配上有著突出的優勢。雖然Flutter 官方 并沒有適配鴻蒙的計劃 ,但經過一段時間的探索和實踐,美團外賣 MTFlutter 團隊成功實現了 Flutter 對于鴻蒙系統的原生支持。

這里也要提前說明一下,因為鴻蒙系統目前還處于Beta版本,所以這套適配方案還沒有在實際業務中上線,屬于技術層面比較前期的探索。接下來本文會通過原理和部分實現細節的介紹,分享我們在移植和開發過程中的一些經驗。希望能對大家有所啟發或者幫助。

背景知識和基礎概念介紹

在適配開始之前,我們要明確好先做哪些事情。先來回顧一下 Flutter 的三層結構:

在 Flutter 的架構設計中,最上層為 框架層 ,使用 Dart 語言開發,面向 Flutter 業務的開發者;中間層為 引擎層 ,使用 C/C++ 開發,實現了 Flutter 的渲染管線和 Dart 運行時等基礎能力;最下層為 嵌入層 ,負責與平臺相關的能力實現。顯然我們要做的是將嵌入層移植到鴻蒙上,確切地說,我們要 通過鴻蒙原生提供的平臺能力,重新實現一遍 Flutter 嵌入層 。

對于 Flutter 嵌入層的適配,Flutter 官方有一份不算詳細的 指南 ,實際操作起來成本很高。由于鴻蒙的業務開發語言仍然可用 Java,在很多基礎概念上與 Android 也有相似之處(如下表所示),我們可以從 Android 的實現入手,完成對鴻蒙的移植。

Flutter 在鴻蒙上的適配

如前文所述,要完成 Flutter 在新系統上的移植,我們需要完整實現 Flutter 嵌入層要求的所有子模塊,而從能力支持角度, 渲染 、 交互 以及 其他必要的原生平臺能力 是保證 Flutter 應用能夠運行起來的最基本的要素,需要優先支持。接下來會依次進行介紹。

1. 渲染流程打通

我們再來回顧一下 Flutter 的圖像渲染流程。如圖所示,設備發起 垂直同步 (VSync)信號之后,先經過 UI 線程的渲染管線(Animate/Build/Layout/Paint),再經過 Raster 線程的組合和柵格化,最終通過 OpenGL 或 Vulkan 將圖像 上屏 。這個流程的大部分工作都由框架層和引擎層完成,對于鴻蒙的適配,我們主要關注的是與設備自身能力相關的問題,即:

(1) 如何監聽設備的 VSync 信號并通知 Flutter 引擎? (2) OpenGL/Vulkan 用于上屏的窗口對象從何而來?

VSync 信號的監聽及傳遞

在 Flutter 引擎的 Android 實現中,設備的 VSync 信號通過 Choreographer 觸發,它產生及消費流程如下圖所示:

Flutter 框架注冊 VSync 回調之后,通過 C++ 側的 VsyncWaiter 類等待 VSync 信號,后者通過 JNI 等一系列調用,最終 Java 側的 VsyncWaiter 類調用 Android SDK 的 Choreographer.postFrameCallback 方法,再通過 JNI 一層層傳回 Flutter 引擎消費掉此回調。Java 側的 VsyncWaiter 核心代碼如下:

  1. @Override 
  2. public void asyncWaitForVsync(long cookie) { 
  3.   Choreographer.getInstance() 
  4.       .postFrameCallback( 
  5.         new Choreographer.FrameCallback() { 
  6.           @Override 
  7.           public void doFrame(long frameTimeNanos) { 
  8.             float fps = windowManager.getDefaultDisplay().getRefreshRate(); 
  9.             long refreshPeriodNanos = (long) (1000000000.0 / fps); 
  10.             FlutterJNI.nativeOnVsync( 
  11.               frameTimeNanos, frameTimeNanos + refreshPeriodNanos, cookie); 
  12.           } 
  13.         }); 

在整個流程中,除了來自 Android SDK 的 Choreographer 以外,大多數邏輯幾乎都由 C++ 和 Java 的基礎 SDK 實現,可以直接在鴻蒙上復用,問題是鴻蒙目前的 API 文檔中尚沒有開放類似 Choreographer 的能力。所以現階段我們可以借用鴻蒙提供的類似 iOS Grand Central Dispatch 的線程 API,模擬出 VSync 的信號觸發與回調:

  1. @Override 
  2. public void asyncWaitForVsync(long cookie) { 
  3.   // 模擬每秒 60 幀的屏幕刷新間隔:向主線程發送一個異步任務, 16ms 后調用 
  4.   applicationContext.getUITaskDispatcher().delayDispatch(() -> { 
  5.     float fps = 60// 設備刷新幀率,HarmonyOS 未暴露獲取幀率 API,先寫死 60 幀 
  6.     long refreshPeriodNanos = (long) (1000000000.0 / fps); 
  7.     long frameTimeNanos = System.nanoTime(); 
  8.     FlutterJNI.nativeOnVsync(frameTimeNanos, frameTimeNanos + refreshPeriodNanos, cookie); 
  9.   }, 16); 
  10. }; 

渲染窗口的構建及傳遞

在這一部分,我們需要在鴻蒙系統上構建平臺容器,為 Flutter 引擎的圖形渲染提供用于上屏的窗口對象。同樣,我們參考 Flutter for Android 的實現,看一下 Android 系統是怎么做的:

Flutter 在 Android 上支持 Vulkan 和 OpenGL 兩種渲染引擎,篇幅原因我們只關注 OpenGL。拋開復雜的注冊及調用細節,本質上整個流程主要做了三件事:

  1. 創建了一個 視圖對象 ,提供可用于直接繪制的 Surface,將它通過 JNI 傳遞給原生側;
  2. 在原生側獲取 Surface 關聯的 本地窗口對象 ,并交給 Flutter 的平臺容器;
  3. 將本地窗口對象轉換為 OpenGL ES 可識別的 繪圖表面(EGLSurface) ,用于 Flutter 引擎的渲染上屏。

接下來我們用鴻蒙提供的平臺能力實現這三點。

a. 可用于直接繪制的視圖對象

鴻蒙系統的 UI 框架 提供了很多常用視圖組件(Component) ,比如按鈕、文字、圖片、列表等,但我們需要拋開這些上層組件,獲得直接繪制的能力。借助官方 媒體播放器開發指導 文檔,可以發現鴻蒙提供了 SurfaceProvider 類,它管理的 Surface 對象可以用于視頻解碼后的展示。而 Flutter 渲染與視頻上屏從原理上是類似的,因此我們可以借用 SurfaceProvider 實現 Surface 的管理和創建:

  1. // 創建一個用于管理 Surface 的容器組件 
  2. SurfaceProvider surfaceProvider = new SurfaceProvider(context); 
  3. // 注冊視圖創建回調 
  4. surfaceProvider.getSurfaceOps().get().addCallback(surfaceCallback); 
  5.  
  6. // ... 在 surfaceCallback 中 
  7. @Override 
  8. public void surfaceCreated(SurfaceOps surfaceOps) { 
  9.   Surface surface = surfaceOps.getSurface(); 
  10.   // ...將 surface 通過 JNI 交給 Native 側 
  11.   FlutterJNI.onSurfaceCreated(surface); 

b. 與 Surface 關聯的本地窗口對象

鴻蒙目前開放的 Native API 并不多,在官方文檔中我們可以比較容易地找到 Native_layer API 。根據文檔的說明,Native API 中的 NativeLayer 對象剛好對應了 Java 側的 Surface 類,借助 GetNativeLayer 方法,我們實現了兩者之間的轉化:

  1. // platform_view_android_jni_impl.cc 
  2. static void SurfaceCreated(JNIEnv* env, jobject jcaller, jlong shell_holder, jobject jsurface) { 
  3.   fml::jni::ScopedJavaLocalFrame scoped_local_reference_frame(env); 
  4.   // 通過鴻蒙 Native API 獲取本地窗口對象 NativeLayer 
  5.   auto window = fml::MakeRefCounted<AndroidNativeWindow>( 
  6.       GetNativeLayer(env, jsurface)); 
  7.   ANDROID_SHELL_HOLDER->GetPlatformView()->NotifyCreated(std::move(window)); 

c. 與本地窗口對象關聯的 EGLSurface

在 Android 的 AOSP 實現 中,EGLSurface 可通過 EGL 庫的 eglCreateWindowSurface 方法從本地窗口對象 ANativeWindow 創建而來。對于鴻蒙而言,雖然我們沒有從公開文檔找到類似的說明,但是 鴻蒙標準庫 默認支持了 OpenGL ES,而且鴻蒙 SDK 中也附帶了 EGL 相關的庫及頭文件,我們有理由相信在鴻蒙系統上,EGLSurface 也可以通過此方法從前一步生成的 NativeLayer 轉化而來,在之后的驗證中我們也確認了這一點:

  1. // window->handle() 即為之前得到的 NativeLayer 
  2. EGLSurface surface = eglCreateWindowSurface( 
  3.       display, config_, reinterpret_cast<EGLNativeWindowType>(window->handle()), 
  4.       attribs); 
  5. //...交給 Flutter 渲染管線 

2. 交互能力實現

交互能力是支撐 Flutter 應用能夠正常運行的另一個基本要求。在 Flutter 中,交互包含了各種觸摸事件、鼠標事件、鍵盤錄入事件的傳遞及消費。以觸摸事件為例,Flutter 事件傳遞的整個流程如下圖所示:

iOS/Android 的原生容器通過觸摸事件的回調 API 接收到事件之后,會將其打包傳遞至引擎層,后者將事件傳發給 Flutter 框架層,并完成事件的消費、分發和邏輯處理。同樣,整個流程的大部分工作已經由 Flutter 統一,我們要做的僅僅是在原生容器上 監聽 用戶的輸入,并 封裝 成指定格式交給引擎層而已。

在鴻蒙系統上,我們可以借助平臺提供的 多模輸入 API ,實現多種類型事件的監聽:

  1. flutterComponent.setTouchEventListener(touchEventListener); // 觸摸及鼠標事件 
  2. flutterComponent.setKeyEventListener(keyEventListener); // 鍵盤錄入事件 
  3. flutterComponent.setSpeechEventListener(speechEventListener); // 語音錄入事件 

對于事件的封裝處理,可以復用 Android 已有邏輯,只需要關注鴻蒙與 Android 在事件處理上的對應關系即可,比如觸摸事件的部分對應關系:

3. 其他必要的平臺能力

為了保證 Flutter 應用能夠正常運行,除了最基本的渲染和交互外,我們的嵌入層還要提供資源管理、事件循環、生命周期同步等平臺能力。對于這些能力 Flutter 大多都在嵌入層的公共部分有抽象類聲明,只需要使用鴻蒙 API 重新實現一遍即可。

比如資源管理,引擎提供了 AssetResolver 聲明,我們可以使用鴻蒙 Rawfile API 來實現:

  1. class HAPAssetMapping : public fml::Mapping { 
  2.  public
  3.   HAPAssetMapping(RawFile* asset) : asset_(asset) {} 
  4.   ~HAPAssetMapping() override { CloseRawFile(asset_); } 
  5.  
  6.   size_t GetSize() const override { return GetRawFileSize(asset_); } 
  7.  
  8.   const uint8_t* GetMapping() const override { 
  9.     return reinterpret_cast<const uint8_t*>(GetRawFileBuffer(asset_)); 
  10.   } 
  11.  
  12.  private
  13.   RawFile* const asset_; 
  14.  
  15.   FML_DISALLOW_COPY_AND_ASSIGN(HAPAssetMapping); 
  16. }; 

對于事件循環,引擎提供了 MessageLoopImpl 抽象類,我們可以使用鴻蒙 Native_EventHandler API 實現:

// runner_ 為鴻蒙 EventRunnerNativeImplement 的實例
void MessageLoopHarmony::Run() {
  FML_DCHECK(runner_ == GetEventRunnerNativeObjForThread());
  int result = ::EventRunnerRun(runner_);
  FML_DCHECK(result == 0);
}

void MessageLoopHarmony::Terminate() {
  int result = ::EventRunnerStop(runner_);
  FML_DCHECK(result == 0);
}

對于生命周期的同步,鴻蒙的 Page Ability 提供了完整的生命周期回調(如下圖所示),我們只需要在對應的時機將狀態上報給引擎即可。

當以上這些能力都準備好之后,我們就可以成功把 Flutter 應用跑起來了。以下是通過 DevEco Studio 運行官方 flutter gallery 應用的截圖,截圖中 Flutter 引擎已經使用鴻蒙系統的平臺能力進行了重寫:

借由鴻蒙的多設備支持能力,此應用甚至可在 TV、車機、手表、平板等設備上運行:

總結和展望

通過上述的構建和適配工作,我們以極小的開發成本實現了 Flutter 在鴻蒙系統上的移植,基于 Flutter 開發的上層業務幾乎不做任何修改就可以在鴻蒙系統上原生運行,為迎接鴻蒙系統后續的大規模推廣也提前做好了技術儲備。

當然,故事到這里并沒有結束。在最基本的運行和交互能力之上,我們更需要關注 Flutter 與鴻蒙自身生態的結合:如何優雅地適配鴻蒙的分布式技術?如何用 Flutter 實現設備之間的快速連接、資源共享?現有的眾多 Flutter 插件如何應用到鴻蒙系統上?未來 MTFlutter 團隊將在這些方面做更深入的探索,因為解決好這些問題,才是真正能讓應用覆蓋用戶生活的全場景的關鍵。

責任編輯:張燕妮 來源: 美團技術團隊
相關推薦

2011-05-04 11:26:47

優化

2009-04-29 14:40:17

2021-01-12 11:12:58

大數據智慧交通

2021-11-10 10:00:48

鴻蒙HarmonyOS應用

2022-01-10 10:23:07

瀏覽器Vitenode

2017-11-17 15:25:02

Java線程安全

2023-03-02 23:09:53

Node.jsC++JS

2010-07-13 09:31:08

RubyRuby on Rai

2024-05-27 09:01:22

2023-08-03 09:02:32

LangChain開發GLM

2022-12-06 09:03:44

代碼fork系統

2015-08-04 17:46:19

戴爾anycloud云計算

2019-09-03 08:00:00

電腦硬盤程序

2020-04-06 09:05:07

谷歌機器狗人工智能

2012-05-15 13:29:20

HTML5

2023-01-31 07:42:29

代碼JDKMaven

2014-04-18 17:12:00

樂跑手環

2019-03-21 15:00:47

Python程序代碼

2019-09-08 23:00:19

GitHub代碼開發者
點贊
收藏

51CTO技術棧公眾號

浪潮av一区| 伊人成年综合网| 性一交一乱一伧老太| 99久久夜色精品国产亚洲96| 在线不卡中文字幕播放| 中文字幕剧情在线观看一区| 国产美女精品视频国产| 中文字幕人成人乱码| 日韩一区二区三区三四区视频在线观看| 超级碰在线观看| 欧美在线 | 亚洲| 噜噜爱69成人精品| 色噜噜狠狠狠综合曰曰曰88av| 搡女人真爽免费午夜网站| 秋霞午夜理伦电影在线观看| 成人一区二区视频| 日本电影亚洲天堂| 亚洲黄色免费视频| 日日夜夜亚洲| 黄色成人在线播放| 亚洲一区二区三区免费观看| 国产伦精品一区二区三区免.费 | 视频一区视频二区中文| 日韩在线免费观看视频| 被黑人猛躁10次高潮视频| 国产盗摄在线视频网站| 国产日韩av一区| 成人午夜黄色影院| 中文字幕三级电影| 国产免费拔擦拔擦8x高清在线人| 国产女同互慰高潮91漫画| 亚洲最大福利视频| 国产真人无遮挡作爱免费视频| 天天av综合| 亚洲免费中文字幕| 波多野结衣三级视频| 欧美成人性网| 亚洲靠逼com| 日本高清久久一区二区三区| 99热这里只有精| 天堂av在线一区| 久久精品成人动漫| 亚洲中文字幕无码av| av一级久久| 日韩欧美成人精品| 中国丰满熟妇xxxx性| 一区二区三区视频网站| aaa亚洲精品一二三区| 91美女高潮出水| 无码一区二区三区| 在线亚洲一区| 欧美—级高清免费播放| 国产jizz18女人高潮| 香蕉久久夜色精品国产更新时间| 日韩美一区二区三区| 成年网站免费在线观看| xx欧美视频| 婷婷一区二区三区| av动漫在线播放| 老司机福利在线视频| 欧美激情在线一区二区三区| 精品九九九九| www.成人精品| 国产制服丝袜一区| 国产日本欧美一区二区三区| 尤物视频免费观看| 性欧美精品高清| 97在线免费观看视频| 欧美又粗又大又长| 中文字幕日韩一区二区不卡| 久久精品中文字幕电影| 农村老熟妇乱子伦视频| 教室别恋欧美无删减版| 亚洲精品中文字幕女同| aaaa黄色片| 日韩欧美天堂| 亚洲欧美制服综合另类| 精品国产av无码| 国产精品一线天粉嫩av| 亚洲毛片在线观看| 中文字幕免费视频| 精品国产91久久久久久浪潮蜜月| 亚洲第一二三四五区| 中文字幕第九页| 久久黄色影视| 日韩精品在线免费| 色哟哟精品观看| 狠狠色丁香婷婷综合影院| 在线视频中文亚洲| 黑人狂躁日本娇小| 欧美在线观看天堂一区二区三区| 麻豆成人在线看| 国产在线观看免费视频今夜| 狠狠色狠狠色综合日日tαg| 精品少妇一区二区三区| 亚洲AV成人精品| www.神马久久| 亚洲视频在线观看| 国产亚洲精品久久久久久豆腐| 91综合久久| 欧美大成色www永久网站婷| 国产精品日日夜夜| 天堂va蜜桃一区二区三区| 国产精品私拍pans大尺度在线| 国产一区二区自拍视频| 国产很黄免费观看久久| 久久精品日产第一区二区三区精品版| 精品久久久久一区二区三区 | 91久久精品美女| 亚洲精品久久久久久动漫器材一区 | 亚洲精品国产品国语在线| 精品一区二区视频在线观看| 欧美午夜精品一区二区三区电影| 不卡av在线网站| 国产超碰人人爽人人做人人爱| 久久影院亚洲| 99超碰麻豆| 日本午夜在线| 亚洲视频在线观看一区| 日日碰狠狠添天天爽超碰97| 国产精品66| 欧美成人综合网站| 女人十八毛片嫩草av| 亚洲性视频h| 尤物99国产成人精品视频| 一区二区国产精品精华液| 999亚洲国产精| 成人做爰www免费看视频网站| 午夜av免费观看| 亚洲精品视频观看| mm1313亚洲国产精品无码试看| 亚洲精品成人一区| 日韩精品电影网| 男女免费视频网站| 日本亚洲天堂网| 国产精品高潮在线| 免费观看黄色av| 亚洲另类色综合网站| 日日碰狠狠丁香久燥| youjizzjizz亚洲| 日韩最新av在线| 日韩精品一区二区三| 国产精品一区二区久久不卡| 午夜欧美一区二区三区免费观看| av资源在线看片| 日韩欧美国产精品一区| 天堂网av2018| 日本欧美一区二区在线观看| 九九九九精品| 欧美草逼视频| 69堂成人精品免费视频| 国产精品国产三级国产专业不 | 国产精品第一页在线观看| 久久精品国产网站| 鲁鲁视频www一区二区| 波多野结衣视频一区二区| 欧美成人精精品一区二区频| 日韩影院一区二区| 国产一区二区精品久久99| 亚洲午夜在线观看| 国产福利亚洲| 最新的欧美黄色| 在线不卡免费视频| 亚洲国产精品ⅴa在线观看| 中国丰满人妻videoshd| 综合欧美亚洲| 欧美黑人视频一区| 丰满肉肉bbwwbbww| 中文字幕五月欧美| 九九久久久久久| 性xxxx欧美老肥妇牲乱| 91久久国产精品| 在线三级电影| 日韩午夜电影在线观看| 欧美成人免费观看视频 | 亚洲欧美视频在线观看| 欧美性猛交乱大交| 国产尤物精品| 精品国产综合| 亚洲成人人体| 最新国产成人av网站网址麻豆| 又色又爽又黄无遮挡的免费视频| 欧美激情一区二区三区全黄| 亚洲一级片网站| 91日韩在线| 91香蕉视频在线下载| 欧美精品videosex| 日韩精品免费视频| 一级黄色在线视频| 国产亚洲污的网站| 99sesese| 亚洲伦理精品| 欧美.www| 欧美成人免费在线观看| 中文字幕一区二区人妻| 中文字幕在线不卡国产视频| 国产一级特黄a大片免费| 精品久久网站| 91黄在线观看| 神马久久午夜| 日韩中文字幕国产| 成人免费视频国产免费麻豆| 亚洲自拍偷拍综合| 亚洲综合网在线观看| 麻豆国产精品官网| 久久综合亚洲精品| 国内成人精品| wwwxx欧美| 欧美日韩尤物久久| 欧美日本黄视频| 欧美性猛交 xxxx| 欧美日韩中文另类| 欧美日韩国产精品综合 | 亚洲一级电影视频| 欧美熟妇激情一区二区三区| 粉嫩aⅴ一区二区三区四区| 日本精品免费在线观看| 欧美三级乱码| 免费观看黄色大片| 精品视频免费| 蜜桃臀一区二区三区| 精品久久ai电影| 成人情视频高清免费观看电影| 日本免费一区二区三区等视频| 日产日韩在线亚洲欧美| 嗯啊主人调教在线播放视频| 美乳少妇欧美精品| 日本在线人成| 中文字幕无线精品亚洲乱码一区| 深夜影院在线观看| 精品噜噜噜噜久久久久久久久试看| 97av免费视频| 欧美日本一区二区三区| 国产在线一级片| 91久久免费观看| 国产成人精品777777| 精品久久久国产精品999| 国产午夜激情视频| 亚洲影院在线观看| 麻豆成人在线视频| 亚洲精品国产无套在线观| 日本高清不卡免费| 亚洲免费av高清| 精品99在线观看| 一区二区三区四区国产精品| 91久久国产综合| 亚洲精品视频一区| 国产真人真事毛片| 亚洲成精国产精品女| 国产91av视频| 精品久久久久久久久久久久久 | 亚洲国产免费看| 国产在线精品91| 亚洲女同在线| 北条麻妃视频在线| 麻豆91精品视频| 亚洲一区二区中文字幕在线观看| 精品一区二区在线看| 亚洲午夜精品在线观看| 成人免费观看视频| 精品影片一区二区入口| 久久综合九色综合欧美亚洲| 91视频免费观看网站| 欧美激情综合五月色丁香小说| 国产一级淫片久久久片a级| 中文字幕一区二区三区不卡| 国产suv一区二区三区| 亚洲一区二区三区在线看| 欧美日韩综合在线观看| 欧美伊人久久大香线蕉综合69| 夜夜骚av一区二区三区| 欧美一区二区三区色| 人妻va精品va欧美va| 亚洲人成免费电影| 国产精品一卡二卡三卡 | 精品一区在线视频| 色综合天天综合网国产成人综合天| 69视频免费看| 91精品国产欧美一区二区18| 日批视频在线播放| 亚洲天堂开心观看| 成人免费网址| 欧美性受xxx| 人人玩人人添人人澡欧美| 国产91视觉| 激情综合网五月| 成人免费在线视频播放| 视频一区中文字幕国产| 性生活在线视频| 久久人人超碰精品| 看片网站在线观看| 日韩欧美中文在线| 国产av精国产传媒| 亚洲欧美中文日韩v在线观看| 中文字幕有码在线观看| 91av在线免费观看| 国产精品美女久久久久| 茄子视频成人在线观看| 欧美fxxxxxx另类| 成年人网站大全| 成人免费视频app| 精品一区二区6| 欧美日韩黄色大片| av网站免费大全| 亚洲天堂视频在线观看| 国内老司机av在线| 成人国产精品日本在线| 亚洲人成精品久久久 | 黄色片中文字幕| 欧美夫妻性生活| 欧美日韩国产亚洲沙发| 欧美极品少妇xxxxⅹ免费视频| 日韩三区免费| 含羞草久久爱69一区| 亚洲精品一二三区区别| 成人3d动漫一区二区三区| 成人国产精品免费| 登山的目的在线| 91福利精品视频| 天天干,天天操,天天射| 久久91亚洲人成电影网站| 成人高清一区| 日本在线观看一区二区| 一区二区三区福利| 中文在线字幕观看| 亚洲欧美日韩国产综合在线| 免费视频网站在线观看入口| 日韩av网站电影| 日本精品600av| 亚洲精品欧美日韩| 天天射综合网视频| 午夜激情av在线| 国产日韩欧美激情| 99精品人妻国产毛片| 亚洲理论在线a中文字幕| 国产福利电影在线播放| 国产精品免费一区二区三区| 中国成人一区| 波多野结衣网页| 成人欧美一区二区三区黑人麻豆 | 制服丝袜在线91| a中文在线播放| 国产精品成人观看视频国产奇米| 日日狠狠久久偷偷综合色| 免费一级特黄毛片| 成人黄色网址在线观看| 麻豆chinese极品少妇| 日韩一区二区不卡| 亚洲区欧洲区| 国产精品视频免费一区二区三区| 韩日视频一区| 丰满岳乱妇一区二区 | 日韩电影在线观看一区二区| 亚洲色图17p| 日韩经典一区| 影音欧美亚洲| 国产一区欧美一区| 九九视频在线观看| 日韩成人在线视频| 欧美日韩国产v| 五月天国产一区| 国产一区二区三区精品视频| 欧美国产精品一二三| 亚洲高清一区二| 粉嫩一区二区| 亚洲激情啪啪| 国产精品一区二区男女羞羞无遮挡| 青青草原免费观看| 日韩精品免费在线视频| 日韩成人高清| 久久av秘一区二区三区| 国产成+人+日韩+欧美+亚洲| 日韩欧美三级在线观看| 亚洲人成电影在线| 日韩成人综合网站| 久久久亚洲国产精品| 2017欧美狠狠色| 91无套直看片红桃| 欧美极品少妇xxxxx| 深爱激情综合网| 免费黄频在线观看| 天天综合色天天| 91伦理视频在线观看| 97se亚洲综合| 久久精品麻豆| 亚洲最大的黄色网址| 日韩av一区二区在线| 久久久精品一区二区毛片免费看| 丁香六月激情网| 国产欧美日韩精品一区| aa视频在线免费观看| 欧美在线精品免播放器视频| 天天色综合色| 中文字幕xxx| 91精品国产综合久久国产大片| 理论不卡电影大全神| 尤物国产精品| 久久夜色精品一区| 亚洲a视频在线| 国产精品三级久久久久久电影|