亭亭五月天在线观看,亭亭五月天在线观看,国产最新av一区二区,国产 高清 中文字幕,99re热久久亚洲综合精品成人,熟妇 一区二区三区,一级做a爰片性色毛片武则天,美女的骚穴视频播放,国产美女午夜免费视频

首頁(yè)>國(guó)內(nèi) > 正文

掌控 Android 編譯利器,攜程火車票AAR 編譯速度優(yōu)化實(shí)踐-百事通

2023-05-12 10:04:10來(lái)源:攜程技術(shù)

作者簡(jiǎn)介

小明,攜程移動(dòng)開發(fā)工程師,專注于移動(dòng)端框架和基建開發(fā);


(資料圖片僅供參考)

黃拉歡,攜程移動(dòng)開發(fā)經(jīng)理,專注于移動(dòng)端框架建設(shè)及性能調(diào)優(yōu)。

一、背景

Android 項(xiàng)目一般使用 Gradle 作為構(gòu)建打包工具,隨著業(yè)務(wù)需求的不斷迭代,代碼量提升的同時(shí),Gradle 編譯耗時(shí)也在不斷的增長(zhǎng),而編譯速度會(huì)直接決定開發(fā)流程效率的高低,影響面主要涉及到開發(fā)和測(cè)試階段。

對(duì)于火車票項(xiàng)目,經(jīng)過長(zhǎng)期的迭代過程導(dǎo)致模塊眾多工程龐大,優(yōu)化前一次干凈的全量編譯時(shí)間可達(dá)到10m39s,造成開發(fā)和測(cè)試都需要長(zhǎng)時(shí)間等待編譯出包,嚴(yán)重影響到開發(fā)和測(cè)試的效率。因此對(duì)火車票 App 進(jìn)行編譯速度優(yōu)化是件亟待解決的事情。

本次編譯速度優(yōu)化采用的方案是模塊AAR方案, 優(yōu)化目標(biāo)為: 優(yōu)化后一次干凈的全量編譯時(shí)間縮減為原來(lái)編譯時(shí)間的50%以下。

二、 模塊AAR方案介紹

Google 官網(wǎng)提供了優(yōu)化構(gòu)建速度的幾種方案,但基本上效果都不明顯。業(yè)內(nèi)常用的編譯加速方案一般有模塊aar、控制增量編譯、transform 優(yōu)化、dexBuilder 優(yōu)化等,其中有些方案侵入性太強(qiáng)或者 ROI 不高,模塊aar方案侵入性低,預(yù)計(jì)收益顯著,并且在大廠已經(jīng)成為標(biāo)配方案,可以作為本次編譯優(yōu)化的主方向。

AAR(Android ARchive)文件為 Android 庫(kù)編譯產(chǎn)物,其中包括 class、資源和清單文件,可用作 Android 應(yīng)用模塊依賴項(xiàng)。在Android 的構(gòu)建流程中,源碼編譯時(shí)會(huì)將依賴的 aar 庫(kù)和應(yīng)用模塊合并,在通過 apkbuilder 輸出 apk 產(chǎn)物。

圖1:android的構(gòu)建流程圖

Android 項(xiàng)目大多都是多模塊 Gradle 項(xiàng)目,構(gòu)建項(xiàng)目時(shí)所有的子模塊需要參與編譯,導(dǎo)致全量編譯時(shí)間冗長(zhǎng)。實(shí)際上,對(duì)于大部分的開發(fā)人員來(lái)說(shuō),并不需要關(guān)注所有的模塊,只需要負(fù)責(zé)功能相關(guān)的業(yè)務(wù)模塊即可,因此這也提供了模塊aar方案的切入點(diǎn)。

一般來(lái)說(shuō),aar方案都大同小異,涉及到模塊aar發(fā)布,project和module依賴的切換,傳遞依賴的處理等幾個(gè)方面。依賴切換我們采用的是 Gradle 官方文檔中直接自定義依賴項(xiàng)的解析方案,通過定義依賴替換規(guī)則來(lái)更改依賴項(xiàng);aar的發(fā)布使用的是maven-publish插件;傳遞依賴使用的mavenPom文件管理。

火車票項(xiàng)目經(jīng)過多次模塊化的重構(gòu)后現(xiàn)有20個(gè)子模塊,可將這些子模塊獨(dú)立打包aar并發(fā)布至遠(yuǎn)程maven倉(cāng)庫(kù)中,在需要打包時(shí)用aar替換項(xiàng)目的構(gòu)建,就能將編譯的時(shí)間給節(jié)省下來(lái),以提高打包效率。

圖2: 模塊aar開發(fā)示意圖

三、改造過程和遇到的問題3.1 構(gòu)建測(cè)量指標(biāo)

良好的優(yōu)化基于數(shù)據(jù)的呈現(xiàn),首先第一步需要做的是分析構(gòu)建的性能。此處采用的是官方提供的Gradle --profile選項(xiàng)的方式統(tǒng)計(jì)數(shù)據(jù)?;静襟E為:

gradlew clean在每個(gè)build之間執(zhí)行干凈編譯,確保剖析完整的構(gòu)建流程;gradlew--profile--offline--rerun-tasks assembleFlavorDebug為某個(gè)變種task啟用性能剖析,并確保gradle使用的是緩存依賴項(xiàng),且強(qiáng)制gradle重新運(yùn)行所有任務(wù);構(gòu)建完成后,會(huì)生成html格式的性能剖析報(bào)告,可用于分析構(gòu)建信息和前后構(gòu)建對(duì)比;3.2 模塊aar的改造

因存在單個(gè)模塊發(fā)布的過程,模塊間需要盡量的解耦,而解耦首先要進(jìn)行模塊的劃分;其次,存在依賴關(guān)系的模塊間不能互相使用資源,這會(huì)造成編譯的失敗,所以理清模塊間的關(guān)系是當(dāng)務(wù)之急。

同時(shí),我們需意識(shí)到當(dāng)我們完成 Gradle 腳本的編寫后,我們得到的應(yīng)該是一個(gè)app殼+其他模塊的依賴樹組合,可通過以下步驟進(jìn)行改造:

1)模塊間依賴樹重構(gòu)

首先分析項(xiàng)目各模塊依賴關(guān)系, 可使用開源腳本工具projectDependencyGraph.gradle生成依賴圖,示意圖如下:

圖3: 模塊間依賴樹混亂示意圖

可直觀的看出模塊間依賴關(guān)系冗余,模塊間的依賴不清晰,且基礎(chǔ)庫(kù)一般固定卻呈現(xiàn)網(wǎng)狀結(jié)構(gòu)。故需對(duì)網(wǎng)狀結(jié)構(gòu)進(jìn)行整理,將不經(jīng)常改動(dòng)的庫(kù)直接發(fā)布遠(yuǎn)程,如下:

圖4: 模塊間依賴樹整理示意圖

2)歷史Gradle腳本重構(gòu)

因歷史原因,火車票項(xiàng)目的 Gradle 邏輯冗余繁瑣,無(wú)統(tǒng)一管理略顯臃腫。為提高 Gradle 的擴(kuò)展性和靈活性,需要重構(gòu) Gradle 代碼:

對(duì)現(xiàn)有 Gradle 腳本按功能職責(zé)拆分成單個(gè)Gradle文件,需要使用的地方通過apply關(guān)鍵字應(yīng)用即可;基于原插件com.android.application和com.android.library建立兩套基準(zhǔn)Gradle文件,統(tǒng)一控制不同類型的模塊;抽取共有基礎(chǔ)依賴項(xiàng)作為獨(dú)立的 Gradle 文件,在subprojects中讓所有模塊都應(yīng)用這些依賴項(xiàng);整理libs目錄中本地的aar文件,移動(dòng)至一個(gè)目錄,統(tǒng)一依賴本地aar;建立app_bundle.json文件記錄所有模塊項(xiàng)目的信息及類型,便于模塊項(xiàng)目是源碼還是aar的切換控制;開發(fā)一套模擬參數(shù)機(jī)制,支持合并環(huán)境輸入?yún)?shù)和local.properties參數(shù) 以便于 Gradle 功能的控制;如開啟某個(gè)transform,指定哪些模塊為aar等功能;重構(gòu) flavor 變體功能,動(dòng)態(tài)控制 flavor 的創(chuàng)建。

3)發(fā)布和依賴aar版本的控制

當(dāng)我們發(fā)布aar至遠(yuǎn)程倉(cāng)庫(kù)后,需要一個(gè)文件記錄已發(fā)布模塊aar的版本號(hào),打包時(shí)通過此文件查找對(duì)應(yīng)版本的aar,此處使用的是 MCD 平臺(tái)采用 json 格式的 versionPath 文件。示意圖如下:

圖5:通過versionPath文件控制版本

模塊aar的核心在于對(duì)依賴項(xiàng)的控制。我們想要的是一個(gè)app殼+部分源碼模塊+部分aar模塊+其他依賴的結(jié)構(gòu),因此下面幾點(diǎn)是要考慮到的:

在所有子模塊發(fā)布 maven 成功后,本地編譯使用aar模塊且環(huán)境參數(shù)沒有傳遞 versionPath 參數(shù)時(shí),構(gòu)建腳本會(huì)自動(dòng)拉取Mcd最新的versionPath.json鏈接作為默認(rèn)的模塊aar信息表。開發(fā)階段需切換源碼/aar,可對(duì)項(xiàng)目中所有模塊進(jìn)行分類,分別為:入口模塊,源碼模塊,aar發(fā)布模塊,可移除模塊。另外,合并 gradle 環(huán)境參數(shù)和local.properties參數(shù)共同作為控制參數(shù),然后修改app_bundle.json指定模塊類型以達(dá)到靈活切換的目的。例如,定義一個(gè)sourceProject參數(shù)指定哪些模塊作為源碼構(gòu)建。為模塊之間的依賴關(guān)系建立一個(gè)json文件aar_config.json,便于查看和修改模塊間依賴關(guān)系。

整個(gè)模塊aar打包流程圖如下:

圖6:模塊aar下的打包流程

4)抽取app多余代碼,使其成為真正的"殼"

App入口項(xiàng)目中存在的代碼會(huì)影響編譯效率,為盡可能降低編譯時(shí)間,將app中大部分 main 目錄代碼移動(dòng)至子模塊中,保證app模塊只剩一個(gè)空殼而已。

5)自定義依賴項(xiàng)的替換規(guī)則

通過app_bundle.json得知目標(biāo)模塊是aar格式后,我們可使用 Gradle 提供的自定義依賴替換規(guī)則來(lái)實(shí)現(xiàn)aar的切換功能。

依賴替換規(guī)則允許項(xiàng)目和模塊依賴項(xiàng)透明地替換為指定的替換項(xiàng),項(xiàng)目和模塊依賴可互換地替換。對(duì)應(yīng)于源碼中ResolutionStrategyApi中的DependencySubstitutions接口,此功能常用于多項(xiàng)目構(gòu)建中靈活的組裝子項(xiàng)目。通過允許從存儲(chǔ)庫(kù)下載而不是構(gòu)建項(xiàng)目依賴項(xiàng)的子集,這對(duì)于加快大型多項(xiàng)目構(gòu)建的開發(fā)非常有用。

