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

面試官:你對插件化有什么了解?

開發 前端
對于一個完整功能的App,我們可以將其劃分成為很多模塊,每個模塊都可以將其劃分成為一個Apk。然后將基礎功能的Apk提交給應用市場上架,后續我們可以通過基礎的Apk,下載其他模塊的Apk,從而完成功能的擴展。

背景

插件化的誕生是為了解決什么問題?

我們不妨好好思考一下,作為客戶端開發,平時工作中是否為這樣的情況發愁:

  • 核心業務功能迭代的時候,千小心,萬小心,又是做AB,又是做灰度,最后線上還是出問題了,這個時候只能靠發版解決問題,奈何客戶端的發版周期長,并且只有用戶升級以后才能解決問題
  • 有些業務上線以來,用的人不多,占用的包體積還不小,這些功能是否可以動態加載
  • 開發一個功能,必須提交到應用商店以后,用戶才能更新(涉及到監管)

所以說,插件化設計之初就是為了不安裝新Apk,從而完成應用的更新迭代。

我之前所在的團隊也做了插件化,主要的原因還是包體積的訴求,原因有兩個:

  • 廠商預裝的時候包體積的強制訴求:如果不做插件化,就需要每年預裝階段持續投入人力優化包體積,成本比較高
  • 對外投放的時候,小包有利于提高用戶的轉化

轉換率轉換率

上圖是2018年谷歌IO披露的包體積與下載轉化率之間的關系,時至今日,即使我們的網絡狀況已經有了很好的提升,但是優化包體積仍然是我們的目標,比如說:

  • 線下推廣的時候用戶的網絡是不穩定的
  • 對于線上廣告投放,用戶不可能一直在wifi下,小的包體積可以讓用戶更快的進入應用內,避免勸退用戶

所以我們可以看到,pdd這一方面做的很出色,僅有25m。

一、插件化難點

講插件化之前,我們先科普一下其中的概念。

對于一個完整功能的App,我們可以將其劃分成為很多模塊,每個模塊都可以將其劃分成為一個Apk。然后將基礎功能的Apk提交給應用市場上架,后續我們可以通過基礎的Apk,下載其他模塊的Apk,從而完成功能的擴展。

基礎分包基礎分包

在整個過程中,我們稱提交給應用市場的Apk為宿主,其他模塊的Apk稱之為插件。

相信沒接觸過插件化的同學可能會有一些疑問,我們平時打包的時候不是都是一個完整的Apk,為什么可以加載一個單獨的Apk?好了,這就是插件化的第一個難點。

二、加載插件Apk

作為一個Android開發,我們都知道Android里面的Davilk和Art虛擬機和Java虛擬機不是同一套,所以他們也有著不同的類加載結構。

我們先回顧一下。

1. Java類加載

Jvm中加載的文件是class文件,再由Jvm翻譯成特定平臺的機器碼。使用的類加載器如下:

  • 啟動類加載器:由C++語言實現,負責加載Java中的核心類。
  • 擴展類加載器:負責加載Java擴展的核心類之外的類。
  • 應用程序類加載器:負責加載用戶類路徑上指定的類庫。

整個加載架構如下:

Java類加載器結構Java類加載器結構

雙親委派機制保證了收到類加載請求的時候,優先讓父類加載器去加載,父類加載器處理不了的時候,才會自己去加載,保證了類加載機制的穩定性。

2. Android類加載

我們上面提過,由于CPU和功耗環境不一致,Android虛擬機和Jvm有著很大的不同,Android里面的虛擬機在4.4.4以后,就是ART虛擬機了。早期的時候,安裝的時候,會將dex文件直接編譯成.oat這樣的機器碼,不過這樣會有其他問題:

  • 提高安裝和升級應用的時間

于是,在 Android 7.0 以后,第一次啟動的時候,使用 Jit,針對dex,邊解釋邊執行,然后在空閑的時候,將剩余的 dex 文件編譯成機器碼。

所以,我們可以注意到,每次應用升級的一段時間內,我們的啟動時長會出現波動,過了幾天以后,又會達到穩定的狀態。因此,很多大廠,會針對這個過程優化,如:

  • 如何更多的觸發 dex2aot 過程
  • 對啟動熱點代碼預先aot,比如谷歌的BaselineProfile方案,很多大廠也有自己的方案

