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

在ReactNative的App中,集成Bugly你一定會(huì)遇到的一些坑

企業(yè)動(dòng)態(tài)
本文說(shuō)是 ReactNative 集成 Bugly 的一些坑,實(shí)際上講的更多的是在生產(chǎn)環(huán)境下,如何分析 ReactNative 的崩潰棧。這些被搜集的原始信息,如何被還原成我們需要的信息。

 [[209941]]

一、前言

最近開(kāi)新項(xiàng)目,準(zhǔn)備嘗試一下 ReactNative,所以前期做了一些調(diào)研工作,ReactNative 的優(yōu)點(diǎn)非常的明顯,可以做到跨平臺(tái),除了少部分 UI 效果可能需要對(duì)不同的平臺(tái)進(jìn)行單獨(dú)適配,其中的核心邏輯代碼,都是可以重用的。所以如果最終用 ReactNative 的話,可以省出某一端的客戶端開(kāi)發(fā)人員。而我這里調(diào)研的主要方向,就是它對(duì)國(guó)內(nèi)第三方 SDK 的支持。

在國(guó)內(nèi),開(kāi)發(fā) App,一般都是會(huì)集成一些第三方服務(wù)的,例如:升級(jí)、崩潰分析、數(shù)據(jù)統(tǒng)計(jì)等等。而這些第三方服務(wù),提供的 SDK ,通常只有 Native 層的,例如 Android 就是使用 Java 寫(xiě)的。而 ReactNative 本身 JavaScript 和 Native 層(Java層)的通信,其實(shí)已經(jīng)做的很好了,所以大部分情況下,我們只需要對(duì)這些 SDK 做一個(gè)簡(jiǎn)單的封裝就可以正常使用它了。

本期就來(lái)分享一下,如何在 ReactNative 的基礎(chǔ)之上,集成 Bugly。這里主要是看它的崩潰搜集,這也是 Bugly 的主要功能。對(duì)于崩潰的收集,我主要關(guān)心兩個(gè)部分:

  1. 是需要統(tǒng)計(jì)到正確的崩潰棧。
  2. 統(tǒng)計(jì)到的崩潰棧要是易于閱讀的。

其實(shí)主要工作卡在了后者,接下來(lái)讓我們具體看看問(wèn)題。

本文的分析都是基于***的 ReactNative (v0.49) 版本來(lái)分析。

二、ReactNative 的崩潰統(tǒng)計(jì)

首先,ReactNative 中 JavaScript 和 Native 層的通信,官方文檔已經(jīng)寫(xiě)的非常清楚了。在官方文檔中,舉了一個(gè) Toast 模塊的例子,寫(xiě)的很清晰,這里就不再贅述了,還不了解的,可以先看看文檔。

ReactNative 原生模塊(中文文檔):

http://reactnative.cn/docs/0.49/native-modules-android.html#content

2.1 ReactNative 的編譯模式

而在 ReactNative 的程序中,實(shí)際上運(yùn)行的是 Js 的代碼,而它也是分 Debug 和 Release 的。

在 Debug 模式下,會(huì)從本地開(kāi)啟一個(gè) Packager 服務(wù),然后 App 運(yùn)行起來(lái)之后,直接從服務(wù)里拉取***的編譯后的 JS 代碼,這樣可以在開(kāi)發(fā)階段,做到代碼實(shí)時(shí)更新的效果,只需要在設(shè)備上,重新 Load 一下即可。

而在 Release 模式下,ReactNative 會(huì)將 JS 代碼,整體打包,然后放到 assets 目錄下,然后從這里去加載 JS 代碼。

這樣的邏輯被封裝在 ReactInstanceManager 類的 recreateReactContextInBackgroundInner() 方法中,有興趣可以自行看看。

可以很清晰的看到,在 Debug 和 Release ,分別使用的不同的方式,加載 JS 文件的。這里為什么要說(shuō)到 ReactNative App 的編譯模式呢?其實(shí)和后面的邏輯有關(guān)系。

ReactNative 在 Debug 的情況下,其實(shí)還是很貼心的,如果出現(xiàn)崩潰的 Bug,會(huì)直接出紅屏,提示你崩潰的棧的具體信息,這些內(nèi)容可以幫助你快速的定位問(wèn)題。