自定義依賴項(xiàng)替換規(guī)則如下:

//此處采用偽代碼形式,正式場(chǎng)景最佳實(shí)踐應(yīng)抽取到plugin中并提供extension和log功能//通過app_bundles.json信息決定是否應(yīng)用替換規(guī)則gradle.ext.appBundles.each { bundleName, bundleInfo ->    if (bundleInfo.buildType == "aar") {        gradle.ext.subsitituteMap[":$bundleName"] = "$specialGroupID:$bundleName:${bundleInfo.versionName}"    }  }//制定自定義解析規(guī)則,用模塊替換項(xiàng)目依賴項(xiàng)configurations.all { conf ->    resolutionStrategy.dependencySubstitution {        gradle.ext.subsitituteMap.each {            substitute project(it.key) with module(it.value)        }    }}

6)自定義pom文件管理傳遞依賴

此處通過maven-publish插件發(fā)布模塊aar,發(fā)布aar時(shí)不可混淆以防止依賴報(bào)錯(cuò)。

通過聲明pom文件來(lái)管理依賴及傳遞依賴是個(gè)很好的方式。發(fā)布模塊aar時(shí),本身項(xiàng)目的子模塊aar不建議寫入pom文件,否則在模塊切換源碼時(shí)會(huì)存在遠(yuǎn)程aar和源碼沖突的情況,此時(shí)需要添加額外的exclude操作。

自定義pom文件如下:

//使用maven-publish插件發(fā)布aarapply plugin: "maven-publish"...publishing{...//自定義pom文件處理傳遞依賴  pom {      packaging = "aar"      withXml {          pomGenerate(it)      }  }}//獲取配置的依賴 configuration => dependenciesMapdef ascribeDependencies(String confName) {    def dependencySet = project.configurations.getByName(confName).getAllDependencies()    def dependenciesMap = [:]    //獲取module類型依賴,待寫入pom文件    dependencySet.withType(ExternalModuleDependency)        .findAll {            if (it.group != null && it.name != null && it.version != null) {                return it            }            return null        }        .each {            ...            dependenciesMap.put("${it.group}:${it.name}", it)        }    return dependenciesMap}//拼接pom文件def pomGenerate(XmlProvider xp) {    def dependenciesMap = [:]    dependenciesMap.putAll(ascribeDependencies("implementation"))    dependenciesMap.putAll(ascribeDependencies("api"))    ...        // 添加節(jié)點(diǎn)的閉包        def addDependencyNode = { rootNode, entry ->...            Dependency target = entry.value            //寫入基本依賴信息            def node = rootNode.appendNode("dependency")            node.appendNode("groupId", target.group)            node.appendNode("artifactId", target.name)            node.appendNode("version", target.version)            node.appendNode("scope", "compile")            //如果有,寫入classifier            def artifacts = target.getArtifacts()            if (!artifacts.isEmpty()) {                DependencyArtifact artifact = artifacts.first()                artifact.type && node.appendNode("type", artifact.type)                artifact.classifier && node.appendNode("classifier", artifact.classifier)            }            //如果有,寫入exclude規(guī)則            Set excludes = target.getExcludeRules()            if (!excludes.isEmpty()) {                def exclusions = node.appendNode("exclusions")                excludes.each { rule ->                    def exclusion = exclusions.appendNode("exclusion")                    rule.group && exclusion.appendNode("groupId", rule.group)                    rule.module && exclusion.appendNode("artifactId", rule.module)                }            }        }        //添加dependencies節(jié)點(diǎn)        def dependenciesNode = xp.asNode().appendNode("dependencies")        dependenciesMap.each {            addDependencyNode(dependenciesNode, it)        }}

7)其他核心Gradle腳本代碼一覽

setting入口處合并參數(shù)
//加載local.properties屬性gradle.ext.localProperties = gradle.ext.loadProperties("$rootDir/local.properties")//因?yàn)間radle版本兼容問題,startParameter.projectProperties不能注入直接注入,//類型為com.google.common.collect.ImmutableMap,需要統(tǒng)一。def inputProjectProperties = new HashMap()if (startParameter.projectProperties != null) {    for (key in startParameter.projectProperties.keySet()) {        def value = startParameter.projectProperties.get(key)        if (value != null) {            println "注入ProjectProperty >> $key :${utf(value)}"            inputProjectProperties.put(key, value)        }    }}//local property 參數(shù)注入,優(yōu)先級(jí)高于環(huán)境參數(shù)if (gradle.ext.localProperties) {    gradle.ext.localProperties.each { k, v ->        println "注入LocalProperty >> $k :${utf(v)}"        inputProjectProperties.put(k, utf(v))    }}
入口處更新全模塊信息app_bundle.json指定模塊打包類型
//解析初始模塊信息app_bundles.jsongradle.ext.appBundles = gradle.ext.getConfigJson("$rootDir/app_bundles.json")//利用輸入?yún)?shù)更新模塊信息gradle.ext.appBundles.each { bundleName, bundleInfo ->      ...        // App混合編譯打包        if (gradle.ext.sourceProjects.contains(bundleName)) {            //強(qiáng)制指定源碼編譯的模塊            bundleInfo.buildType = "lib"            bundleInfo.include = true        } else if ((!bundleInfo.required) && gradle.ext.excludeProjects.contains(bundleName)) {            //指定可移除模塊            bundleInfo.buildType = "lib"            bundleInfo.include = false        } else if (gradle.ext.versionPathConfig) {            // AAR 混合編譯,versionPath決定aar信息            def that = gradle.ext.versionPathConfig.find { item -> bundleName == item.bundleCode }            if (that) {                // AAR編譯的模塊                bundleInfo.buildType = "aar"                bundleInfo.include = true                bundleInfo.versionName = that.version            } else {                // 其他模塊                bundleInfo.buildType = "lib"                bundleInfo.include = false                if (bundleInfo.required) {                    println("Build bundle missing,bundleName:" + bundleName)                }            }        } else {            // 純?cè)创a編譯            bundleInfo.buildType = "lib"            bundleInfo.include = true        }}
在各個(gè)模塊的ext擴(kuò)展中定義統(tǒng)一的模塊依賴方法,方便修改
//ext擴(kuò)展(接口為ExtraPropertiesExtension.java)中定義統(tǒng)一方法def compileBundle(Project project, String depName = null) {    def projectName = depName ?: project.name    def dependenciesHandler = project.configurations.implementation    if (projectName != project.name) {        //指定單個(gè)模塊依賴        def findProject = project.rootProject.findProject(projectName)        if (findProject != null) {            dependenciesHandler.dependencies.add(                    project.dependencies.create(project.rootProject.project(projectName))            )            println("compileBundle direct >> ${project.name} $projectName")        } else {            println("compileBundle direct skip >> ${project.name} $projectName")        }    } else {        //傳遞模塊依賴,moduleTransitives即為解析的aar_config.json對(duì)象        if (gradle.ext.moduleTransitives != null) {            def depList = gradle.ext.moduleTransitives[projectName]            depList?.each {                def findProject = project.rootProject.findProject(it.depName)                if (it.depName != null && findProject != null) {                    dependenciesHandler.dependencies.add(                            project.dependencies.create(project.rootProject.project(it.depName))                    )                    println("compileBundle relationship >> ${projectName} ${it.depName}")                } else {                    println("compileBundle relationship skip >> ${projectName} ${it.depName}")                }            }        }    }}//模塊gradle使用處dependencies {    ...    compileBundle(project)}
3.3 改造中遇到的問題

1)同名資源沖突

模塊AAR改造的過程中,進(jìn)行了模塊依賴關(guān)系的調(diào)整,導(dǎo)致同名資源的覆蓋關(guān)系發(fā)生了改變。如果多個(gè) AAR 庫(kù)之間發(fā)生沖突,系統(tǒng)會(huì)使用依賴項(xiàng)列表中首先列出的庫(kù)(靠近dependencies塊頂部)中的資源。同名資源沖突會(huì)導(dǎo)致兩種結(jié)果:

File資源的沖突導(dǎo)致在運(yùn)行時(shí)會(huì)因?yàn)橥Y源中 id 找不到而 crash。Value資源的沖突導(dǎo)致 UI 不符合預(yù)期。

要解決這個(gè)問題,首先需要了解 Android 的資源打包流程,如圖所示:

圖7:android資源打包流程

Android 資源打包工具 aapt 在編譯和打包資源的過程中,會(huì)對(duì)非 assets 資源做如下處理:

賦予每一個(gè)非 assets 資源一個(gè)ID值,這些ID值以常量的形式定義在一個(gè) R.java 文件中生成一個(gè) resources.arsc 文件,用來(lái)描述那些具有ID值的資源的配置信息,它的內(nèi)容就相當(dāng)于是一個(gè)資源索引表

資源索引表對(duì)同名的資源只會(huì)生成一個(gè)id,因此項(xiàng)目中如果有同名的資源,構(gòu)建工具會(huì)根據(jù)以下優(yōu)先級(jí)順序(左側(cè)的優(yōu)先級(jí)最高)選擇要保留的版本:

圖8:同名資源合并優(yōu)先級(jí)

為了避免常用的資源 ID 發(fā)生資源沖突,主要方案有兩種:

使用對(duì)模塊具有唯一性(或在所有項(xiàng)目模塊之間具有唯一性)的前綴命名其他一致的命名方案

但是實(shí)際操作下來(lái),發(fā)現(xiàn)還是存在幾個(gè)問題:

一是如何找出沖突的資源進(jìn)行重命名處理二是對(duì)什么樣的同名資源處理三方庫(kù)和三方庫(kù)中的資源沖突該怎么辦

為了解決這些問題,我們使用了CheckResourceConflict開源插件,原理是對(duì)工程做一個(gè)掃描,使用BaseVariantImpl.allRawAndroidResources.files接口可以在編譯期間獲取到所有的資源文件,然后檢測(cè)同名資源并分類輸出到一個(gè)可視化的html文件中,如圖:

圖9:同名資源沖突的分析

現(xiàn)在,我們可以看到哪些資源有重復(fù)以及重復(fù)資源所在的位置,可以用唯一性命名來(lái)解決同名資源沖突的問題了。

針對(duì)第二個(gè)問題,如果是布局 ID 相差較大的File資源和會(huì)影響UI展示的 value 資源可通過唯一性命名來(lái)解決沖突;對(duì)于雖然同名但內(nèi)容相同的資源可記錄不做處理。

第三個(gè)問題較為復(fù)雜,如果同名資源相差較大,可以考慮源碼的方式引入,或者直接在變體中覆蓋。

2)aar發(fā)布相關(guān)

將模塊源碼發(fā)布成遠(yuǎn)程aar需要注意不能混淆aar的代碼,否則開發(fā)階段依賴aar時(shí)不能識(shí)別其中的代碼,混淆階段放在app打包階段即可。

3)依賴替換中依賴標(biāo)記不可添加classifier ,否則會(huì)拋出UnsupportedNotationException