我們再來看一下類加載機制,Android里面類加載的單位是dex,類加載器包括:

  • BootClassLoader:用來解決Android系統啟動時的核心基礎類
  • PathClassLoader:Android中默認的類加載器,主要用來加載應用程序自身的類以及系統類庫之外的本地代碼
  • DexClassLoader:加載指定路徑下的Apk、Jar包的類
  • InMemoryDexClassLoader:Android 8.0 中可以用來加載內存中的Dex文件

整個結構是這樣的:

Android類加載器Android類加載器

如果是指定路徑下的Apk或者jar包,我們需要將 PathClassLoader 替換成 DexClassLoader。到這里,第一個問題的解決思路就很清晰了,我們可以通過 DexClassLoader 加載插件Apk。

3. 方案實現

DexClassLoader的原理主要是通過DexPathList管理DexFile列表信息,從而加載到具體的類。

DexClassLoaderDexClassLoader


基于DexClassLoader,通常有兩種方案:

  • 單個DexClassLoader方案
  • 多個DexClassLoader方案

單個DexClassLoader

單個DexClassLoader指的我們可能有多個插件Dex,多個插件Dex使用同一個DexClassLoader,如圖:

單ClassLoader結構

將所有的插件中的類都由統一的DexClassLoader加載。

多個DexClassLoader

多個DexClassLoader指的是對于多個插件Dex,每一個Dex都會有自己的DexClassLoader,如圖:

多ClassLoader結構多ClassLoader結構

由各自DexClassLoader負責相關的插件的類加載。

看一下各自的優缺點:

分類

優點

缺點

單DexClassLoader

類之間不隔離,可以互相調用

需要處理一些適配問題,比如不同插件加載了同一庫的不同版本,可能引發兼容性問題

多DexClassLoader

安全、穩定

類之間隔離,需要處理互相調用的問題

對于我們安卓系統來講,僅僅能夠加載插件中的類顯然是不夠的,還要能夠啟動插件中的的四大組件,并正確的執行四大組件的生命周期,為什么不能夠執行四大組件的生命周期呢?

這是因為,只有在我們宿主包中Manifest文件中注冊的四大組件才能夠啟動,如果沒有注冊,就會拋出異常,提醒你在Manifest中注冊。這也是我們遇到的第二個問題。

三、組件加載

Android 中四大組件包括Activity、Service、廣播和ContentProvider,我們主要介紹一下Activity。

1. Activity解決方法

如果我們想讓對應的Activity啟動,一般有如下幾種方法:

  1. 宿主包提前聲明組件
  2. 占位組件 + 手動調用組件
  3. 占位組件 + 欺騙系統

我們針對這幾種分別解釋一下。

1.1 宿主包提前聲明組件

將所有的四大組件在宿主包中都提前聲明,這是最簡單粗暴的方式。

但這種方式會丟失插件化的動態性,也就是說,如果想在插件包中,加入宿主包沒有注冊的Activity,這就會有問題。

那這種方式的優點呢?解決包體積的問題的同時不用處理復雜的組件加載以及伴隨的生命周期的問題。

1.2 占位組件 + 手動調用組件

那如果想要保存插件的動態化加載呢?也就是說我們想要在插件包中的 Manifest 文件中進行注冊。

默認情況下,如果我們啟動一個沒有在插件 Manifest 中注冊的的 Activity,會發生 error,原因是啟動過程中的 Instrumentation 中的 checkStartActivityResult 方法:

public class Instrumentation {
    public static void checkStartActivityResult(int res, Object intent) {
        if (!ActivityManager.isStartResultFatalError(res)) {
            return;
        }

        switch (res) {
            case ActivityManager.START_INTENT_NOT_RESOLVED:
            case ActivityManager.START_CLASS_NOT_FOUND:
                if (intent instanceof Intent && ((Intent)intent).getComponent() != null)
                    throw new ActivityNotFoundException(
                            "Unable to find explicit activity class "
                            + ((Intent)intent).getComponent().toShortString()
                            + "; have you declared this activity in your AndroidManifest.xml?");
                throw new ActivityNotFoundException(
                        "No Activity found to handle " + intent);
                ...
        }
    }
}

所以我們傳入的Activity必須要在宿主包中注冊,這樣系統才能檢驗通過,那怎么才能實現動態化呢?