這里給的例子,是一個(gè) Js 層的崩潰,可以看到它崩潰棧中,很清晰的看到 App.js 文件的第 48 行 21列,會(huì)有一個(gè) ReferenceError 的錯(cuò)誤。

最方便的是,你直接點(diǎn)擊崩潰棧的代碼,會(huì)自動(dòng)打開(kāi)對(duì)應(yīng)的 Js 文件。當(dāng)然,如果是一個(gè) Native 層的崩潰,雖然也會(huì)出紅屏,但是點(diǎn)擊并不能跳轉(zhuǎn)。

而假如現(xiàn)在同樣的代碼,使用 Release 模式的話,則會(huì)直接崩潰了。

2.2 不同編譯模式的 Js 有什么不同

假如 Release 和 Debug 一樣,可以有如此清晰的崩潰棧,其實(shí)問(wèn)題就已經(jīng)得到解決。但是當(dāng)你使用 Release 包來(lái)觸發(fā)一個(gè)崩潰的時(shí)候,你就會(huì)發(fā)現(xiàn),它并不是一樣的。

使用命令,可以直接安裝一個(gè) Release 版本到設(shè)備上。

  1. cd android && ./gradlew installRelease 

這里其實(shí)是兩行命令,先進(jìn)入到 android 項(xiàng)目的目錄,然后運(yùn)行 ./gradlew installRelease 這個(gè)沒(méi)什么好說(shuō)的,如果運(yùn)行失敗,注意一下當(dāng)前 shell 環(huán)境的目錄路徑。

此時(shí),我們?cè)龠\(yùn)行它就會(huì)直接導(dǎo)致崩潰,來(lái)看看崩潰的 Log 輸出。

 

很尷尬的是,雖然崩潰棧也被輸出出來(lái)了,和前面紅屏的截圖對(duì)比一下,也能發(fā)現(xiàn)它們其實(shí)是一個(gè)內(nèi)容。但是,這些代碼被混淆過(guò)了,如果 Native App 一樣,混淆過(guò)的代碼,反編譯來(lái)看會(huì)變成 a.b.c ,這里的效果也是類似的。

這樣的崩潰棧,其實(shí)拿出來(lái),可讀性非常的差,但是并不是不可讀的。

那么接下來(lái)來(lái)看看如何定位到這個(gè)崩潰的真實(shí)代碼,value@304:1133 這里,就是線索。我們把 Apk 解壓,拿到其內(nèi) assets/index.android.bundle 文件,它其內(nèi)就是我們 ReactNative 編譯好的 Js 文件,可以看到它的第 304 行 1133 列,就是我們需要定位的出了問(wèn)題的代碼。

 

這樣的編譯后的代碼,查 Bug 查起來(lái)就非常的費(fèi)時(shí)了,你首先需要根據(jù)當(dāng)前版本發(fā)布出去的 Apk,然后根據(jù)其中的 index.android.bundle 文件,定位到具體的代碼,之后再結(jié)合上下文全文搜索你的源代碼,才能找到對(duì)應(yīng)出錯(cuò)的代碼。

注意我這里本身項(xiàng)目就是一個(gè) Demo 項(xiàng)目,代碼量比較少,還能準(zhǔn)確的定位到問(wèn)題,如果是一個(gè)實(shí)際的項(xiàng)目,在打 Release 包的時(shí)候,會(huì)將所有的 JS 文件全部打包到 index.android.bundle 文件中去。在這個(gè)例子中,如果 props.username.name 這段代碼,我在很多地方都用到的話,篩選它也是非常麻煩的。

2.3 Release 缺少了什么?

從前面的內(nèi)容可以了解到,Release 包同樣也是可以定位到出錯(cuò)的代碼的。但是,你依然需要全文的搜索這段代碼,無(wú)法精準(zhǔn)定位到具體出錯(cuò)代碼所在的源文件,這是為什么?

Release 包的 Js 一定是經(jīng)過(guò)混淆的,會(huì)剝離掉一些必要的信息,這些被剝離的信息,導(dǎo)致我們無(wú)法精準(zhǔn)定位到代碼的源文件上。

在 Debug 模式下,運(yùn)行我們的 Packager Server ,然后在瀏覽器中訪問(wèn):