dependencySubstitution聲明的module依賴標(biāo)記只能有g(shù)roupId,artifactId,version這三者,如果多于或者少于3,會(huì)直接拋出不支持的標(biāo)記異常,拋出異常的標(biāo)記轉(zhuǎn)換類為ModuleSelectorStringNotationConverter

//ModuleSelectorStringNotationConverter.java@Overrideprotected ComponentSelector parseType(String notation) {    ...    String[] split = notation.split(":");    if (split.length < 2 || split.length > 3) {        throw new UnsupportedNotationException(notation);    }    ...    return DefaultModuleComponentSelector.newSelector(moduleIdentifierFactory.module(group, name), DefaultImmutableVersionConstraint.of(version));}

4)在應(yīng)用依賴替換規(guī)則后遇到的 java.lang.StackOverflowError

此處用到的依賴替換規(guī)則為用模塊標(biāo)記替換項(xiàng)目依賴。官網(wǎng)介紹在大型的多項(xiàng)目構(gòu)建中,這個(gè)規(guī)則允許項(xiàng)目依賴的子集是從倉(cāng)庫(kù)中下載而不是構(gòu)建項(xiàng)目,對(duì)加速開發(fā)效率是很有用的;被替換的project必須在setting文件中被include,且為了去解析依賴配置,構(gòu)建被替換依賴項(xiàng)的任務(wù)將不會(huì)執(zhí)行。

意思是被替換的project中的任務(wù)將不會(huì)執(zhí)行,然而實(shí)際操作中,被替換Project的 dependencies 閉包中 api 動(dòng)態(tài)方法會(huì)導(dǎo)致StackOverflowError異常,如果用implementation會(huì)導(dǎo)致Could not find method xxx on object DefaultDependencyHandler編譯異常。

為了查找原因和對(duì)Gradle有個(gè)形象的認(rèn)知,當(dāng)我們分析了 Gradle 依賴過程會(huì)發(fā)現(xiàn):

Gradle 存在一個(gè)ServiceRegistry的注冊(cè)中心, 且 封裝了一系列類似于JavaSpi機(jī)制的Services類,其中一個(gè)DependencyServices類提供了DependencyFactory依賴工廠的構(gòu)建方法;默認(rèn)的DependencyFactory工廠實(shí)現(xiàn)類,包含通過靜態(tài)工廠方法創(chuàng)建的DependencyNotationParser對(duì)象,其中組裝了我們常用的StringNotation和ProjectNotation,返回一個(gè)組合的標(biāo)記解析類NotationParser;

- 我們常用的group:artifact:version即為StringNotation;而project(":xxx")即為ProjectNotation;

當(dāng)我們通過 api或implement 聲明依賴時(shí),實(shí)際上是通過Project中的DependencyHandler對(duì)象來(lái)進(jìn)行處理的,這個(gè)對(duì)象就是ServiceRegistry提供的,這就和 DependencyServices 等功能類建立了聯(lián)系;DependencyHandler 類中并沒有 implement和api 方法,因?yàn)镚roovy是一個(gè)動(dòng)態(tài)語(yǔ)言,允許運(yùn)行時(shí)去catch未定義方法的調(diào)用。我們只需知道如果遇到這種找不到的方法會(huì)交給此類中的DynamicAddDependencyMethods對(duì)象去處理,最終會(huì)使用 DependencyNotationParser 中構(gòu)建的標(biāo)記解析類去解析。

至此,上述報(bào)錯(cuò)的原因很有可能是因?yàn)橐蕾囂鎿Q之后,改變了原本的DependencyHandler和NotationParser的聯(lián)系,導(dǎo)致原本正確的動(dòng)態(tài)方法在替換后的功能類中找不到對(duì)應(yīng)的方法或重復(fù)動(dòng)態(tài)方法調(diào)用棧出錯(cuò)。因此需要對(duì)模塊 Gradle 邏輯做一個(gè)跳過處理,不進(jìn)入project的腳本邏輯。類似于:

//提供方法跳過替換后的模塊gradle邏輯def isSubstitute() {    return gradle.ext.subsitituteMap.containsKey(":${project.name}".toString())}

5)aar 自動(dòng)化構(gòu)建方案的選擇

就構(gòu)建這塊來(lái)說(shuō),aar編譯方式相比于之前,需要構(gòu)建的模塊大大增加,以前不管代碼改動(dòng)多少,只需要構(gòu)建工程模塊即可;現(xiàn)在如果改動(dòng)了模塊的代碼,需要先構(gòu)建所有有變動(dòng)的模塊,在這些模塊構(gòu)建完成之后才能構(gòu)建主包。如果這個(gè)過程全部由人手動(dòng)來(lái)控制和觸發(fā),其繁瑣程度不言而喻。

于是我們使用了webhook來(lái)實(shí)現(xiàn)自動(dòng)化構(gòu)建,在代碼 commit 的時(shí)候觸發(fā)相應(yīng)的 webhook,來(lái)通知打包服務(wù)器執(zhí)行自動(dòng)構(gòu)建的流程,打包服務(wù)器在接受到請(qǐng)求以后,先分析出發(fā)生改動(dòng)的模塊是哪些,然后構(gòu)建變動(dòng)模塊的依賴樹,從依賴樹的底層開始從下而上觸發(fā)模塊構(gòu)建,最后打包完成后通知相關(guān)人員。這樣一來(lái),開發(fā)只需提交下代碼,剩下的就交給機(jī)器去做了。

圖10:自動(dòng)化構(gòu)建示意圖

但也因此出現(xiàn)了aar自動(dòng)化的兩種方案:

提交并同時(shí)構(gòu)建所有的aar;此種方案優(yōu)點(diǎn)是發(fā)布aar迅速,但因aar依賴順序問題會(huì)出現(xiàn)打包失敗,此時(shí)只能再打一次包解決此問題;提交并按依賴順序構(gòu)建aar;此種方案能解決打包失敗的問題,但總的aar發(fā)布時(shí)間緩慢,導(dǎo)致整個(gè)打包流程的時(shí)間劇增,特定情況下會(huì)大幅超過源碼構(gòu)建時(shí)間。此種情況可對(duì)模塊進(jìn)行細(xì)粒度的拆分,減少開發(fā)業(yè)務(wù)時(shí)頻繁的進(jìn)行aar模塊的傳遞性打包。

一般來(lái)說(shuō),對(duì)于不經(jīng)常變動(dòng)的模塊使用方案一,對(duì)于業(yè)務(wù)改動(dòng)頻繁的模塊使用方案二。

6)構(gòu)建過程的特征化標(biāo)記或資源應(yīng)放在App殼中

一般 CI/CD 系統(tǒng)中對(duì)構(gòu)建的安裝包都有特征標(biāo)記和資源注入,這些過程都應(yīng)該放在app殼的Gradle腳本中,否則會(huì)出現(xiàn)資源不及時(shí)更新的問題。舉個(gè)例子:

問題描述:測(cè)試的時(shí)候發(fā)現(xiàn),aar模式打的包拉不到新發(fā)布的rn。對(duì)打出來(lái)包進(jìn)行分析后發(fā)現(xiàn),包內(nèi)的rn是工程里的原始rn,版本很老,服務(wù)那邊無(wú)法識(shí)別這么老的版本,導(dǎo)致rn增量下發(fā)失敗。

原因:gradle腳本下載rn資源的目錄為模塊aar的assets目錄,因此在aar模式下,總包rn的版本取決于模塊aar中的rn版本,而發(fā)布模塊aar打包腳本未更新rn,導(dǎo)致使用的rn為舊版。示意圖如下。

解決方案:修改下載rn資源的目錄為app殼的assets目錄,避免aar發(fā)布階段處理需要即時(shí)更新的邏輯。類似的問題還有AndroidMainifest清單文件中使用gradle參數(shù),需要即時(shí)更新的資源或者參數(shù)需要放于app殼中執(zhí)行,保證其實(shí)時(shí)性。

圖11:動(dòng)態(tài)資源未更新示意圖

3.4 其他優(yōu)化

1)IDE插件的開發(fā)

為了方便開發(fā)同學(xué)本地開發(fā)時(shí)能夠靈活的進(jìn)行 aar/源碼 的切換,我們引入了一個(gè)有圖形化界面的AS插件?;驹硎歉鶕?jù)項(xiàng)目中的 json配置文件可視化的展示項(xiàng)目中的所有模塊,提供拖拽的功能方便模塊類型的變換,保存時(shí)改變本地的local.properties文件,達(dá)到控制參數(shù)的目的。

另外,也可定制參數(shù)化打包,因?yàn)闇y(cè)試階段需要頻繁出包,這時(shí)如果要等aar包發(fā)布在打總包整個(gè)流程會(huì)變長(zhǎng),所以傳入sourceProject參數(shù)指定源碼模塊的參數(shù)化打包在測(cè)試階段尤為重要。

圖12:AS插件靈活切換AAR/源碼

3.5 結(jié)果一覽

經(jīng)過如上所述的改造后,對(duì)基于模塊aar方案的編譯時(shí)間進(jìn)行統(tǒng)計(jì)。統(tǒng)計(jì)基于本地機(jī)器的干凈編譯時(shí)間,可得到比較精確的打包時(shí)間。

1)本地機(jī)器干凈編譯時(shí)間統(tǒng)計(jì)

操作步驟:

開始第一次編譯

– as 進(jìn)行一次 invalidate cache 清除緩存 + 進(jìn)行一次 clean project

– 執(zhí)行干凈編譯保證所有task都會(huì)執(zhí)行g(shù)radlew--profile--offline--rerun-tasks assembleXXFlavorRelease

開始第二次編譯

– as 進(jìn)行一次 clean project

– 執(zhí)行干凈編譯保證所有task都會(huì)執(zhí)行g(shù)radlew--profile--offline--rerun-tasks assembleXXFlavorRelease

測(cè)試結(jié)果對(duì)照表:

表1:干凈編譯耗時(shí)統(tǒng)計(jì)表

表2:干凈編譯耗時(shí)對(duì)比

結(jié)果如上圖表所示,可直觀的得出結(jié)論:

本地電腦測(cè)試去除干擾項(xiàng)后,第一次構(gòu)建源碼平均耗時(shí)為 8m47s,aar平均耗時(shí)為 4m24s, 總包時(shí)間縮減率為 50%;第二次構(gòu)建源碼平均耗時(shí)為 5m50s,aar平均耗時(shí)為 3m15s,總包時(shí)間縮減率為 44%。

綜上,對(duì)基于模塊AAR的編譯優(yōu)化方案可得出如下結(jié)論:

從總包構(gòu)建時(shí)間上來(lái)看,通過模塊AAR方案改造后 release 總包時(shí)間縮減率可達(dá)50%左右,時(shí)間縮減明顯。開發(fā)階段關(guān)閉transform等耗時(shí)操作且支持部分模塊以AAR引入,編譯時(shí)間會(huì)進(jìn)一步縮減,可有效提高開發(fā)效率。但從整個(gè)流程上來(lái)看,打包流程從傳統(tǒng)的源碼構(gòu)建分成了發(fā)布aar和構(gòu)建aar總包兩部分。其中發(fā)布aar的平均時(shí)間為2m左右,如果發(fā)布一個(gè)aar后再打總包,此時(shí)整個(gè)打包流程的時(shí)間縮減率在13%~27%之間,而自動(dòng)化的aar打包會(huì)有依賴問題,存在多個(gè)aar順序打包后再打總包的情況,故整個(gè)流程上的時(shí)間縮減并不明顯并大有可能會(huì)超過源碼編譯時(shí)間。四、總結(jié)與展望