答案是使用占位Activity,這其實就是使用的代理模式。每次需要啟動插件中的Activity的時候,先啟動一個占位Activity實例,然后在占位Activity實例里面持有目標Activity的實例對象,從而通過反射或者其他方法調用實例的生命周期。

生命周期處理生命周期處理

這種方法的問題主要如下:

  1. 代碼的入侵性比較強,需要統一繼承PluginActvity。
  2. 對于Activity的啟動模式,處理比較繁瑣。
  3. 改造已有的模塊比較繁瑣。

1.3 欺騙系統

第三種方法我們稱之為欺騙系統,具體怎么個欺騙方法呢?

先看一下具體Activity的啟動流程,默認大家對Activity的啟動流程比較了解了:

Activity啟動流程Activity啟動流程

我們在整個過程中,同樣也需要一個占位Activity。

使用步驟如下:

  1. 在途中的第一步,啟動PluginActivity跳轉的時候,通過Instrument處理的時候,會將PluginActivity的Intent改成占位Activity的Intent,并存入原始Activity的信息。
  2. 在圖片中的第十三步,等系統驗證完成回來創建占位Activity的實例對象,就替換成PluginActivity。

最終,系統以為自己調用的是占位Activity的對象,并且和實際上調用的是PluginActivity進行綁定。

在最終使用之前,我們在插件中的Android資源文件并不能使用,比如說圖片、字符串、布局文件等,原因是插件的資源路徑并沒有被添加。

四、資源加載

Apk安裝以后,我們都是通過 Resource 對象去訪問資源,簡單看一下 Resouce 的構造方法:

@Deprecated  
public Resources(AssetManager assets, DisplayMetrics metrics, Configuration config) {  
    this(null);  
    mResourcesImpl = new ResourcesImpl(assets, metrics, config, new DisplayAdjustments());  
}

可以看到,構造函數中有一個參數是 AssetManager,我們可以通過在 AssetManager 中,加入我們插件的資源地址,就可以訪問到插件中的資源。

1 解決方法

現在可以訪問具體的資源了,和之前的類加載方式類似,也有兩種加載方式:

  • 合并式:插件和宿主資源可以互相訪問,要處理資源沖突
  • 獨立式:無需處理資源沖突,宿主和插件的資源訪問比較難處理

首先,我們想一下為什么會有資源沖突問題?其實是因為宿主和插件包都是獨立編譯的,所以打包的時候生成的資源Id會存在相同的情況,這個時候,訪問的的時候就存在資源沖突。

我們項目之前采用的 Qigsaw 方案,所以簡單介紹一下合并式的方案,資源id是8位16進制數表示:

QigsawQigsaw

如上圖:

  • PP為Package Id,代表應用類型:如系統應用、第三方應用、dynamic feature等。
  • TT為資源類型:如drawabl、layout和string。
  • EEEE為Entry:代表資源順序

所以我們對不同的插件包,進行打包的時候,前面的PP字段,可以進行依次遞減,可以避免資源沖突的問題。常用的方案有:

  1. 修改AAPT生成ResourceId,在編譯期間完成修改
  2. 修改resouce.arsc文件

Qigsaw使用的第一種方案。

總結

本文是一篇入門插件化的文章,主要回答了插件化是什么,有什么難點,又是怎么解決的,其中沒有涉及到很多代碼,非常適合入門。

責任編輯:武曉燕 來源: 九心說
相關推薦

2025-04-01 00:00:00

項目CRUD單例模式

2022-08-02 06:31:32

Java并發工具類

2022-07-26 08:40:42

Java并發工具類

2022-07-11 10:47:46

容器JAVA

2021-11-25 10:18:42

RESTfulJava互聯網

2021-08-09 07:47:40

Git面試版本

2025-01-13 09:24:32

2019-12-25 11:22:19

負載均衡集群算法

2020-12-04 06:27:04

序列化面試官Java

2022-07-18 14:18:26

Babel代碼面試

2022-02-21 17:24:18

序列化對象存儲

2020-02-28 15:42:26

AOPJDKCGLib

2015-08-13 10:29:12

面試面試官

2024-09-27 15:43:52

零拷貝DMAIO

2025-02-21 15:25:54

虛擬線程輕量級

2020-12-01 08:47:36

Java異常開發

2020-06-12 15:50:56