http://localhost:8081/index.android.bundle?platform=android&dev=true

請(qǐng)確保你的 Packager Server 保持運(yùn)行的情況下訪問(wèn)。

就可以看到當(dāng)前 Debug 模式,App 所運(yùn)行的 JS 代碼。我們直接根據(jù)出錯(cuò)代碼,精準(zhǔn)定位一下。

 

在這里,就可以很清晰的看到,它有一個(gè) fileName 和 lineNumber 兩個(gè)屬性,分別用來(lái)記錄當(dāng)前源碼的文件和這段代碼所在的行數(shù)。而回憶一下之前 Release 版本的 JS 代碼,你會(huì)發(fā)現(xiàn)關(guān)于源文件和行號(hào)的信息,被剝離了。

這也就是我們無(wú)法精準(zhǔn)定位出錯(cuò)代碼和鎖在源文件的根本原因。

2.4 Mapping

既然已經(jīng)明確的知道,在 Release 下,會(huì)過(guò)濾掉一些關(guān)于源文件和行號(hào)的信息,就如同 Android 的混淆一樣,那它是否包含類似對(duì)照關(guān)系的 Mapping 文件,可以幫助我們還原回去?

那么我們就需要找到 index.android.bundle 這個(gè)文件,是如何產(chǎn)生的。

ReactNative App 的打包,完全借助了 react.gradle 這個(gè)文件,你可以在 Android 工程的 build.gradle 文件中找到它。

繼續(xù)最終 node/modules 下的 react.gradle 文件。

可以看到它實(shí)際上是通過(guò) react-native bundle 命令,通過(guò)增加參數(shù)的形式,輸出 index.android.bundle 文件的。

而如果你查閱文檔,你會(huì)發(fā)現(xiàn) react-native 命令,還有一個(gè)可配置的參數(shù) —sourcemap-output,它就是我們需要的。

完整的說(shuō)明,你可以在這個(gè)網(wǎng)站上找到資料:

https://docs.bugsnag.com/platforms/react-native/showing-full-stacktraces/

我這里把關(guān)鍵信息截圖出來(lái)看著更清晰。

--sourcemap-output 命令非常的簡(jiǎn)單,只需要配置一個(gè)輸出的文件名就可以了。

這里我們直接在命令行里運(yùn)行如下代碼,就可以自動(dòng)重新生成一個(gè) index.android.bundle 文件,并且同時(shí)也會(huì)生產(chǎn)一個(gè)對(duì)應(yīng)關(guān)系的 map 文件。

  1. react-native bundle  
  2. --platform android  
  3. --dev false  
  4. --entry-file index.js  
  5. --bundle-output android/app/src/main/assets/index.android.bundle  
  6. --assets-dest android/app/src/main/res/  
  7. --sourcemap-output android-release.bundle.map 

運(yùn)行效果如下:

注意這段命令,需要在 ReactNative 目錄的根目錄下執(zhí)行,否者會(huì)提示你找不到 node_module 。執(zhí)行完成,就可以在 ReactNative 項(xiàng)目目錄下,看到輸出的 android-release.bundle.map 文件了。

點(diǎn)開(kāi)看看,完全看不懂,隨便截個(gè)圖讓大家感受一下。

其實(shí)到這里,已經(jīng)離我們的答案,更近一步了,Android 混淆的 Mapping 文件,也不是我們?nèi)庋勰芮逦炊模覀兘酉聛?lái)只需要找到它的解析規(guī)則就可以了。

解析這個(gè) source-map ,NodeJs 為我們提供了一個(gè)專門的庫(kù)來(lái)解析,這里不多解釋,直接上代碼。

  1. /** 
  2. * Created by cxmyDev on 2017/10/31. 
  3. */ 
  4. var sourceMap = require('source-map'); 
  5. var fs = require('fs'); 
  6. fs.readFile('../android-release.bundle.map''utf8'function (err, data) { 
  7.    var smc = new sourceMap.SourceMapConsumer(data); 
  8.    console.log(smc.originalPositionFor({ 
  9.        line: 304, 
  10.        column: 1133 
  11.    })); 
  12. }); 

注意看這里指定的 304 行 1133 列,我們運(yùn)行一下,看看輸出。

