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

亚洲欧洲国产精品久久| 国产99在线|中文| 五月天丁香社区| 午夜伦理福利在线| 国产午夜精品一区二区三区视频| 国产精品综合久久久| 国产亚洲欧美精品久久久www| 午夜欧洲一区| 91麻豆精品国产综合久久久久久| 免费看毛片的网址| av天在线观看| 成人免费在线电影| 欧美一区国产| 亚洲欧美日本在线| 欧美动漫一区二区| 国产wwwxxx| 可以免费看不卡的av网站| 久久亚洲精品成人| 一区二区三区四区免费| 538任你躁精品视频网免费| 欧美性xxxx在线播放| 99久re热视频精品98| 精品影院一区| 处破女av一区二区| 91精品国产自产在线观看永久| 日本系列第一页| 亚洲国产合集| 欧美刺激脚交jootjob| 最新中文字幕免费视频| 一根才成人网| 午夜视频久久久久久| 免费看黄色a级片| 日本电影全部在线观看网站视频| 2021国产精品久久精品| 福利视频一区二区三区| 99热这里是精品| 麻豆91精品视频| 国产成人激情小视频| 九九热在线免费观看| 亚洲黄色三级| 欧美激情在线观看视频| 久久久精品视频免费观看| 91免费精品| 最近中文字幕2019免费| av手机在线播放| 美女精品一区最新中文字幕一区二区三区| 欧美xxxx在线观看| 美女又黄又免费的视频| 亚洲福利影视| 91精品国产一区二区三区香蕉| 天堂av在线网站| 成人在线爆射| 色老汉一区二区三区| 50路60路老熟妇啪啪| 欧美电影免费看| 色偷偷88欧美精品久久久| 国产日韩一区二区在线| 国产精品粉嫩| 91成人免费在线视频| aa免费在线观看| 搜成人激情视频| 在线观看不卡一区| 777视频在线| 欧美aaa级| 欧美一区二区三区小说| 黑人巨大猛交丰满少妇| 97视频一区| 日韩成人性视频| 中文字幕免费高清| 日韩情爱电影在线观看| 久久色免费在线视频| 国产精品久久久精品四季影院| 欧美在线亚洲| 97激碰免费视频| 黄色在线免费观看| 久久精品国产一区二区| 亚洲精品日产aⅴ| 免费国产羞羞网站视频| 久久精品视频在线免费观看 | 91成人在线观看喷潮教学| 黄色污网站在线观看| 色综合久久久久久久久| 天天干天天操天天做| 日韩精品一级| 亚洲欧美日韩国产中文| 精品少妇一区二区三区密爱| 国产精品a级| 日本精品一区二区三区在线播放视频| 无码免费一区二区三区| 国产精品亚洲成人| 欧美精品一区二区三区四区五区 | 天堂资源在线亚洲| 中文字幕久久久av一区| 麻豆视频在线观看| 模特精品在线| 亚洲xxxxx电影| 清纯唯美亚洲色图| 亚洲美女在线一区| 成人一级片网站| 日韩在线视频一区二区三区| 亚洲欧美国产精品va在线观看| 日本黄色免费片| 先锋亚洲精品| 国产乱码一区| 日本三级在线播放完整版| 天天色天天操综合| 亚洲精品成人在线播放| 夜夜春成人影院| 欧美区在线播放| 在线观看视频二区| 91麻豆精品秘密| 日本精品久久久久久久久久| 亚洲人体在线| 一区二区三区高清国产| 日本视频www| 国产一区二区三区高清播放| 日韩高清av电影| sm久久捆绑调教精品一区| 欧美日韩免费一区二区三区| 玖草视频在线观看| 国产综合精品| 亚洲影院色在线观看免费| 黄色小视频在线免费观看| 亚洲大片免费看| 超碰中文字幕在线观看| 日韩国产一区| 国产成人精品免高潮在线观看| 少妇av在线播放| 亚洲无线码一区二区三区| 红桃视频 国产| 欧美在线电影| 国产精品电影网站| 欧美69xxxxx| 色综合中文字幕国产| 日本黄色录像片| 91久久黄色| 国产亚洲欧美另类一区二区三区| av网站大全在线| 91精品国产色综合久久| 天天操夜夜操av| 精品亚洲成a人| 自拍亚洲欧美老师丝袜| 香蕉久久一区| 久久高清视频免费| 99国产精品99| 亚洲自拍偷拍九九九| 中文字幕第六页| 欧美午夜电影在线观看 | 亚洲+小说+欧美+激情+另类| 97久久伊人激情网| 日本黄色大片视频| 精品久久久久久久久国产字幕 | 国产伦精品一区二区三区视频痴汉| 国产精品丝袜在线| 小明看看成人免费视频| 911久久香蕉国产线看观看| 成人性教育视频在线观看| 成人黄色网址| 精品国产精品一区二区夜夜嗨| 国产在线免费视频| 91网上在线视频| 国产v亚洲v天堂无码久久久| 成人久久一区| 亚洲v日韩v综合v精品v| av手机免费在线观看| 日韩av在线不卡| 波多野结衣视频观看| 国产精品欧美久久久久无广告 | 久久久久免费看黄a片app| 欧美变态挠脚心| 国产精品欧美激情| 成人av免费| 日韩经典中文字幕| 中文字幕一区二区三区免费看| 国产精品国产三级国产有无不卡 | 国产精品网站在线| 成人免费播放视频| 国产亚洲毛片在线| 亚洲一区二区三区加勒比| 亚洲一区二区三区日本久久九| 97在线视频免费播放| sese一区| 精品久久久久久久久久久久包黑料| 亚洲日本韩国在线| 亚洲欧洲另类国产综合| 午夜一区二区三区免费| 久久97超碰国产精品超碰| 日韩伦理在线免费观看| 成人一区不卡| 国产亚洲二区| 国产精品亚洲四区在线观看| 97超级碰碰碰久久久| a天堂中文在线| 亚洲成人av在线播放| 涩涩视频在线观看| 亚洲国产日韩a在线播放性色| av手机在线播放| 成人性生交大片免费看中文| 一级黄色香蕉视频| 在线成人www免费观看视频| 婷婷久久伊人| 欧美日韩一区二区三区四区不卡| 国产一区视频在线| 一区二区三区短视频| 欧美大片网站在线观看| a黄色在线观看| 精品亚洲精品福利线在观看| av老司机久久| 欧美视频一区二区三区四区 | 欧美熟乱第一页| 国产成人无码精品久在线观看| 亚洲男人的天堂在线aⅴ视频| 精品成人av一区二区三区| 成人天堂资源www在线| 污污网站在线观看视频| 久久人人精品| 动漫av网站免费观看| 午夜欧美精品久久久久久久| 视频在线99re| 一区二区三区日本久久久| 国产亚洲情侣一区二区无| 国产精品成人3p一区二区三区| 国产精品video| 在线观看爽视频| 97在线视频观看| 黄色在线观看视频网站| 免费av一区二区| 麻豆网站在线免费观看| 色噜噜狠狠色综合网图区 | 欧美成人一区二区三区电影| 91九色在线porn| 亚洲一二在线观看| 国产在线三区| 国产性色av一区二区| 欧美捆绑视频| 亚洲区免费影片| 精品影院一区| 伊人久久久久久久久久久| 黄色片视频在线观看| 国产视频精品自拍| 四虎影院在线域名免费观看| 亚洲精品mp4| 午夜视频免费看| 日韩精品在线观看视频| 亚洲av激情无码专区在线播放| 日韩精品极品视频| 天天操天天干天天插| 亚洲黄色有码视频| 天堂在线中文资源| 亚洲欧洲黄色网| 成人亚洲性情网站www在线观看| 亚洲视频在线观看视频| 国产69精品久久app免费版| 在线日韩欧美视频| 老司机在线看片网av| 日韩网站免费观看高清| 91caoporm在线视频| 日韩中文字幕在线视频| 最新av在线播放| 高清亚洲成在人网站天堂| 激情视频网站在线播放色| 91tv亚洲精品香蕉国产一区7ujn| 伊人久久国产| 91精品久久久久久久久久另类| 精品视频在线观看网站| 国产精品一国产精品最新章节| 日韩高清成人在线| 亚洲精品二区| 欧美日韩一区二区三区四区在线观看 | 婷婷精品进入| 国产高清av在线播放| 久久久久.com| 中文字幕第一页在线视频| 国产精品亚洲视频| 国产一级二级在线观看| 日本一区二区三区四区| 伊人久久久久久久久久久久久久| 一区二区成人在线| av网站中文字幕| 欧美美女bb生活片| 熟妇人妻系列aⅴ无码专区友真希| 亚洲欧美制服综合另类| av网站大全在线| 国产91免费看片| 亚洲一区二区免费在线观看| 欧美一进一出视频| 中文一区一区三区免费在线观看| 18禁免费无码无遮挡不卡网站| 激情五月激情综合网| 亚洲第一黄色网址| 国产精品成人免费| 国产www在线| 日韩一区二区三区免费观看| 国产色在线 com| 久久久久久美女| 国产精品99| 久久成人资源| 欧美在线日韩| 日本激情综合网| av在线不卡观看免费观看| 5566中文字幕| 色又黄又爽网站www久久| 国产成人精品毛片| 亚洲人成电影网| av2020不卡| 91丝袜美腿美女视频网站| 亚洲另类春色校园小说| 国产91在线亚洲| 另类综合日韩欧美亚洲| av在线网站观看| 亚洲福利电影网| 99久久国产热无码精品免费| 亚洲一区二区久久久| caoporn视频在线观看| 亚洲一区二区三区视频播放| 成人亚洲一区二区| 日韩av播放器| 久久综合给合久久狠狠狠97色69| 九九视频在线观看| 欧美一区二区三区小说| 免费在线观看黄色| 国产精品久久久久久久久久免费| 久久久久97| 亚洲精品无码国产| 在线成人国产| 日韩欧美中文字幕精品| 天天干在线观看| 欧美成人一区二区三区电影| 欧洲精品久久久久毛片完整版| 欧美日韩国产精品一区二区| 亚洲人成人一区二区三区| 中文写幕一区二区三区免费观成熟| 国产精品短视频| 中国精品一区二区| 亚洲日韩中文字幕| 三上悠亚亚洲一区| 蜜桃91精品入口| 欧美专区一区二区三区| 亚洲精品视频大全| 欧美视频一区二区三区…| 天堂8在线视频| 26uuu亚洲伊人春色| 欧美激情影院| 日韩一级性生活片| 成人精品一区二区三区四区 | 欧美日韩另类图片| 北条麻妃在线视频观看| 99热在这里有精品免费| 91视频免费网址| 亚洲免费伊人电影在线观看av| 伊伊综合在线| 色视频一区二区三区| 久久精品国产99| 国产精品视频一区二区三| 欧美大片在线观看| а√在线天堂官网| 久久综合婷婷综合| 日本成人超碰在线观看| 最新黄色av网址| 日韩久久久精品| 美女网站在线看| 日韩一区二区三区高清| 看片网站欧美日韩| 欧美黑人一级片| 日韩成人av在线| 精品123区| 综合一区中文字幕| 国产成人午夜片在线观看高清观看| 国产一二三四在线| 亚洲美女av在线| 国产一区高清| 国产欧美日韩小视频| 91老司机福利 在线| 在线观看亚洲国产| 欧美激情区在线播放| 视频一区欧美| 波多野结衣免费观看| 欧美性黄网官网| 毛片在线看网站| 精品国产免费一区二区三区| 日韩av网站免费在线| 欧美日韩精品亚洲精品| 亚洲欧美在线看| 美女国产精品久久久| 亚洲爆乳无码专区| 亚洲精品免费在线| 免费成人av电影| 5566av亚洲| 老牛影视一区二区三区| 国产av无码专区亚洲av毛网站| 日韩精品极品在线观看| 亚洲免费看片| 茄子视频成人免费观看| 亚洲欧美激情小说另类| 日韩有码电影| 91在线在线观看| 奇米四色…亚洲| 999这里只有精品| 久久99国产综合精品女同| 精品久久久久久久|