本次主要對(duì)項(xiàng)目的工程結(jié)構(gòu)和 gradle 腳本進(jìn)行一定的優(yōu)化,通過 gradle 參數(shù)支持模塊 aar/源碼 的切換,可在一定程度上提高開發(fā)的效率,全aar下可節(jié)省出包時(shí)間,同時(shí)模塊化也是其他優(yōu)化方案的基礎(chǔ)。

通過對(duì)項(xiàng)目進(jìn)行模塊aar的改造后,編譯速度上收益明顯,尤其通過as插件可視化的切換更增加了開發(fā)的靈活度,開發(fā)階段不用長(zhǎng)時(shí)間的等待編譯完成。為了保持較快的編譯速度,后續(xù)還可以做到以下幾點(diǎn):

項(xiàng)目在保持良好的工程結(jié)構(gòu)的同時(shí),對(duì)業(yè)務(wù)模塊進(jìn)行適當(dāng)粒度的拆分,可以讓項(xiàng)目結(jié)構(gòu)更清晰,更加有利于項(xiàng)目的更新;可對(duì)高耗時(shí)的task,如 dexBuilder,單獨(dú)做優(yōu)化;添加工程構(gòu)建監(jiān)控機(jī)制,及時(shí)對(duì)編譯過程分析和處理;

關(guān)鍵詞:

相關(guān)新聞