這段代碼,會(huì)很清晰的輸出對(duì)應(yīng)的源文件名和行號(hào),以及錯(cuò)的字段,還是很清晰的。

再來(lái)對(duì)照我們的源代碼驗(yàn)證一下。

確實(shí)也如 map.js 腳本輸出的一樣。

2.5 小結(jié)

到此,我們算是完成了 ReactNative App,崩潰分析的一個(gè)完整的鏈路邏輯,我們只需要自己寫(xiě)個(gè)腳本工具,就可以幫我們精準(zhǔn)定位了。

前面有點(diǎn)長(zhǎng),這里總結(jié)一下本小結(jié)的內(nèi)容。

  1. ReactNative 不同的編譯模式,使用的 JS 來(lái)源不同。Debug 模式來(lái)自 Packager Server,而 Release 模式,來(lái)自 Apk 的 assets 目錄。
  2. Debug 模式下的崩潰,會(huì)觸發(fā)紅屏,而 Release 模式下的崩潰,會(huì)直接導(dǎo)致 App 崩潰。
  3. Debug 模式,之所以可以顯示崩潰棧的基本信息,是因?yàn)榫幾g的 JS 文件中,包含了對(duì)應(yīng)的源文件和代碼行號(hào)。而這些在 Release 模式下的 JS 是沒(méi)有的。
  4. Release 模式的崩潰棧是被混淆后的,可以通過(guò)崩潰棧顯示的行號(hào)和列號(hào),來(lái)定位代碼,但是無(wú)法定位具體源文件。
  5. 通過(guò) react-native 命名,增加 --sourcemap-output參數(shù),指定輸出需要的混淆 Mapping 文件,它其內(nèi)包含了混淆的信息。
  6. 解讀 ReactNative Mapping 文件,可以使用 source-map 這個(gè) NodeJs 庫(kù)來(lái)進(jìn)行解析,可以精準(zhǔn)定位到行號(hào)和源文件名。

三、集成 Bugly 的坑

Bugly 的集成,非常的簡(jiǎn)單。如果之前用過(guò) Bugly 的,并且閱讀 ReactNative 和 原生通信 這部分文檔的話,差不多十分鐘就可以集成完畢。

還不了解 ReactNative 和原生通信內(nèi)容的,建議先閱讀一下本文檔了解一下。

ReactNative 原生模塊(中文文檔):

http://reactnative.cn/docs/0.49/native-modules-android.html#content

Bugly 的注冊(cè)沒(méi)有什么門檻,這里直接使用個(gè)人 QQ 號(hào)就可以登錄,創(chuàng)建一個(gè)專門為 ReactNative 測(cè)試的 App,然后根據(jù)文檔綁定對(duì)應(yīng)的 AppID 即可。

不清楚的可以查閱 Bugly 的文檔:

https://bugly.qq.com/docs/user-guide/instruction-manual-android/?v=20171030170001

這部分內(nèi)容沒(méi)什么好說(shuō)的,都是標(biāo)準(zhǔn)話的流程。接下來(lái)我們來(lái)看看集成它將面臨的坑。

3.1 Debug 模式下不會(huì)上報(bào)崩潰

之前也提到,Debug 模式下,如果觸發(fā)了崩潰,會(huì)直接進(jìn)入紅屏狀態(tài),顯示當(dāng)前崩潰棧的信息。這個(gè)功能,在我們開(kāi)發(fā)階段,非常的好用,能快速定位問(wèn)題。

但是正是因?yàn)?ReactNative 會(huì)在 Debug 模式下,Hook 住我們的崩潰棧,從而會(huì)導(dǎo)致 Bugly SDK 無(wú)法搜集到對(duì)應(yīng)的崩潰也就無(wú)法進(jìn)行上報(bào)。

所以,如果你在 ReactNative 項(xiàng)目?jī)?nèi),集成了 Bugly 之后。造的崩潰沒(méi)有得到上報(bào),檢查一下自己編譯模式,一定要切換到 Release 模式下。

3.2 崩潰信息整合

Bugly 為了方便開(kāi)發(fā)者查看,會(huì)將類似崩潰棧的崩潰,整合成一個(gè),然后進(jìn)行計(jì)數(shù)統(tǒng)計(jì),只顯示當(dāng)前崩潰了多少次和影響的人數(shù)。