options前端服務器

2025-03-21 00:00:05

Reactor設計模式I/O 機制

2022-03-21 09:05:18

volatileCPUJava

2024-10-24 16:14:43

數據傳輸CPU零拷貝
點贊
收藏

51CTO技術棧公眾號

精品欠久久久中文字幕加勒比| 麻豆视频在线免费观看| 一本色道久久综合| 国产一区二区久久精品| 国产永久免费网站| √最新版天堂资源网在线| 91麻豆精品秘密| 91精品中文在线| 99热在线观看免费精品| 色琪琪久久se色| 精品1区2区在线观看| 国产视频一区二区三区在线播放| a级影片在线| 91毛片在线观看| 亚洲一区二区三区在线视频| 国产一级18片视频| 亚洲色图网站| 亚洲新声在线观看| 日本精品一二三区| 免费成人黄色网| 精品毛片网大全| 国产精品久久成人免费观看| 三级av在线播放| 国产精品 日产精品 欧美精品| 日韩av色在线| 国产大片中文字幕在线观看| 日韩国产专区| 国产视频精品免费播放| 亚洲欧美日韩中文字幕在线观看| 欧美日韩视频免费观看| 亚洲国产精品久久一线不卡| 在线观看日本一区| 番号在线播放| 91浏览器在线视频| 国产一区二区中文字幕免费看| 中文字幕欧美在线观看| 久久国产精品毛片| 亚州av一区二区| 国产亚洲欧美久久久久| 亚洲成人tv| 最新69国产成人精品视频免费| 特级西西人体wwwww| 9l视频自拍蝌蚪9l视频成人| 91麻豆精品国产91久久久资源速度| 草草久久久无码国产专区| 性欧美猛交videos| 亚洲精品少妇30p| 一区二区三区不卡在线| 二区三区在线播放| 国产欧美一区二区精品久导航| 国产一区免费视频| 日韩永久免费视频| 成人一区二区三区视频在线观看| 51精品国产人成在线观看 | 亚洲第一在线综合网站| 国产又大又长又粗又黄| 日本视频在线| 综合在线观看色| 只有这里有精品| 性欧美1819sex性高清大胸| 亚洲欧美一区二区三区孕妇| 在线观看欧美激情| 精品麻豆一区二区三区 | 亚洲国产欧美一区二区丝袜黑人 | 国产欧美一区二区精品仙草咪| 欧美精品一区二区视频| 精品欧美不卡一区二区在线观看| 久久亚洲二区三区| 日韩电影大全在线观看| av在线电影免费观看| 中文字幕精品—区二区四季| 亚洲福利av| 超碰免费公开在线| 亚洲高清不卡在线观看| 国产综合av在线| 亚洲承认视频| 欧美日韩夫妻久久| 极品白嫩的小少妇| 怕怕欧美视频免费大全| 在线激情影院一区| 亚洲国产成人精品综合99| 国产主播精品| 欧美孕妇毛茸茸xxxx| 波多野结衣激情视频| 蜜臀国产一区二区三区在线播放| 成人妇女免费播放久久久| 国产成人免费看一级大黄| 成人av电影在线网| 日韩精品欧美专区| 黄色网在线免费观看| 亚洲一区电影777| 欧美成人精品欧美一级乱| 精品福利在线| 精品国产区一区| 真实乱视频国产免费观看| 99热在线成人| 欧美一级高清免费播放| 在线不卡免费视频| 成人动漫一区二区在线| 日本黑人久久| 欧美aaa免费| 欧美性欧美巨大黑白大战| 尤物网站在线看| 亚洲美女久久| 欧美高清视频一区二区| 国产女主播喷水视频在线观看 | 中文字幕一区三区久久女搜查官| 国产精品欧美三级在线观看| 久久69精品久久久久久国产越南| 香蕉影院在线观看| 国产美女精品在线| 日本一区二区三区www| 免费在线中文字幕| 欧美日韩视频在线观看一区二区三区 | 三级成人在线视频| 国产精品国产三级国产专区53| 国产三级在线观看| 午夜精品一区二区三区免费视频| 天堂中文av在线| 国产精品密蕾丝视频下载| 欧美激情一区二区三区成人| 一级黄色片免费| 久久精品亚洲一区二区三区浴池| www.夜夜爱| 亚洲天堂网站| 国产一区二区黄| 青青草免费观看视频| 东方aⅴ免费观看久久av| 亚洲最大免费| 国产成人免费9x9x人网站视频| 亚洲精品一线二线三线| 日本高清一二三区| 另类调教123区| 日韩高清三级| 人人视频精品| 日韩精品视频中文在线观看| 免费毛片在线播放免费| 激情小说亚洲一区| 一区二区三区我不卡| 网友自拍亚洲| 亚洲美女在线视频| 国产精品视频免费播放| 国产91精品露脸国语对白| 亚洲区成人777777精品| 亚洲国产aⅴ精品一区二区三区| 国产一区二区三区在线视频| 99re这里只有精品在线| 久久久不卡影院| 日韩欧美在线播放视频| 色婷婷久久久| 欧美一级高清免费播放| 日韩av成人| 色婷婷久久99综合精品jk白丝| 7788色淫网站小说| 在线一区免费观看| 欧美精彩一区二区三区| 末成年女av片一区二区下载| 日韩av在线一区| 久久久久99精品成人片三人毛片| 26uuu国产电影一区二区| 91视频最新入口| 欧美人与牛zoz0性行为| 国产精品日韩精品| 黄色网在线播放| 日韩欧美国产系列| 日韩av在线天堂| 久久综合999| 杨幂毛片午夜性生毛片| 手机在线电影一区| 亚洲xxx视频| 1024在线看片你懂得| 精品视频www| 成人免费一级片| 亚洲欧美国产77777| 18深夜在线观看免费视频| 伊人成年综合电影网| 久久99精品久久久水蜜桃| 欧美xxxx做受欧美护士| 日韩中文综合网| 亚洲精品人妻无码| 欧美性少妇18aaaa视频| 麻豆视频免费在线播放| 国产乱子伦一区二区三区国色天香| 欧美成人精品免费| 国产成人手机高清在线观看网站| 成人免费网站在线看| sis001亚洲原创区| 国产一区二区三区在线播放免费观看| 国产女人爽到高潮a毛片| 午夜私人影院久久久久| av永久免费观看| 国产成人免费在线观看不卡| 久久无码高潮喷水| 自由日本语亚洲人高潮| 精品一区二区三区日本| 日韩一级特黄| 77777亚洲午夜久久多人| av在线天堂播放| 亚洲精品电影在线| 国产精品爽爽久久久久久| 亚洲444eee在线观看| 国产精品麻豆免费版现看视频| 成人免费的视频| av在线网址导航| 亚洲欧美大片| 欧美黄色免费网址| 日韩欧美视频专区| 国产视频99| 99久久这里有精品| 国产91网红主播在线观看| 中国av在线播放| 国产一区二区三区日韩欧美| 蜜桃av中文字幕| 欧美一区二区私人影院日本| 亚洲av无码精品一区二区| 亚洲国产视频直播| 欧美日韩午夜视频| 亚洲国产高清不卡| av黄色免费网站| 成人小视频免费观看| 91丝袜超薄交口足| 免费视频一区二区| 日韩在线第三页| 国产欧美91| 真实国产乱子伦对白视频| 久久国产电影| 日韩国产精品一区二区三区| 亚洲电影男人天堂| 精品麻豆av| 高清日韩中文字幕| 999视频在线免费观看| 96视频在线观看欧美| 国产精品久久久久久久久久久久久 | 日本久久综合| 蜜桃麻豆www久久国产精品| 一区二区三区高清在线观看| 成人在线视频福利| 亚洲电影二区| 成人午夜高潮视频| 日本免费成人| 国产日韩欧美在线播放| 成人网ww555视频免费看| 欧美做受高潮1| 中文在线资源| 欧洲s码亚洲m码精品一区| 丁香高清在线观看完整电影视频| 欧美大片va欧美在线播放| 黄色免费在线观看网站| 久久九九国产精品怡红院 | 天天操天天射天天舔| 精品成人私密视频| 亚洲国产www| 精品国产乱码久久久久久图片| 精品人妻一区二区三区四区不卡| 欧美一区二区成人6969| jlzzjlzz亚洲女人18| 精品日韩av一区二区| 国产 欧美 自拍| 亚洲国产精品热久久| 婷婷伊人综合中文字幕| 日韩激情av在线播放| 欧美巨乳在线| 中文字幕欧美精品在线| 里番在线观看网站| 欧美区在线播放| 极品视频在线| 国产99久久久欧美黑人| 麻豆精品蜜桃| 91免费看国产| 久本草在线中文字幕亚洲| 精品在线不卡| 久久一区二区三区喷水| 日韩不卡一二区| 99精品福利视频| 看欧美ab黄色大片视频免费| 久久av老司机精品网站导航| 成人三级做爰av| 99精品黄色片免费大全| 中文字幕在线观看免费高清| 亚洲欧美在线视频观看| 妺妺窝人体色www聚色窝仙踪 | 国产精伦一区二区三区| 久久久久久久免费| 水蜜桃久久夜色精品一区| 国产成人一二三区| 麻豆精品网站| japan高清日本乱xxxxx| 久久亚洲精品小早川怜子| 精品国产国产综合精品| 午夜激情久久久| 一区二区三区黄| 日韩av在线免费观看| 色影院视频在线| 97在线视频观看| 亚洲高清影院| 欧美xxxx黑人又粗又长密月| 91嫩草亚洲精品| 日韩国产一级片| 久久中文精品| 杨幂一区二区国产精品| 久久久久一区二区三区四区| 国产av 一区二区三区| 欧美性色视频在线| 国产91免费在线观看| 中文字幕日本欧美| 英国三级经典在线观看| 91在线网站视频| 欧美三级三级| 国产特级黄色大片| 国产乱对白刺激视频不卡| 蜜乳av中文字幕| 欧美日韩美女在线| 性猛交xxxx乱大交孕妇印度| 在线观看免费高清视频97| 国产免费拔擦拔擦8x在线播放 | 97视频国产在线| 国产精品视频一区二区三区综合 | 天天做天天爱综合| 久久久久久香蕉| 99国产一区二区三精品乱码| 日本天堂中文字幕| 欧美蜜桃一区二区三区| 九色视频在线观看免费播放| 91精品国产成人| 超碰成人福利| 成人国产在线看| 国产在线精品不卡| 国产一区在线观看免费| 色妹子一区二区| 你懂的在线观看| 欧美在线播放视频| 色狼人综合干| 国产精品97在线| 久久青草欧美一区二区三区| 久久精品免费av| 精品久久久久久久久久久久久久久久久| 免费黄色在线| 国产精品一区二区三区免费视频| 国产中文精品久高清在线不| 日韩av片在线看| 久久亚洲二区三区| 高潮毛片又色又爽免费 | 欧美三级三级三级| 成人高清网站| 国产精品亚洲第一区| 奇米影视亚洲| 亚洲精品手机在线观看| 国产精品三级在线观看| 在线黄色av网站| www.亚洲人.com| 国产精品一区二区三区四区在线观看| 综合久久国产| 国产精品一区免费在线观看| 手机在线免费看片| 日韩小视频在线观看专区| 中文字幕有码在线视频| 高清不卡一区二区三区| 在线观看视频免费一区二区三区| 性农村xxxxx小树林| 午夜免费久久看| 男男激情在线| 国产精品综合不卡av| 五月久久久综合一区二区小说| 国产成人强伦免费视频网站| 一个色综合网站| 偷拍25位美女撒尿视频在线观看| 国产成人97精品免费看片| 成人亚洲一区| 青青草精品在线| 亚洲成人一区二区| 免费资源在线观看| 成人a在线视频| 亚洲激情成人| 伊人网伊人影院| 91精品国产欧美一区二区18 | 欧美体内she精高潮| 亚洲一区二区三区四区五区黄 | 国产日产精品一区二区三区| 亚洲性猛交xxxxwww| 成人在线日韩| 日本韩国欧美在线观看| 欧美激情一区三区| 北条麻妃一二三区| 热久久免费视频精品| 日韩激情图片| 中文字幕一区二区三区乱码不卡| 色婷婷久久久久swag精品| 免费黄色电影在线观看| 国产精品一区二区三区精品| 老司机精品视频网站| 色欲一区二区三区精品a片| 亚洲黄色成人网| 欧美成人家庭影院| 分分操这里只有精品| 中文字幕成人av| 后进极品白嫩翘臀在线视频| 国产精品第10页| 国产在线成人| 成人做爰视频网站| 精品视频久久久久久久|