Copyright 2015-2020   三好網(wǎng)  版權(quán)所有 聯(lián)系郵箱:435 22 640@qq.com  備案號(hào): 京ICP備2022022245號(hào)-21
黑吊操欧美极品美女| 中文字幕日本一二三区| 99久久国语露脸国产精品| 伊人久久综合国产精品| 国产福利小视频在线观看网站| 啊~插得好快别揉我胸了视频| 亚洲国产精品自产拍在线观看| 天天操天天舔天天射天天日天天干| 天天插天天透天天爽| 西野翔人妻中文字幕中字在| 亚洲欧美另类丝袜另类自拍| 新香蕉视频香蕉视频2| 欧美精品999不卡| 成人免费电影二区三区| 东北老女人熟女啪啪视频| 欧美日韩精品aaa| 天天干夜夜撸天天操| 搞乱在线在线观看视频| 日本一区二区三区调教性奴视频 | 五月婷婷激情视频网| 日本香港韩国三级黄色| 欧美久久蜜臀蜜桃资源吧| 核xp工厂精品久久亚洲| 日韩欧美国产一区二区在线观看| 天天爱天天日天天爽| 免费高清av一区二区| 日韩av熟妇在线观看| 久久99精品热在线观看| 男人的天堂aⅴ在线| 亚洲av三级电影在线观看| 中字幕人妻熟女人妻a62v网| 情趣视频在线观看91| 久久久久久高清一区| 92在线播放观看视频| 欧美日韩国产在线中文字幕| 一区二区三区午夜福利在线| 视频免费在线观看网站| 亚洲韩精品一区二区三区| 天天操天天舔天天射天天日天天干| 女女抠逼白虎白丝袜| 性色蜜桃臀x88av天美传媒| 国产毛片特级Av片| 三区美女视频在线观看| 在线能看视频你懂的| 亚洲一区二区在线激情| 日韩成人精品久久久免费看| 日本韩国福利在线播放| 色噜噜噜噜色噜噜色合久一| 69国产在线视频网站| 在线看的免费网站黄| 91麻豆精品国产在线| 51精品视频在线免费观看| 亚洲美女露隐私av一区二区精品| 大尺度久久久久久久| xxxx69在线观看视频| 都市激情校园春色 亚洲| 欧美区一区二区三视频| 婷婷一区二区三区五月丁| 最新国产精品拍在线观看| 日本有码精品一区二区三区| www国产亚洲精品久久久| 亚洲资源在线免费观看| 91久久久精品成人国产| 精品国产人伦一区二区三区| 中文字幕在线免费观看成人| 青青青在线视频免费播放| 亚洲av综合av一去二区三区| a级黄片免费观看| 国产三级自拍视频在线观看网站| 午夜久久久久欠久久久久| 成人精品动漫一区二区| 精产国品一二三产品区别91| 欧美成人区一区二区三| 伊人网在线观看 视频一区 | julia人妻av一区二区三区| 天天操天天舔天天做| 男女啪啪啪网站在线观看免费| 国产在线观看av一区| 开心五月综合激情婷婷| 中文字幕在线观看亚洲情色| alisontyler和黑人| 色视频免费观看网址| 国产 亚洲 欧美 自拍| 亚洲熟女人妻自拍在线视频| 免费成人av麻豆| 人人妻人人爽人人爽欧美一区 | 亚洲av中文免费在线| 成人做爰av在线观看网站| 日韩加勒比精品在线看| 久久综合狠狠综合久久综| 国产中文亚洲熟女日韩| 亚洲激情视频在线观看免费| 日韩人妻精品久久久久| 黄片视频免费观看视频| 欧美黄色性视频网站| 国产精品 亚洲欧美 自拍偷拍| 韩日一级人添人人澡人人妻精品| 每日更新日韩欧美在线| 日韩在线 中文字幕| 国产清纯一区二区在线观看 | 中文字幕观看中文字幕免费| 亚洲在线观看中文字幕av| 国产一级一国产一级毛片| 欧美成人久久久桃色aa| 97成人老师在线视频| 鸡巴插进美女的嫩小穴视频| 一级做性色a爱片久久片| 亚成区一区二区人妻熟女| avtt中文字幕手机版| 制服丝袜中文字幕熟女人妻| 自拍偷拍 国产激情| 亚洲黑人欧美二区三区| 日本男女免费福利视频| 国产原创一区二区三区在线播放| 麻豆午夜激情在线观看| 国产又粗又长又大视频| 欧美成人短视频在线播放| 亚洲全国精品女人久久久| 亚洲美女露隐私av一区二区精品 | 亚洲第一页欧美第一页| 欧美日韩精品aaa| 日本一区二区高清av中文| 一区二区三区午夜福利在线| 日本高清 中文字幕| 在线播放 日韩 av| 中文字幕中文字幕在线中…一区| 啪啪啪网站免费在线看| 婷婷一区二区三区五月丁| 韩国一级片最火爆中文字幕| 亚洲日本欧美韩国另类综合| 国产伦理二区三区在干嘛呢| 蜜桃臀少妇白色紧身裤细高跟| 黄色片黄色片黄色片黄色片黄色| 久久久久久久岛国免费观看| av资源中文字幕在线观看| 亚洲av毛片一区二区三区网| 玖玖资源站在线观看亚洲| 伊人网在线观看 视频一区| 日本四十路人妻熟女| 亚洲欧洲一区二区三区在线| 丰满放荡熟妇在线播放| 大香蕉在线欧美在线视频| 在线观看中文字幕精品av| 精品美女洗澡一区二区| 午夜精品久久秘?18免费观看| 日本东京热最新中文字幕| 日本欧美国产在线一区| 国产福利三级在线观看| 岳的大肥屁熟妇五十路| 日本国产亚洲欧美色综合| av在线观看视频免费| 汤姆提醒30秒中转进站口| 一区二区三区内射美女| 青青草成人免费自拍视频| 午夜福利国产精品久久久久| 中文人妻av一区二区三区| 韩日一级人添人人澡人人妻精品| 2018中文字字幕人妻| 人妻熟女 亚洲 一页二页 | 欧美视频免费观看777| av在线观看视频免费| 国产精品性感美女视频| 国产 少妇 一区二区| 国产资源在线观看二区| 丝袜美腿日韩av一区| 男人av一区二区三区| 一区二区三区四区视频精品免费| 性感美女人妻久久久| 国产极品气质外围av| 一区二区三区观看在线| 夫妻黄色一级性生活片| 最新日韩中文字幕免费在线观看| 天天插天天干天天狠| 七色福利视频在线观看| 老鸭窝在线毛片观看免费播放| 抽插小穴啊啊啊视频| 内地精品毛片在线观看| 一区二区三区高清视频3| 国产福利一区二区三区在线观看| 亚洲欧美一级特黄大片| 综合久久伊人久久88| 美女把逼扒开让男人桶| 午夜精品老牛av一区二区三区| 天天夜夜久久精品综合| 亚洲国产日韩欧美一区二区三区, 精久久久久久久久久久久 | 91精产国品一二三产区区别网站| 日本美女爱爱视频网站| 亚洲欧美一级特黄大片 | 国产激情在线观看一区二区三区| 欧美vr专区日韩vr专区| 国产视频成人一区二区| 91大神在线免费观看视频| 丰满少妇人妻一区二区三区蜜桃| 一区二区欧美 国产日韩| 中文在线字幕免费观看日韩视频 | 亚洲美女黄色福利视频网站大全| 男人的天堂av中文字幕| 久久久视频在线播放| 久久久久久久久久久久久国产| 99福利一区二区视频| 五月的婷婷综合视频| 69视频在线精品国自产拍| 亚洲午夜精品视频节目| 熟女俱乐部jukujoclub| 国产av嗯嗯啊啊av| 白白色在线免费视频发布视频| 男生用大肌巴操美女骚穴| 中文字幕在线免费观看人妻| 天天操天天舔天天射天天日天天干| 中文字幕日韩人妻在线三区| 福利在线国产小视频| 黑鸡巴肏少妇逼视频| 色狠狠色综合久久久绯色| 一区二区三区四区 在线播放| 又爽又粗又猛又色又黄视频| 欧美大鸡吧男操女啊啊啊视频| 99精品久久99久久久久一| 欧美色区国产日韩亚洲区| 天天夜夜久久精品综合| 免费中文三级在线观看| 亚洲av综合av一去二区三区| 亚洲男人的天堂最新网址| 久操资源在线免费播放| 高清av在线婷一区二区色日韩| 久久99热精品免费观看视| 欧洲亚洲一区二区三区四区| 精品人妻在线激情视频| 九九热精品视频在线播放| 久久视频 在线播放| 蜜臀一区二区日韩美女少妇视频| 内地精品毛片在线观看| 操死你美女在线视频| 欧美日韩综合精品无人区| 国产精品内射婷婷一级| 午夜夫妻性生活视频| 熟女一区二区视频在线| 福利在线国产小视频| 日韩成人免费观看电影| 大成色亚洲一二三区| 2018中文字字幕人妻| 熟女一区二区视频在线| 日本在线免费观看国产精品| 天天躁狠狠躁狠狠躁性色| 后入日韩翘臀蜜桃臀美女| 港台美女明星av天堂| 超级黄肉动漫在线观看| 精品美女洗澡一区二区| 亚洲va999天堂va| 成人资源中文在线观看| 久久免费视频ww一区| 91性高湖久久久久久久久久| 夜夜躁av麻豆男| 久久99国产中文丝袜| 久久久亚洲熟女一区二区| 五月天天堂视频在线| 大奶熟妇激情操逼逼| 精品人妻人人做人人爽| 荣立三等功退休有什么待遇| 国产精品蝌蚪自拍视频| 日韩女同与成人用品电影免费看| 日本福利视频网站导航| 老鸭窝在线毛片观看免费播放| 免费高清av一区二区| 在线能看视频你懂的| 男女真人做带声音视频图片| 亚洲综合首页综合在线观看| 极品风骚人妻3p视频| 青青草成人免费自拍视频| 国产欧美福利在线观看| 视频在线+欧美十亚洲曰本| 四虎国产精品国产精品国产精品| 青青青青午夜手机国产视频| 狠狠操av一区二区三区| 上床啪啪啪免费视频| 美女一区二区四区六区八区| 日本a级2020在线观看| 污网址在线观看视频| 欧美日韩一区二区三区成人影院| 高潮喷水一区二区三区| 男女69视频在线观看免费| 男女啪啪啪啪91av日韩| 青娱乐这里只有精品| 欧美黑人性猛交小矮人| 午夜五十路久久福利| 在线能看视频你懂的| 美女激情久久久久久久| 亚洲国产日韩欧美一区二区三区,| 放荡人妻极品少妇全集| 日本一区二区三区区别| 岛国av成人午夜高清| 最新中文字幕久久久久| 大香蕉在线欧美在线视频| 亚洲精品国品乱码久久久久| 亚洲国产精品自产拍在线观看| 欧美一级特黄大片做受99| 97成人老师在线视频| 99精品久久精品一区二区| 五十岁熟女高潮喷水| 中文字幕av人妻一区二区三区| 97cao在线视频| 69国产精品成人aaaaa片| aa福利影视在线观看| 日韩A级毛片免费视频| 美女妩媚午夜诱惑网站| 中文字幕免费啪啪啪| 伊人免费观看视频一| 啪啪啪网站免费看视频| 亚洲国产综合久久精品| av大尺度一区二区三区| 国产精品久久久久久成人久| 大乳人妻一区二区三区| 2020国产成人精品视频| 开心激情五月天作爱片| 日韩在线 中文字幕| 美女福利网站在线播放| 中文字幕日韩人妻在线三区| 羞羞漫画无限免费观看秋蝉| 久久久久久免费观看av| 最新中文字幕久久久久| 亚洲高清免费在线观看视频| av资源中文字幕在线观看| 东京热日本一区二区三区| av在线男人的天堂亚洲| 国产成人深夜福利短视频99| 高潮喷水一区二区三区| 美女张开腿给男人桶爽的软件| 女人的天堂 av在线| 久久久西西gogo日本美女人体| 玖玖资源站在线观看亚洲| —区二区三区女厕偷拍| 国产精品成人免费电影| 国产男女无套?免费网站下载 | 全球高清中文字幕av| 夜夜躁婷婷av蜜桃妖| 中国精品人妻一区二区| 成人午夜av电影网| 午夜福利国产精品久久久久 | 台湾18禁久久久久久久激情视频| 黄色av日韩在线观看| 天天色天天射天天日天天干| 神马午夜久久电影网| 亚洲av中文免费在线| 日韩人妻精品久久久久| 亚洲人人爽人人澡起碰av| 亚洲自拍偷拍av在线| 老司机在线视频福利观看| 日本人妻少妇xxxxxxx| 女女抠逼白虎白丝袜| 中文人妻av一区二区三区| 男女插鸡巴视频软件| 2020国产激情视频在线观看| 全球高清中文字幕av| 欧美性受黑人猛交裸体视频| 亚洲第一成年偷拍视频| 每日更新日韩欧美在线| av在线观看视频免费| 青青青在线观看国产| 2019年中文字幕在线播放视频| 午夜福利片无码10000| 男生和女生羞羞91在线看| 日本少妇熟女乱码一区二区| 天天操天天日天天插天天舔| 午夜久久久久久av五月| 黄色片免费国产精品| 亚洲成人自拍av在线| 国产一区两区三区福利小视频| 欧美猛少妇色ⅹⅹⅹⅹⅹ猛叫| 国产欧美福利在线观看| 欧美日韩国产在线中文字幕| 欧美日韩综合精品无人区| 91亚洲精品久久蜜桃| 天天插天天操天天射天天干| 韩国一级片最火爆中文字幕| 日本黄页在线观看视频| 天天操,天天射,天天爽| 三区美女视频在线观看| 伊人综合在线视频免费观看| av一区二区三区蜜桃| 久久精品四虎夜夜拍拍拍| 成人av中文字幕在线看| 中文字幕麻绳捆绑的人妻| 97精品国产91久久久| 日本欧美亚洲国产啊啊啊| 1级黄色片在线观看| 夜夜操天天干夜夜操| 亚洲成人欧洲成人在线| 色视频免费观看网址| 亚av一二三在线观看| 在线观看黄页网站视频网站| 人妻免费视频黄片在线视频| 亚洲日本欧美韩国另类综合| 91色乱一区二区三区| 日本东京热最新中文字幕| 视频自拍偷拍视频自拍 | 中文字幕观看中文字幕免费| 久久一级片三上悠亚| 男人的天堂av中文字幕| 夜色17s精品人妻熟女av| 日本熟妇乱妇熟色视频| 一区二区三区不卡免费视频网站 | 中文字幕中文字幕在线中…一区| 午夜3p福利视频合集| 精品av天堂毛片久久久| 最近最新最好看的中文字幕 | 国产高清视频www夜色资源| 久久久精品人妻无码专区不卡| 中文字幕av特黄毛片| 91超碰九色porny| 亚洲黑人欧美二区三区| 4日日夜夜精品视频免费| 九九热在线精品播放| 青青操久久综合激情| 人人妻人人爽人人摸| 1级黄色片在线观看| 日韩黄色在线观看网站上| 91亚洲精品久久蜜桃| 精品一区二区三区喷水内射高潮| 91亚洲精品久久蜜桃| 福利美女视频在线观看| 女人高潮潮呻吟喷水网站| 后入日韩翘臀蜜桃臀美女| 久久人人爽人人爽人人av东京热| 日韩一级欧美一级片| 三区美女视频在线观看| 亚洲理论在线a中文字幕97 | 亚洲一区亚洲二区成人福利| 北野中文字幕一区二区| 在线观看中文字幕精品av| 成人黄色录像在线观看| 伊人网国产在线播放| 西野翔人妻中文字幕中字在| 18岁禁一二三区免费体验| 国产不卡免费在线观看| 午夜福利午夜福利影院| 中文字幕av人妻一区二区三区| 港台美女明星av天堂| 午夜呻吟亚洲精品中文字幕在上面| 最近日韩免费在线观看| av一区二区三区四区五区在线| 大成色亚洲一二三区| 日日夜夜免费视频精品| 黄色av 在线观看| 激情久久在线免费观看视频| 在线观看黄页网站视频网站| 天堂网免费在线电影| 黄色片免费国产精品| 人妻系列中文字幕大乳丰满人妻| 东京热日韩av在线| 中文字幕福利视频第四页| 久草视频在线看免费| 有码一区二区三区四区五区| 亚洲天堂色综合久久| 60路70路日本熟妇| 亚洲国产日韩a在线欧美| 精品人妻人人做人人爽| 亚洲a级视频在线播放| 午夜一区二区三区视频在线观看| 中文字幕福利视频在线一区| 网站在线观看蜜臀91| 成人免费电影二区三区| 手机视频在线观看一区| 青青青青青爽视频在线| 午夜一区二区三区视频在线观看| 果冻麻豆一区二区三区| 国产激情一区二区视频| 黄片操操操操操操c| 亚洲综合色一区二区三区| tobu8日本高清| 男人资源站中文字幕| 人妻激情偷乱一区二区三区av| 天天夜夜久久精品综合| 成人午夜av电影网| 国产毛片特级Av片| 一区二区三区午夜福利在线| 手机看片福利一区二区三区四区| 啊不行啊操逼好爽大鸡吧视频| 亚洲黄色成人一级片| 久久久久高潮白浆久久| 亚洲成人欧洲成人在线| 亚洲欧美国产人成在线| 中文字幕一区二区人妻视频| 亚洲成a人77777| 91超碰九色porny| 中文字幕 中文字幕 亚洲| 午夜8050免费小说| 东北老女人熟女啪啪视频| 久久久久夜色国产精品电影| 精产国品一二三产品区别97| avgo成人短视频| jiee日本美女视频网站| 91青青青国产免费高清| 国产男人的天堂一区| 97视频人人爱麻豆| 欧美性受黑人猛交裸体视频| 国产一区二区手机在线观看| 国产精品igao为爱寻找激情| 亚洲欧美精品海量播放| 午夜国产精品免费视频| 欧美亚洲愉拍一区二区三区| 插鸡视频免费网站在线播放| 国产精品蝌蚪自拍视频| 91香蕉国产亚洲一二三区| 91美女在线观看视频| 日本人妻熟妇丰满成熟HD系列| 天天看天天爱天天日| 国产成人在线观看视频播放| 中国特黄色性生活片| 免费的啪啪视频软件| 大乳人妻一区二区三区| 在线免费观看a视频免费| 97精品久久久久久无码人妻 | 看女人大BB群伦交| 极品少妇高潮喷水日出白浆| 92麻豆一区二区三区| 日韩成人免费观看电影| 偷拍欧美日韩另类图片| avgo成人短视频| jizzjizz国产精品传媒| 91精品一区一区三区| 国产大桥未久一区二区| 亚洲第一区av中文字幕| 亚洲成年人精品国产| xxnxx国产美女| 污视频在线观看地址| 亚洲欧美综合另类最新| av一区二区三区蜜桃| 一区二区三区五区六区| 欧美大鸡吧男操女啊啊啊视频| 亚洲色图日韩在线视频观看| 92午夜免费福利视频www| 抽插小穴啊啊啊视频| 亚洲中文字幕在线av| 91精品国产人妻麻豆| 天天色天天射天天日天天干| 日韩欧美国产一区二区在线观看| 黄版视频在线免费观看| 久久热在线免费观看| 91色乱一区二区三区| 中文在线字幕免费观看日韩视频| 久久久精品人妻无码专区不卡| 九热精品视频在线观看| 999国产精品视频免费看| 欧美成人一二三在线网| 麻豆午夜激情在线观看| 欧洲精品在线免费观看| 五月婷婷激情视频网| 亚洲高清一区二区三区久久| 核xp工厂精品久久亚洲| 手机看电影一区二区三区| 国产天堂av不卡网| 天天天天天天天天日日日| 国产青青青青草免费在线视频| 亚洲美女露隐私av一区二区精品| 久久久精品人妻无码专区不卡| 成人av在线视频免费| 国产人妻熟女ⅹxx丝袜| 免费在线观看黄色小网站| 91香蕉国产亚洲一二三区 | 一区二区在线观看视频网站| 97精品人妻免费视频| 国产熟女五十路一区二区三区 | 2020国产激情视频在线观看| 极品内射老女人操逼视频| 在线中文字幕人妻av| 开心五月综合激情婷婷| 青青青在线视频免费播放| 日韩三级精品电影久久久久| 色欲AV亚洲AV无码精品| 天天操天天舔天天爽| 成人做爰av在线观看网站| 日本韩国福利在线播放| 360偷拍蜜桃臀69式| 久久99国产中文丝袜| 午夜国产成人精品视频观看| 2020国产激情视频在线观看| 亚洲欧美精品海量播放| 91偷拍被偷拍在线播放| 亚洲av 综合av| av 一区二区三区 熟女| 国产 亚洲 欧美 自拍| 一区二区三区五区六区| lutu玩弄人妻短视频| 欧美在线视频不卡一区| 2021国产在线视频| 骚穴被阴茎插免费视频| 99久9在线视频播放| 亚洲国产精品 久久久| 亚洲国产精品 久久久| 免费24小时人妻视频| av中文字幕国产精品| 人妻在线中文视频视频| 激情久久在线免费观看视频| 色视频免费观看网址| 超碰在线观看97资源| 国语精品视频自产自拍| 九色91操最新在线观看网址| 亚洲精品1卡2卡3卡| 国产激情免费在线视频| 国产精品乱码高清在线观看h| 欧美人与动欧交视频| 国产美女高潮精品视频| 精品国产久久久久午夜精品av| 漂亮人妻口爆久久精品| 午夜3p福利视频合集| 自拍偷拍亚洲综合第一页| 亚洲av毛片一区二区三区网| 亚洲国产美女主播在线观看| jandara在线观看| 一区二区九日韩美女| 亚洲国产日韩精品在线| 亚洲黄色免费在线观看网站| 日韩欧美中文字幕老司机三分钟| 自拍偷拍色图亚洲天堂| 人人人妻人人人妻精品少妇| 午夜精品一区二区三区不卡顿| 色丁香久久激情综合网| 日韩欧美一区二区三区免费看 | jizzjizz国产精品传媒| 亚洲第一中文字幕成人| 国产青青青青草免费在线视频| 性感美女极品18禁网站在线| 国产av在线免费视频| 日本欧美亚洲国产啊啊啊| 亚洲一区亚洲二区成人福利| av男人站在线观看| 美女激情久久久久久久| 欧美日韩精品aaa| 亚洲全国精品女人久久久| 日韩人妻中文字幕区| 大片a免费观看在线视频观看| 国产免费久久精品99re丫丫| 久久久久性感美女偷拍视频| 五月的婷婷综合视频| 91色乱一区二区三区| 超碰在线免费观看视频97| 国产视频成人一区二区| 日本久久久久久黄色| 欧美啪啪一区二区三区| 欧美精品999不卡| 天天操天天舔天天射天天日天天干| 大片a免费观看在线视频观看| 2020精品视频在线| 神马午夜久久电影网| 亚欧洲乱码视频一二三区| 国产激情视频在线观看的| 老司机伊人99久久精品| 九一精品人妻一区二区三区| 福利视频导航在线观看| 国产漂亮白嫩美女在线图片 | 中文字幕福利视频在线一区| 久久无码高清免费视频| 国产激情在线观看一区二区三区| 精品一区二区三区免费毛片W| 韩国一级片最火爆中文字幕| 欧美成人短视频在线播放| 人人妻人人狠人人爽| 快色视频在线观看免费| 国产在线小视频一区二区| av成人三级高清日韩| 亚洲欧美一级特黄大片 | 午夜久久人妻一级内射av网址| 亚洲妹妹我爱你在线观看| 青青免费观看视频| 亚洲黑人欧美二区三区| 91国产精品乱码久久久久久| 日韩美精品成人一区二区三区四区| 人妻熟女 亚洲 一页二页| 在线观看免费啪啪啪| 欧美日本在线免费视频| 中文字幕观看中文字幕免费| 夜夜操夜夜爱夜夜摸| 1区3区4区产品乱入视频| 亚洲成人自拍图片网站| 日日躁夜夜躁狠狠操| 蜜乳av中文字幕一区二区| 欧美一区二区三区视频看| 日韩av电影中文在线免费观看| 午夜野花视频在线观看| 久久99热精品免费观看视| 欧美男男在线观看视频网站| 亚洲熟女一区二区三区250p| 欧美大胆a级视频秒播| 久久久久九九九九九12| 51vv精品视频在线观看| 中文字幕熟女人妻一区| 国产欧美福利在线观看| 最新日韩中文字幕啪啪啪| 亚洲韩精品一区二区三区| 亚洲中文字幕在线视频观看二区| 手机看片1024精品国产| 91色乱一区二区三区| 天天干天天色综合久久| 青青青青青爽视频在线| 日韩国产欧美一区二区三区粉嫩 | 亚洲第一页欧美第一页| 亚洲自拍偷拍一区二区中文字幕| 亚洲va999天堂va| 天天摸天天干夜夜操| 1级黄色片在线观看| 亭亭五月天在线观看| 最新国产午夜激情视频| 黄片操操操操操操c| 亚洲国产精品自产拍在线观看| 欧美丝袜亚洲国产日韩| 天天干天天操天天日天天日| 日本黄页在线观看视频| 久久久亚洲综合国产精品| 色丁香久久激情综合网| www一区二区91| 天天操天天日天天插天天舔| 不卡一二三区别视频| 日韩加勒比精品在线看| 欧美一级特黄大片在线| 亚洲制服丝袜美腿在线| 99福利一区二区视频| 蜜乳av一区二区三区免费观看| 亚洲午夜精品一级毛片app| 精品不卡一区二区三区| 一二区二区不卡视频| 国产 亚洲 欧美 自拍| 亚洲蜜桃久久久久久| 色丁香久久激情综合网| 天天曰天天摸天天爽| 亚洲国产综合久久精品| 上床啪啪啪免费视频| 亚洲国产日韩欧美一区二区三区,| 天天搞天天操天天干| 国产精品久久人人添| 欧美男女一区二区三区| 99久久人人爽亚洲精品美女| 中文字幕 首页 人妻| 91精品在线视频免费视频| 大奶熟妇激情操逼逼| 综合久久伊人久久88| 青青草成人免费自拍视频| 欧美成人久久久桃色aa| 55夜色66夜色亚洲精品| 一区二区三区 国产日韩欧美| 91精品久久久久久久99蜜月 | 在线成人教育平台排名| 日本午夜福利免费在线播放| 黄色av网址在线播放| av网页免费在线观看| 亚洲综合天堂av网站在线观看| 婷婷一区二区三区五月丁| 2018中文字字幕人妻| 精品国产久久久久午夜精品av| 性感美女极品18禁网站在线| 亚洲乱码av一区二区蜜桃av| 99在线视频精品观看高| 国产91黑丝小视频在线观看| 深夜福利免费观看在线看| 亚洲黑人欧美二区三区| 天天操天天日天天碰| 国产欧美福利在线观看| 亚洲精品色图1234| 2020国产激情视频在线观看| 欧美日韩成人高清中文网| 丰满少妇_区二区三区| 在线视频自拍第三页| 中文字幕熟女乱一区二区| 激情九月天在线视频| 亚洲人人爽人人澡起碰av| 亚洲人成小说网站色| 亚洲乱码av一区二区蜜桃av| 午夜国产成人精品视频观看| 亚洲av网站一区二区三区| 一区二区三区免费版在线| 欧美亚洲国产一区二区| 日本午夜福利免费在线播放| caopeng97在线观看视频| 国产乱码有码一区二区三区| 亚洲avav天堂av在线网毛片| 天天色天天射天天日天天干| 性色蜜桃臀x88av天美传媒| 天天搞天天操天天干| 夜夜躁婷婷av蜜桃妖| 欧美插插插插插插| 日本东京热视频欧美视频| 久久人妻诱惑我视频| 99在线视频精品观看高| 精产国品一二三产品区别97 | 午夜精品久久久久久久久久蜜桃| 国语对白性爱三级片免费看| 欧美激情视频第一页| 欧美国产精品久久久免费| 国产成人综合久久婷婷| 男女插鸡巴视频软件| 美女把腿张开给男的捅| 大奶熟妇激情操逼逼| 亚洲av综合av一去二区三区| 成熟了的熟妇毛茸茸| 五月激情婷婷四射基地| 丰满放荡熟妇在线播放| 国产自拍偷拍在线精品| 99re这里是国产精品首页| 欧美激情视频第一页| 国产精品久久人人添| 青青青在线观看国产| 黄版视频在线免费观看| 青青青在线视频观看97| jizzjizz国产精品传媒| 中字幕人妻熟女人妻a62v网| 69视频在线精品国自产拍| 久久久久性感美女偷拍视频| 欧美成人一二三在线网| 一区二区三区av免费天天看| 国产精品久久久久精品三级18| 亚洲精品国产99999| 天堂av在线最新地址| 蜜臀久久精品久久久久久av| 无人区一码二码三码区别在哪| 成年人免费福利在线| 果冻麻豆一区二区三区| 国产中年夫妇激情高潮| 亚洲精品一区二区gif| 日本一区二区三区区别| 精品av天堂毛片久久久| 五月的婷婷综合视频| 99久久99九九九99九| 国产av啊啊啊啊啊啊啊| 亚洲高清免费在线观看视频| 亚洲精品中文字幕手机在线免费看| 男女啪啪啪网站在线观看免费| 岛国av成人午夜高清| 老司机免费视频福利0| 日韩人妻一区二区三区在线观看| 99久久99九九九99九| 女人的天堂 av在线| 操死你美女在线视频| 国产一区两区三区福利小视频| 女同性恋av在线播放| 岛国av成人午夜高清| julia人妻av一区二区三区| 国产美女视频带a∨黄色片| 综合久久伊人久久88| 91精品久久久久久久99蜜月| 午夜亚洲国产精品中字| 亚洲欧美另类校园春色| 国产农村乱子伦精精品视频| 在线免费视频999| 97视频538在线观看| 午夜精品久久久久久久精品乱码| 日本少妇三级交换做爰做| 中文字幕熟女人妻一区| 可以直接看av网站| 国产美女主播av在线| 日本美女爱爱视频网站| 69精品互换人妻4p| 亚洲理论在线a中文字幕97| 狠狠操狠狠操狠狠插| 女人的天堂av在线网| 国际精品熟女一区二区| 国产91精品福利系列| 亚洲综合在线视频在线播放| 2026天天操天天干| 免费在线观看黄色小网站| 美女扒开逼逼给你看| 99精品久久99久久久久一| 中文在线字幕免费观看日韩视频| 自拍偷拍色图亚洲天堂| 欧美精品熟妇免费在线| 中文字幕观看中文字幕免费 | 亚洲欧美激情国产综合久久久| 国产漂亮白嫩美女在线图片| 亚洲制服丝袜资源网| 九色91操最新在线观看网址| 91日本精产品一区二区三区| 得得爱在线视频观看| 网站在线观看蜜臀91| 亚洲欧洲无码一区2区无码| 老熟妇一区二区三区v∧88| 91进入蜜桃臀在线播放| 天堂网免费在线电影| 欧美大鸡吧男操女啊啊啊视频| 丰满少妇人妻一区二区三区蜜桃| 凹凸视频一区二区在线观看 | 午夜在线观看一级毛| xxoo福利视频导航| 最新中文字幕久久久久| 亚洲第一页欧美第一页| 伊人免费观看视频一| 黑人黄色免费一级av| 天天干夜夜操91视频网站| av在线中文字幕在线| 91美女在线观看视频| 天天干夜夜操91视频网站| 国产欧美福利在线观看| 亚洲欧美日韩电影一区| 日本欧美国产在线一区| 精品久久久久久久久久久久久 | 熟女阿高潮合集一区二区| 日本成人福利电影网| 日本韩国福利在线播放| 黑人侵犯人妻森泽佳奈| 人妻系列中文字幕大乳丰满人妻| 精品av天堂毛片久久久| 在线能看视频你懂的| 日本不卡视频一二三区| 亚洲国产日韩精品在线| 欧美黑人性猛交小矮人| 黄色片免费国产精品| 亚洲熟女乱一区二区精品成人| 国产女人18毛片水真多精选| 插鸡视频免费网站在线播放| 欧美日韩黄片免费在线观看| 亚洲 自拍 激情 另类| 97精品久久久久久无码人妻| 50熟妇一区二区三区| 天天天天天天天天干夜夜| 国产精品美女免费视频观看| 亚洲第一中文字幕成人| 久久亚洲国产成人精品麻豆| 青青国产95免看视频| 欧美性受黑人猛交裸体视频| 18岁禁一二三区免费体验| 亚州av嫩草av极品在线观看| 精品精品精品精品精品污污污污| 韩国毛片w妈妈的朋友7| 港台美女明星av天堂| 亚洲 偷拍 自拍 欧美| 69精品人妻久久久久久久久久久 | 天天日天天亲天天操| 日本少妇精品免费视频| 中国特黄色性生活片| 国产高清视频www夜色资源| 啊不行啊操逼好爽大鸡吧视频| 欧美一级日韩一级亚洲一级va| 老熟女xxxⅹhd老熟女性| 亚洲美女午夜激情视频在线观看| 天天操天天搞天天操| 亚洲少妇视频在线观看| 中文字幕 人妻 熟女| 欧美成人红桃视频在线观看| 美女福利网站在线播放| 免费在线观看视频啪啪| 性感美女极品18禁网站在线| iga肾三级算严重吗| 午夜久久人妻一级内射av网址| 97人妻av人人澡人人爽| 绿巨人浩克在线视频观看 | 9420高清视频在线观看国语版| 亚洲一区二区精品三区视频| 大尺度久久久久久久| 97超碰人人爽人人做| 熟女一区二区视频在线| 亚洲国产精品一区51动漫| 最新国产午夜激情视频| 久久sm人妻中出精品一区二区| 国产精品 亚洲欧美 自拍偷拍| 制服丝袜中文字幕熟女人妻 | 美女网站视频久久精品| 亚洲熟女一区二区三区250p| 国产成人深夜福利短视频99| 在线免费观看欧美小视频| 夫亡人妻被强干中文字幕| 中文字幕中文字幕在线中…一区| 欧美在线观看一区二区不卡| 国产高清视频www夜色资源| 亚洲中文字幕最新地址| 999久久久人妻精品一区 | 亚洲最大的自拍偷拍网| 日韩一区二区在线播放观看| 99久久人人爽亚洲精品美女| 日韩一级欧美一级片| 最新国产午夜激情视频| 久久中文字幕av一区二区| 在线观看黄页网站视频网站| 一区二区三区国产精华液区别大吗| 亚洲va999天堂va| 在宿舍强奷两个清纯校花| 美女黄色啊啊啊啊视频| 欧美日韩国产在线中文字幕| 无人区一码二码三码区别在哪| 凹凸视频一区二区在线观看| 中文字幕久久久国产| 不卡在线一区二区三区| 中文字幕 一区二区在线观看| 日韩国产欧美久久一区| 天天做天天日天天搞| 欧美男女一区二区三区| 欧美黄色一区二区三区视频| 亚洲va999天堂va| 亚洲av中文无码网站| 99久久免费播放在线观看视频| 欧美一区二区三区爽爽| 天堂av国产av伦理av| 91九色人妻在线播放| 亚洲中文字幕最新地址| 免费成人av麻豆| 东京热男人的天堂视频| 亚洲午夜国产末满十八岁勿进网站 | 久久久精品人妻无码专区不卡| 亚洲美女a级黄色在线播放 | 九九六视频,这里只有精品| 日本欧美视频在线免费| 日韩人妻中文字幕区| 在线 制服 中文字幕 日韩| 99999久久久精品| 亚洲欧美日韩电影一区| 一区二区三区四区久久久久韩日 | 亚洲欧美日韩中文在线观看| 欧美区一区二区三视频| 国产男女无套?免费网站下载| 青青操久久综合激情| 日韩av熟妇在线观看| 在线国产精品欧美| 黄片操操操操操操c| 色网站在线观看免费| 成人av中文字幕在线看| 97视频538在线观看| 国语精品视频自产自拍| 久久午夜免费鲁丝片| 老熟妇一区二区三区v∧88| 情趣视频在线观看91| 亚洲熟女一区二区三区250p| 偷拍熟女大胆免费视频| 手机看电影一区二区三区| 国产福利小视频在线观看网站| 97人妻在线视频自拍| 狠狠操深爱婷婷综合一区| 凹凸视频一区二区在线观看| 久久国产半精品99精品国产| 亚洲一区二区在线视频观看免费| 国内精品一区二区2021在线| 亚洲一区二区偷拍女厕所| 高潮喷水一区二区三区| 日本黄页在线观看视频| 色噜噜噜噜色噜噜色合久一| 精品国产污污污污免费观看| 伊人网国产在线播放| 制服丝袜中文字幕熟女人妻| av 一区二区三区 熟女| 天天爱天天日天天爽| 成人人妻h在线观看| 中文字幕观看中文字幕免费 | 福利小视频免费在线| 亚洲乱码av一区二区蜜桃av| 亚洲精品9999蜜桃| 亚洲黄色免费在线观看网站| 亚洲高清一区二区三区久久| 亚洲人人爽人人澡起碰av| www国产亚洲精品久久久| 黄在线看片免费人成视频| 国产美女主播av在线| 国产高清在线观看av| 熟妇精品午夜久久久久| 国内自拍第一区二区三区| 西野翔人妻中文字幕中字在| 中文字幕丰满子伦无码专区| 欧洲精品在线免费观看| 日本一本午夜在线播放| 92麻豆一区二区三区| 日韩少妇免费在线播放| 港台美女明星av天堂| 丝袜美女诱惑佐佐三上| 91大神福利视频网| 国产激情免费在线视频| 亚洲一区二区精品三区视频| tushy一区二区三区视频| 免费在线小视频你懂的| 国产成人在线观看视频播放| 污网址在线观看视频| 男女啪啪啪啪91av日韩| 日本熟妇乱妇熟色视频| 自拍丝袜国产欧美日韩| 日韩av熟妇在线观看| 天天干夜夜操夜夜骑| 精品一区二区三区喷水内射高潮| 精品国模一区二区三区欧美| —区二区三区女厕偷拍| 国产高清视频www夜色资源| 国产自拍偷拍视频在线免费观看| 真人一进一出抽搐大尺度视频| 国产午夜羞羞一区二区三区| 青青草成人免费自拍视频| 免费中文字幕a级激情| 国产精品网站亚洲发布| 国产igao激情在线视频入口| 男生用大肌巴操美女骚穴| 欧美大鸡吧男操女啊啊啊视频| 日本韩国欧美在线视频| jiee日本美女视频网站| 日本黄页在线观看视频| 中国特黄色性生活片| 5d蜜桃臀女无痕裸感| 久久无码高清免费视频| 天天爱天天日天天爽| 久久久久夜色国产精品电影| ass亚洲熟女ass| 91精品国产人妻麻豆| 一区二区在线观看视频观看| 亚洲欧洲无码一区2区无码| 日本韩国福利在线播放| 亚洲精品国品乱码久久久久| 久久视频 在线播放| 亚洲成人中文无码在线| 欧美精品熟妇免费在线| 男女爱爱好爽视频免费看| 亚洲唯美激情综合四射| 熟女阿高潮合集一区二区| 亚洲韩精品一区二区三区| 国产精品剧情av在线播放| 欧美aaaa性bbbbaaaa| 久久久人妻免费视频| av福利免费体验观看| 成人十欧美亚洲综合在线| 又粗又长又硬又黄又爽| 欧美区一区二区三视频| 在线免费观看欧美小视频| 久草视频在线看免费| avjpm亚洲伊人久久| 成人大片男人的天堂| 黄色av日韩在线观看| 欧美色视频网址大全| 第一福利视频在线观看| 爱搞视频在线观看视频91| 青青操天堂在线观看视频| 午夜精品老牛av一区二区三区| 中文字幕人妻一区色偷偷久久| 午夜情色一区二区三区| 天天干天天弄天天日| 国产91精品福利系列| 亚洲免费午夜污福利| 久久一级片三上悠亚| 99 re国产精品| 91九色91在线视频| 精品av天堂毛片久久久| 91久久精品美女高潮喷水白浆| 大陆中文字幕视频在线| 最近中文字幕免费视频一| 中文在线字幕免费观看日韩视频| 久草视频在线视频在线视频| 人妻色综合aaaaaa网| 中文字幕日韩人妻在线三区| 91九色尤物无套内射| 久久国产精品久精国产爱| 中文字幕福利视频第四页| 久久内射天天玩天天懂色| 久久久久夜色国产精品电影| 日日夜夜免费视频精品| 中文字幕丰满子伦无码专区| 精品人妻 色中文熟女 oo| 网友自拍第一页99热| 无人区一码二码三码区别在哪| 亚洲av激情综合网| 亚洲欧美国产人成在线| 天天操,天天射,天天爽| 18禁男女啪啪啪无遮挡| 国产伦理二区三区在干嘛呢| 中文字幕亚洲乱码精品无限| 中文字幕观看中文字幕免费| ysl蜜桃色7425| 国内销魂老女人老泬| 夜色17s精品人妻熟女av| 免费中文字幕a级激情| 欧美久久蜜臀蜜桃资源吧| 天堂一区二区三区在线等| 一区二区三区av免费天天看| 免费观看在线中文字幕视频| 制服丝袜 中文字幕 日韩| 青青操91美女国产| 日韩欧美国产一区二区在线观看| 亚成区一区二区人妻熟女| 嗯~嗯~啊啊啊~高潮了软件| 亚洲制服丝袜在线看| 欧洲精品在线免费观看| 性感美女极品18禁网站在线| 熟女人妻精品视频一区| 美利坚合众国av天堂| 天天操天天日天天碰| 精品国模一区二区三区欧美 | 91系列视频在线播放| 日韩成人免费观看电影| 99热99这里免费的精品| 九九六视频,这里只有精品| 久久99热精品免费观看视| 熟妇高潮久久久久久久| 国产av啊啊啊啊啊啊啊| 丰满人妻熟女aⅴ一区| 欧美熟女xx00视频| 99免费观看在线视频| 自拍偷拍视频亚洲一区| 一区二区三区内射美女| 午夜野花视频在线观看| 激情九月天在线视频| 日韩国产欧美久久一区| 中文字幕 一区二区在线观看| 91进入蜜桃臀在线播放| 女人的天堂 av在线| 亚洲图片另类综合小说| 久久免费视频ww一区| 亚洲成年人精品国产| 国产精品国产三级在线高清观看| 亚洲精品国产99999| 亚洲欧美激情国产综合久久久| 国产在线观看av一区| 十八禁黄色免费污污污亚洲| 黄色大片一级老太太操逼| 抽插小穴啊啊啊视频| 首页欧美日韩中文字幕| 91人妻人人爽色啊啊啊| 亚洲同性同志一二三专区 | 亚洲成人自拍图片网站| 婷婷综合缴情亚洲五月伊人| 日本男女免费福利视频| 日韩激情文学在线视频| 交换的一天中文字幕在线视频 | 麻豆白洁少妇在线播放| 久久无码高清免费视频| 亚洲码av一区二区三区| 亚洲综合天堂av网站在线观看| 得得爱在线视频观看| 国产精品午夜无码AV体验区| 河北全程露脸对白自拍| 欧美日韩高清片在线观看| 手机看片1024精品国产| 精品国产无乱码一区二区三区| 91中文字幕视频网站| 亚洲av手机免费在线| 亚洲精品激情视频在线观看| 久久国产精品久精国产爱| 黑人大吊大战亚洲女人。| 黄色av日韩在线观看| 桃色成人开心激情网| 人妻在线中文视频视频| 97视频538在线观看| 天天早上头和脸出汗是怎么办| 亚洲日本欧美韩国另类综合| 综合久久伊人久久88| 熟妇精品午夜久久久久| jizzjizz国产精品传媒| 啪啪啪网站免费看视频| 狠狠操av一区二区三区| 午夜宅男电影av网站| 玖辛奈18禁同人污本子| 欧美一级特黄大片在线| 女人高潮潮呻吟喷水网站| 中文字幕人妻精品精品| 日韩最近中文在线观看| 午夜一区二区三区视频在线观看 | 熟女人妻aⅴ一区二区三| 亚洲精品1卡2卡3卡| 国产av在线免费视频| 亚洲欧美日韩电影一区| a级黄片免费观看| 99精品视频在线在线观看| 欧美日韩一区二区三区成人影院| 成人午夜高清福利视频| 免费绝清毛片a在线播放| aaaa级少妇高潮在线观看 | 蜜臀久久精品久久久久久av| av人摸人人人澡人人超碰小说| 日日夜夜免费视频精品| 美国男的操女孩的小嫩逼| 制服丝袜中文字幕熟女人妻| 98热视频精品在线观看| 欧洲成熟女人色惰片| 在线看日韩av不卡| 国产黄色主播网址大全在线播放| 国产女主播在线观看一区| 国际日韩日韩日韩日韩日韩| 大屁股熟女一区二区视频| 国产午夜在线播放视频| 日韩人妻中文字幕区| 蜜臀一区二区日韩美女少妇视频| 国产 亚洲 欧美 自拍| 欧美成人少妇人妻精品| 99久久免费播放在线观看视频| 欧美黑人1区2区3区| av里面的动作是真进去吗| 91青青青国产免费高清| 天天爱天天日天天爽| 亚洲美女露隐私av一区二区精品| 最新久久这里只有精品| 天天干天天操天天日天天日| av人摸人人人澡人人超碰小说| 青娱乐免费最新视频| 亚洲精品中文字幕手机在线免费看| 外国美女舔男人坤坤| 欧美日韩一区二区三区成人影院| 国产91九色视频在线观看| 青青青免费手机视频在线观看| 干逼又爽又黄又免费的视频| 欧美老熟妇xxoo老妇| 懂色av之国产精品| 久久久久性感美女偷拍视频| 亚洲宅男噜噜噜66在线观看| 免费在线小视频你懂的| 99久久久久久久久久久久久| 三级欧美日韩一区二区三区| 日韩黄色在线观看网站上| 九九九九九久久久国产| 日本福利视频网站导航| 天天色 天天操 天天好逼| 亚洲唯美激情综合四射| 亚洲综合一区二区三区四区| 午夜免费福利老司机| 成人资源中文在线观看| 欧美在线视频不卡一区| 一区二区三区资源视频| 亚洲自拍偷拍一区二区中文字幕| 天堂av国产av伦理av| 国产精美视频精品视频精品| 国产成人91色精品免费看片| 精品国产人伦一区二区三区| 福利一二三在线视频观看| 欧美日本国产一区二区| 99热在线只有的精品| 97视频人人爱麻豆| 亚洲色大WWW永久网站| 人妻系列级片在线观看视频| 少妇被粗大的猛进69视频| 九色porny91国产| 亚洲午夜熟女在线观看| 婷婷六月天在线视频| 亚洲在线免费观看18| 黄在线看片免费人成视频| 亚洲欧美一级特黄大片| 国产精品 亚洲欧美 自拍偷拍| 老司机在线视频福利观看| 亚洲色大WWW永久网站| 日韩国产欧美一区二区三区粉嫩| 国产成人在线观看视频播放| 漂亮人妻口爆久久精品| 五月天色婷婷狠狠爱| 亚洲最强的25个城市| 中文字幕 人妻 熟女| 99999久久久精品| 亚洲国产日韩欧美一区二区三区, 精久久久久久久久久久久 | 快进来插我的逼嗯啊视频| 69视频在线精品国自产拍| 亚av一二三在线观看| 福利小视频免费在线| 5566熟女人妻人妻| 国产清纯一区二区在线观看| 男生用大肌巴操美女骚穴| 中文字幕麻绳捆绑的人妻| 91在线九色porny| 国产激情视频在线观看的| 亚洲国产精品自拍偷拍视频在线| 国产自拍偷拍在线精品| 亚洲午夜熟女在线观看| 天天插天天透天天爽| 91香蕉国产亚洲一二三区| 亚洲男人的天堂最新网址| 午夜亚洲国产精品中字 | 啊不行啊操逼好爽大鸡吧视频| 先锋人妻啪啪中文字幕| 亚洲人成小说网站色| 色老头一区二区三区四区五区| 亚洲欧美小说中文字幕| av网页免费在线观看| 中文字幕 中文字幕 亚洲| 可以免费观看日韩av| 1级黄色片在线观看| 夜夜躁婷婷av蜜桃妖| 西野翔人妻中文字幕中字在| 亚洲一区二区偷拍女厕所| 熟女人妻少妇一区二区| 亚洲一区二区三区国产精品电影| 黑人巨大精品一区二区在线 | 911美女片黄在线观看| 不卡在线一区二区三区| 18岁禁一二三区免费体验| 真人一进一出抽搐大尺度视频| 欧美日韩黄片免费在线观看| 伊人久久综合国产精品| 亚洲色大WWW永久网站| 亚av一二三在线观看| 99久9在线视频播放| 天天日夜夜操人人爽| 51vv精品视频在线观看| 大香蕉在线欧美在线视频| 裸日本资源在线午夜| 91亚洲精品久久蜜桃| 自拍偷自拍亚洲精品10p| 青青草一个释放的网站| 日本美女爱爱视频网站| 亚洲综合成人精品成人精品| 免费在线观看黄色小网站| 成年人黄色日本视频| 丰满放荡熟妇在线播放| 大片a免费观看在线视频观看| 在线免费观看a视频免费| av天堂新资源在线| 熟妇人妻av无码中文字幕| 欧美啪啪一区二区三区| 九九热在线精品播放| 午夜呻吟亚洲精品中文字幕在上面| 亚洲人成大片在线观看| 亚洲欧美另类校园春色| 最新国产精品拍在线观看| 人妻免费视频黄片在线视频| 国产精品igao为爱寻找激情| 69视频在线精品国自产拍 | 日韩欧美中文字幕老司机三分钟| 美女激情久久久久久久| 天天操天天日天天碰| 大香蕉尹人在线最新| 91亚洲国产成人久久精品| 婷婷色综合五月天视频| ass亚洲熟女ass| 久久久久久免费观看av| 蜜臀久久精品久久久久久av| ysl蜜桃色7425| 在线视频国产精品欧美| 国产精品网站亚洲发布| 日本熟妇乱妇熟色视频| 午夜在线成人免费电影| 熟女国内精品一区二区三区| 操死你美女在线视频| 亚洲美女露隐私av一区二区精品 | 久操资源在线免费播放| 韩国一级片最火爆中文字幕| 熟妇精品午夜久久久久| 99久久久久久久久久久久久| 欧美男女一区二区三区| 久久人妻诱惑我视频| 亚洲欧洲一区二区三区在线| 999久久久人妻精品一区| 日韩欧美一区二区三区免费看 | 91精品夜夜夜一区二区蜜桃| 国模伊人久久精品一区二区三区| av日韩视频在线观看| 在线免费观看欧美小视频| 美国十次了亚洲天堂网国产| avgo成人短视频| 少妇精品视频一区二区免费看| 每日更新日韩欧美在线| 亚洲熟女一区二区六区| 日韩国产欧美久久一区| 果冻麻豆一区二区三区| 日本亚洲精品视频在线观看| 超碰在线观看97资源| 在线免费观看欧美小视频| 国产女主播在线观看一区| 神马不卡视频在线视频| 97香蕉久久国产超碰| 亚洲成a人77777| 国产视频成人自拍蝌蚪视频 | 中文字幕综合网91| 18岁禁一二三区免费体验| 91青青青国产免费高清| 亚洲美女色www色| 9662av在线视频| 午夜福利片无码10000| 精品视频在线观看免费99| 欧美日韩亚洲国产视频二区| 嗯~嗯~啊啊啊~高潮了软件| 中文字幕一区二区三区久久久| 日本少妇人妻中文在线| 开心五月综合激情婷婷| 婷婷色综合五月天视频| 99久久久久久亚洲精品免费| 中文字幕福利视频第四页| yellow在线亚洲精品一区| 熟妇人妻丰满久久久久久久| 一区二区三区婷婷中文字幕| 天天干夜夜操91视频网站| jizzjizz国产精品传媒| 天天爽天天操天天插| 操死你美女在线视频| 在线观看2022av| 美女妩媚午夜诱惑网站| 老熟妇一区二区三区v∧88| 在线观看网站伊人网| av激情四射五月婷婷| 国产亚洲精品啪啪视频| 伦理在线观看未删减中文字幕| 五月激情婷婷四射基地| 欧美插插插插插插| 欧美黄色性视频网站| 69国产精品成人aaaaa片| 五月在线视频免费播放91| 欧美区一区二区三视频| 欧美日韩高清片在线观看| 日韩成人在线电影首页| 国色天香一二三期区别大象| 日本久久久久久黄色| 裸日本资源在线午夜|