而在 ReactNative 項(xiàng)目中,如果是 Native 層出現(xiàn)的崩潰,那其實(shí)沒(méi)有什么差別,崩潰信息和我們平時(shí)開(kāi)發(fā)常規(guī) App 一樣。

但是,如果這個(gè)崩潰是發(fā)生在 Js 層的話,它最終會(huì)把崩潰拋到 Native 層,同樣也是可以統(tǒng)計(jì)的的。但是這些崩潰會(huì)被封裝成一個(gè) JavascriptException 拋出來(lái),從而導(dǎo)致它們被簡(jiǎn)單的歸為了 JavascriptException 。可能它們描述的是不同的 Bug,但是卻被歸位一類,這樣之后查閱起來(lái),就需要人工進(jìn)行篩選。

這里看兩個(gè)崩潰,***個(gè)發(fā)生在 Js 層,第二個(gè)發(fā)生在 Native 層。

3.3 解讀 Bugly 中,js層的崩潰

Native 層的崩潰,和常規(guī) App 一樣,沒(méi)什么好說(shuō)的。這里只看 Js 層的崩潰信息。

從這個(gè)崩潰棧你可以發(fā)現(xiàn),其實(shí)下面 Java 的棧,基本上沒(méi)有任何信息。這里主要是閱讀上面 TypeError 后面的信息。這里描述了 Js 層崩潰的所有信息,包含錯(cuò)誤和崩潰棧。

前面的內(nèi)容如果認(rèn)真看了,應(yīng)該不難發(fā)現(xiàn)此處就是對(duì) JS 崩潰輸出的格式化拉平成一行了,所以如果我們要針對(duì) Bugly 的崩潰棧編寫(xiě)解析腳本,就需要考慮到這些情況。

四、總結(jié)

本文說(shuō)是 ReactNative 集成 Bugly 的一些坑,實(shí)際上講的更多的是在生產(chǎn)環(huán)境下,如何分析 ReactNative 的崩潰棧。這些被搜集的原始信息,如何被還原成我們需要的信息。

不過(guò)這些,還是期待國(guó)內(nèi)環(huán)境下,更多第三方 SDK 能支持到 ReactNative,畢竟官方團(tuán)隊(duì)支持的肯定要比我們自己寫(xiě)補(bǔ)丁腳本來(lái)的方便實(shí)用。

今天在承香墨影公眾號(hào)的后臺(tái),回復(fù)『成長(zhǎng)』。我會(huì)送你一些我整理的學(xué)習(xí)資料,包含:Android反編譯、算法、設(shè)計(jì)模式、虛擬機(jī)、Linux、Web項(xiàng)目源碼。

【本文為51CTO專欄作者“張旸”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)微信公眾號(hào)聯(lián)系作者獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來(lái)源: 51CTO專欄
相關(guān)推薦

2015-04-16 09:48:12

APP測(cè)試

2021-05-27 09:27:35

開(kāi)發(fā)技能緩存

2021-06-30 07:19:35

微服務(wù)業(yè)務(wù)MySQL

2015-10-12 11:26:12

iOS 9適配

2021-06-08 06:13:16

React開(kāi)發(fā)開(kāi)發(fā)技術(shù)

2023-12-18 13:10:00

finally死鎖JVM 崩潰

2022-04-02 06:43:44

CLI 工具Fig終端自動(dòng)補(bǔ)全

2010-08-05 13:54:36

NFS協(xié)議

2022-01-16 08:04:44

集群部署canal

2020-08-07 08:04:03

數(shù)據(jù)庫(kù)MySQL技術(shù)

2021-04-16 08:11:24

js前端JavaScript

2020-02-06 16:23:00

LinuxWeb前端

2019-09-17 09:21:01

2018-06-14 09:35:35

2017-02-21 13:36:11

iosAPP性能

2015-07-06 11:28:40

2009-06-15 15:31:11

JBossDeploy

2018-04-12 09:29:56

HTTP服務(wù)器問(wèn)題

2020-07-29 08:03:26

Celery異步項(xiàng)目

2019-10-21 09:14:00

Wireshark網(wǎng)絡(luò)抓包
點(diǎn)贊
收藏

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

男同在线观看| 91aaa在线观看| 日韩免费小视频| 国产精品日产欧美久久久久| 亚洲japanese制服美女| caoporn91| 亲子伦视频一区二区三区| 在线观看国产日韩| 黑人巨大国产9丨视频| 人人妻人人澡人人爽久久av| 日本不卡视频一二三区| 久久精品久久久久| 黄色av网址在线观看| 国产69精品久久久久按摩| 亚洲精品你懂的| 国产伦精品一区二区三区高清| 91视频在线视频| 国产精品videossex久久发布| 亚洲乱码国产乱码精品精| 老司机久久精品| 在线黄色的网站| 一区二区视频免费在线观看| 日韩经典在线视频| 亚洲av永久纯肉无码精品动漫| 视频一区欧美日韩| 国产69精品99久久久久久宅男| 成年人在线免费看片| 精品少妇3p| 欧美一三区三区四区免费在线看| 成人免费观看视频在线观看| h片在线播放| 国产欧美一区二区三区鸳鸯浴 | 日本成人三级电影| 亚洲天堂a在线| 日韩在线第一区| 天天舔天天干天天操| 国产一区在线精品| 国产精品久久久久高潮| 日韩黄色三级视频| 欧美/亚洲一区| 日韩在线小视频| 自拍偷拍亚洲天堂| 欧美激情影院| 精品国产91亚洲一区二区三区婷婷| 91精品999| 黄色成人小视频| 日本韩国欧美国产| 成人在线免费在线观看| 91黄页在线观看| 亚洲一区二区三区中文字幕在线| 精品一区二区成人免费视频| 18视频免费网址在线观看| 国产片一区二区| 欧美一区二区三区在线免费观看| 五月天久久久久久| www.视频一区| 国产一区二区精品免费| 欧美熟妇乱码在线一区 | 免费a级黄色片| 欧美高清视频看片在线观看 | 国产精品老牛影院在线观看| 国产精品免费精品一区| 亚洲免费网址| 人九九综合九九宗合| 亚洲婷婷综合网| 奶水喷射视频一区| 国产福利视频一区二区| www毛片com| 奇米精品一区二区三区四区| 国产精品丝袜白浆摸在线| 亚洲视频在线观看一区二区| 捆绑变态av一区二区三区| 国产精品影院在线观看| 97超碰中文字幕| 国产福利电影一区二区三区| 成人欧美一区二区三区视频| 三级网站在线看| 久久婷婷久久一区二区三区| 日韩啊v在线| 免费在线你懂的| 一区二区三区四区在线免费观看| 日韩视频在线视频| 中文字幕在线视频网站| 欧美伊人精品成人久久综合97| 国产一二三区av| 久久丁香四色| 亚洲精品成人久久电影| 亚洲久久久久久久| 婷婷亚洲最大| 91国产高清在线| 中文资源在线播放| 国产成人亚洲综合a∨猫咪| 精品国产免费久久久久久尖叫 | 伊人成色综合网| 精品日韩视频| 欧美大黄免费观看| 人妻少妇一区二区| 亚洲成人99| 欧美亚洲另类激情另类| 中国老头性行为xxxx| 国产福利不卡视频| 午夜视频久久久| 波多野在线观看| 欧美色电影在线| 男女性杂交内射妇女bbwxz| 国产精品手机在线播放| 欧美老女人性视频| 欧美一区二区三区久久久| 久久成人久久爱| 六十路精品视频| 国产欧美久久久久久久久| 欧美色videos| 农村末发育av片一区二区| 成人三级视频| 38少妇精品导航| 精品人妻无码一区二区三区蜜桃一| 91在线视频观看| 欧美一二三不卡| 国产成人免费9x9x人网站视频| 欧美精品一区二区三| 无码人妻精品中文字幕 | 午夜久久久精品| 欧美大胆视频| 欧美国产日本在线| 91极品身材尤物theporn| 91亚洲精品一区二区乱码| 可以在线看黄的网站| 成人不卡视频| 亚洲欧美综合图区| 国产精品美女久久久久av爽| 懂色av一区二区在线播放| 亚洲人成影视在线观看| 在线免费av资源| 亚洲第一视频在线观看| 少妇高潮在线观看| 亚洲高清av| 91视频免费在线| 欧美69xxx| 欧美视频一区二区三区在线观看| 欧美黑人欧美精品刺激| 亚洲国产91| 国产精品自拍首页| 欧美aaaxxxx做受视频| 日韩一区二区视频| 日本a级片视频| 国产一区二区视频在线| 中文字幕欧美人与畜| 国产成人精品一区二区三区视频 | 色偷偷88欧美精品久久久| 在线免费观看a级片| 伊人久久亚洲美女图片| 99视频在线免费观看| 永久免费网站在线| 日韩一级二级三级精品视频| 亚洲天堂黄色片| 国产剧情在线观看一区二区| 热这里只有精品| 国产视频一区二| 精品国产一区二区三区四区在线观看 | 国内自拍第二页| 国内精品久久久久久久久电影网| 国产激情久久久久| 97最新国自产拍视频在线完整在线看| 欧美最猛黑人xxxxx猛交| 日本高清黄色片| 久久电影网电视剧免费观看| 国产精品夜夜夜爽张柏芝| 综合久久av| 欧美疯狂做受xxxx高潮| 亚洲xxx在线| 婷婷久久综合九色国产成人 | 国产精品成人一区二区三区夜夜夜| 国产精品人人爽人人爽| 99精品视频精品精品视频| 亚洲aⅴ日韩av电影在线观看| 影院在线观看全集免费观看| 日韩av在线高清| 男操女视频网站| 亚洲视频一二三| 亚洲图片欧美另类| 亚洲视频成人| 亚洲精品一区二| 日韩欧美一级| 欧美一级黑人aaaaaaa做受| 福利片在线观看| 91精品黄色片免费大全| 日本特黄一级片| 国产嫩草影院久久久久| 午夜国产福利在线观看| 怡红院精品视频在线观看极品| 欧美精品国产精品久久久| 国精品产品一区| 久久久视频在线| 91激情在线| 精品国产乱码久久久久久牛牛| www亚洲视频| 亚洲欧美日韩精品久久久久| 亚洲av网址在线| 国产在线精品一区二区不卡了| 毛片在线视频播放| 欧美成人激情| 久久久人人爽| 精品网站999| 欧洲一区二区视频| 影音先锋在线播放| 在线观看欧美视频| 日本黄视频在线观看| 欧美日韩国产精品成人| 日产精品久久久久| 中文字幕日韩精品一区| 魔女鞋交玉足榨精调教| 国产高清精品网站| 天天爽天天爽夜夜爽| 亚洲裸体俱乐部裸体舞表演av| 伊人久久av导航| 久久99精品久久久久久园产越南| 亚洲综合在线小说| 在线一区视频观看| 1769国内精品视频在线播放| 亚洲卡一卡二| 日韩专区在线观看| 国产黄色片在线播放| 日韩av影视综合网| 精品女同一区二区三区| 欧美日韩aaaaa| 日韩国产成人在线| 欧美午夜电影在线| 日韩成人免费在线观看| 一区二区三区日韩欧美| 日韩一区二区三区四区视频| 久久品道一品道久久精品| 妖精视频一区二区| 国产成人免费视| 99热这里只有精品2| 韩国午夜理伦三级不卡影院| 88av.com| 久久激情久久| 国产主播在线看| 国产亚洲一区在线| 青青草成人免费在线视频| 欧美日韩福利| 2022中文字幕| 国内精品福利| 欧美精品卡一卡二| 精品69视频一区二区三区Q| 国产一二三区在线播放| 狠狠色狠狠色综合日日tαg| 蜜臀av性久久久久蜜臀av| 国产精品福利在线观看播放| 一级做a爰片久久| 国产精品毛片久久| 中文字幕成人一区| 综合激情在线| 国产欧美精品aaaaaa片| 激情亚洲成人| 日韩激情免费视频| 亚洲欧美卡通另类91av| 国产l精品国产亚洲区久久| 国产精品免费观看| 日韩国产精品91| 亚洲五月天综合| 麻豆国产精品一区二区三区 | 日韩欧美亚洲另类制服综合在线| 国产欧美日韩综合精品一区二区三区| 欧美丰满美乳xxx高潮www| 国产老妇伦国产熟女老妇视频| 91精品国产免费| 亚洲AV无码精品自拍| 亚洲第一免费播放区| 毛片免费在线观看| 中文字幕在线观看亚洲| 大片免费在线观看| 国模视频一区二区三区| 成人教育av| 国产一区在线播放| 我要色综合中文字幕| 狠狠色综合网站久久久久久久| 亚洲人成网www| 天天好比中文综合网| 91精品二区| 亚洲熟妇国产熟妇肥婆| 日本欧美一区二区| 三上悠亚 电影| 97精品久久久午夜一区二区三区| 日韩毛片无码永久免费看| 国产精品福利一区二区三区| 麻豆疯狂做受xxxx高潮视频| 婷婷综合另类小说色区| 一区精品在线观看| 亚洲精品一区二区三区四区高清| 日本一级在线观看| 久久精品免费播放| 欧美xxxhd| 91精品国产综合久久香蕉最新版 | 另类激情视频| 91精品视频专区| 天堂俺去俺来也www久久婷婷 | 青青草视频网站| 国产女人aaa级久久久级| 久久久久久av无码免费网站| 色综合久久久久综合99| 国产jzjzjz丝袜老师水多 | 亚洲影院色无极综合| 天海翼精品一区二区三区| 一区二区免费在线视频| 亚洲狼人精品一区二区三区| 波多野结衣国产精品| 91一区二区三区在线播放| 国产探花在线视频| 欧美视频在线免费看| 精品人妻午夜一区二区三区四区| 亚洲小视频在线观看| 欧美1234区| 国产在线精品播放| 亚洲第一福利专区| 天天想你在线观看完整版电影免费| 国产农村妇女精品一二区| 97人人模人人爽人人澡| 国产欧美日韩在线看| 免费日韩一级片| 日韩三级视频在线看| 91se在线| 国产成人在线一区| 欧美在线导航| 成人免费视频91| 国产乱理伦片在线观看夜一区| 人人艹在线视频| 色天天综合色天天久久| 女人18毛片一区二区三区| 欧美成人中文字幕| 亚洲图片小说区| 亚洲 国产 欧美一区| 久久综合图片| 精品人妻一区二区三区视频| 亚洲成av人片在线| www日本视频| 欧美另类精品xxxx孕妇| 亚洲国产aⅴ精品一区二区三区| 日韩一本精品| 久久一区激情| 99久久人妻无码精品系列| 五月激情综合婷婷| 五月婷婷在线观看视频| 国外成人免费在线播放| youjizzjizz亚洲| 乱熟女高潮一区二区在线| 国产又黄又大久久| 看黄色录像一级片| 3d成人动漫网站| 18加网站在线| 99精品99久久久久久宅男| 欧美精品一线| 午夜不卡久久精品无码免费| 亚洲一级片在线观看| 亚洲精品成人电影| 久久久久久久久国产精品| 草草视频在线一区二区| 国产av国片精品| 91视频一区二区| 一本一道无码中文字幕精品热| 国产亚洲视频中文字幕视频| 午夜无码国产理论在线| 日韩在线导航| 国内精品伊人久久久久av影院 | 日韩精品――色哟哟| 亚洲伊人伊色伊影伊综合网| 日韩专区第一页| 国产精品都在这里| 91亚洲人成网污www| 又黄又爽又色的视频| 亚洲电影在线免费观看| 天堂av网在线| 国产精品a久久久久久| 久久免费大视频| 麻豆免费在线观看视频| 婷婷开心激情综合| 95在线视频| 999国内精品视频在线| 亚洲国产激情| 2019男人天堂| 日韩欧美成人激情| 亚洲精品mv| 宅男在线精品国产免费观看| 国产成人精品免费| www.国产com| 日韩日本欧美亚洲| 欧美黄色录像| 国产精品区在线| 香蕉成人啪国产精品视频综合网| 国产精品99999| 成人av免费在线看| 巨乳诱惑日韩免费av| 日日噜噜夜夜狠狠久久波多野| 亚洲黄页视频免费观看| 国产精品诱惑| 青青草国产精品视频| 中文字幕一区二区三区四区| 后进极品白嫩翘臀在线视频| 国产成人在线播放| 激情文学一区|