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

有關Android插件化的一些總結思考

移動開發 Android
最近幾年移動開發業界興起了「 插件化技術 」的旋風,各個大廠都推出了自己的插件化框架,各種開源框架都評價自身功能優越性,令人目不暇接。隨著公司業務快速發展,項目增多,開發資源卻有限,如何能在有限資源內滿足需求和項目的增長,同時又能快速響應問題和迭代新需求,這就是一個矛盾點。

最近幾年移動開發業界興起了「 插件化技術 」的旋風,各個大廠都推出了自己的插件化框架,各種開源框架都評價自身功能優越性,令人目不暇接。隨著公司業務快速發展,項目增多,開發資源卻有限,如何能在有限資源內滿足需求和項目的增長,同時又能快速響應問題和迭代新需求,這就是一個矛盾點。此時,插件化技術正好風生水起,去了解各個主流框架實現思路,看看能對目前工作是否有幫助,是很有必要的。

主要分為以下幾個部分

  • 插件化介紹
  • 入門知識
  • 實現原理
  • 主流框架
  • 實戰
  • 小結

插件化介紹

百度百科里是這么定義插件的:「 是一種遵循一定規范的應用程序接口編寫出來的程序,只能運行在程序規定的系統平臺下,而不能脫離指定的平臺單獨運行。」,也就是說,插件可以提供一種動態擴展能力,使得應用程序在運行時加載原本不屬于該應用的功能,并且做到動態更新和替換。

那么在 Android 中,何為「 插件化 」,顧名思義,就是把一些核心復雜依賴度高的業務模塊封裝成獨立的插件,然后根據不同業務需求進行不同組合,動態進行替換,可對插件進行管理、更新,后期對插件也可進行版本管理等操作。在插件化中有兩個概念需要講解下:

宿主

所謂宿主,就是需要能提供運行環境,給資源調用提供上下文環境,一般也就是我們主 APK ,要運行的應用,它作為應用的主工程所在,實現了一套插件的加載和管理的框架,插件都是依托于宿主的APK而存在的。

插件

插件可以想象成每個獨立的功能模塊封裝為一個小的 APK ,可以通過在線配置和更新實現插件 APK 在宿主 APK 中的上線和下線,以及動態更新等功能。

那么為何要使用插件化技術,它有何優勢,能給我們帶來什么樣好處,這里簡單列舉了以下幾點:

  • 讓用戶不用重新安裝 APK 就能升級應用功能,減少發版本頻率,增加用戶體驗。
  • 提供一種快速修復線上 BUG 和更新的能力。
  • 按需加載不同的模塊,實現靈活的功能配置,減少服務器對舊版本接口兼容壓力。
  • 模塊化、解耦合、并行開發、 65535 問題。

入門知識

首先我們要知道插件化技術是屬于比較復雜一個領域,復雜點在于它涉及知識點廣泛,不僅僅是上層做應用架構能力,還要求我們對 Android 系統底層知識需要有一定的認知,這里簡單羅列了其中會涉及的知識點:

 

首先,要介紹的是 Binder ,我們都知道 Android 多進程通信核心就是 Binder ,如果沒有它真的寸步難行。 Binder 涉及兩層技術,你可以認為它是一個中介者模式,在客戶端和服務器端之間, Binder 就起到中介的作用。如果要實現四大組件的插件化,就需要在 Binder 上做修改, Binder 服務端的內容沒辦法修改,只能改客戶端的代碼,而且四大組件的每個組件的客戶端都不一樣,這個就需要深入研究了。學習Binder的最好方式是 AIDL ,這方面在網上有很多資料,最簡單的方式就是自己寫個 aidl 文件自動生成一個 Java 類,然后去查看這個Java類的每個方法和變量,然后再去看四大組件,其實都是跟 AIDL 差不多的實現方式。

其次,是 App 打包的流程。代碼寫完了,執行一次打包操作,中途經歷了資源打包、 Dex 生成、簽名等過程。其中最重要的就是資源的打包,即 AAPT 這一步,如果宿主和插件的資源id沖突,一種解決辦法就是在這里做修改。

第三, App 在手機上的安裝流程也很重要。熟悉安裝流程不僅對插件化有幫助,在遇到安裝 Bug 的時候也非常重要。手機安裝 App 的時候,經常會有下載異常,提示資源包不能解析,這時需要知道安裝 App 的這段代碼在什么地方,這只是第一步。第二步需要知道, App 下載到本地后,具體要做哪些事情。手機有些目錄不能訪問, App 下載到本地之后,放到哪個目錄下,然后會生成哪些文件。插件化有個增量更新的概念,如何下載一個增量包,從本地具體哪個位置取出一個包,這個包的具體命名規則是什么,等等。這些細節都必須要清楚明白。

第四,是 App 的啟動流程。 Activity 啟動有幾種方式?一種是寫一個 startActivity ,第二種是點擊手機 App ,通過手機系統里的 Launcher 機制,啟動 App 里默認的 Activity 。通常, App 開發人員喜聞樂見的方式是第二種。那么第一種方式的啟動原理是什么呢?另外,啟動的時候,Main 函數在哪里?這個 Main 函數的位置很重要,我們可以對它所在的類做修改,從而實現插件化。

第五點更重要,做 Android 插件化需要控制兩個地方。首先是插件 Dex 的加載,如何把插件 Dex 中的類加載到內存?另外是資源加載的問題。插件可能是 Apk 也可能是 so 格式,不管哪一種,都不會生成 R.id ,從而沒辦法使用。這個問題有好幾種解決方案。一種是是重寫 Context 的 getAsset 、 getResource 之類的方法,偷換概念,讓插件讀取插件里的資源,但缺點就是宿主和插件的資源 id 會沖突,需要重寫 AAPT 。另一種是重寫 AMS中保存的插件列表,從而讓宿主和插件分別去加載各自的資源而不會沖突。第三種方法,就是打包后,執行一個腳本,修改生成包中資源id。

第六點,在實施插件化后,如何解決不同插件的開發人員的工作區問題。比如,插件1和插件2,需要分別下載哪些代碼,如何獨立運行?就像機票和火車票,如何只運行自己的插件,而不運行別人的插件?這是協同工作的問題。火車票和機票,這兩個 Android 團隊的各自工作區是不一樣的,這時候就要用到 Gradle 腳本了,每個項目分別有各自的倉庫,有各自不同的打包腳本,只需要把自己的插件跟宿主項目一起打包運行起來,而不用引入其他插件,還有更厲害的是,也可以把自己的插件當作一個 App 來打包并運行。

上面介紹了插件化的入門知識,一共六點,每一點都需要花大量時間去理解。否則,在面對插件化項目的時候,很多地方你會一頭霧水。而只要理解了這六點核心,一切可迎刃而解。

實現原理

在Android中應用插件化技術,其實也就是動態加載的過程,分為以下幾步:

  • 把可執行文件( .so/dex/jar/apk 等)拷貝到應用 APP 內部。
  • 加載可執行文件,更換靜態資源
  • 調用具體的方法執行業務邏輯

Android 項目中,動態加載技術按照加載的可執行文件的不同大致可以分為兩種:

  • 動態加載 .so 庫
  • 動態加載 dex/jar/apk文件(現在動態加載普遍說的是這種)

第一點, Android 中 NDK 中其實就使用了動態加載,動態加載 .so 庫并通過 JNI 調用其封裝好的方法。后者一般是由 C/C++ 編譯而成,運行在 Native 層,效率會比執行在虛擬機層的 Java 代碼高很多,所以 Android 中經常通過動態加載 .so 庫來完成一些對性能比較有需求的工作(比如 Bitmap 的解碼、圖片高斯模糊處理等)。此外,由于 .so 庫是由 C/C++ 編譯而來的,只能被反編譯成匯編代碼,相比中 dex 文件反編譯得到的 Smali 代碼更難被破解,因此 .so 庫也可以被用于安全領域。

其二,“基于 ClassLoader 的動態加載 dex/jar/apk 文件”,就是我們指在 Android 中 動態加載由 Java 代碼編譯而來的 dex 包并執行其中的代碼邏輯,這是常規 Android 開發比較少用到的一種技術,目前說的動態加載指的就是這種。

Android 項目中,所有 Java 代碼都會被編譯成 dex 文件,Android 應用運行時,就是通過執行 dex 文件里的業務代碼邏輯來工作的。使用動態加載技術可以在 Android 應用運行時加載外部的 dex 文件,而通過網絡下載新的 dex 文件并替換原有的 dex 文件就可以達到不安裝新 APK 文件就升級應用(改變代碼邏輯)的目的。

所以說,在 Android 中的 ClassLoader 機制主要用來加載 dex 文件,系統提供了兩個 API 可供選擇:

  • PathClassLoader:只能加載已經安裝到 Android 系統中的 APK 文件。因此不符合插件化的需求,不作考慮。
  • DexClassLoader:支持加載外部的 APK、Jar 或者 dex 文件,正好符合文件化的需求,所有的插件化方案都是使用 DexClassloader 來加載插件 APK 中的 .class文件的。

主流框架

在 Android 中實現插件化框架,需要解決的問題主要如下:

  • 資源和代碼的加載
  • Android 生命周期的管理和組件的注冊
  • 宿主 APK 和插件 APK 資源引用的沖突解決

下面分析幾個目前主流的開源框架,看看每個框架具體實現思路和優缺點。

DL 動態加載框架( 2014 年底)

是基于代理的方式實現插件框架,對 App 的表層做了處理,通過在 Manifest 中注冊代理組件,當啟動插件組件時,首先啟動一個代理組件,然后通過這個代理組件來構建,啟動插件組件。 需要按照一定的規則來開發插件 APK,插件中的組件需要實現經過改造后的 Activity、FragmentActivity、Service 等的子類。

優點如下:

  • 插件需要遵循一定的規則,因此安全方面可控制。
  • 方案簡單,適用于自身少量代碼的插件化改造。

缺點如下:

  • 不支持通過 This 調用組件的方法,需要通過 that 去調用。
  • 由于 APK 中的 Activity 沒有注冊,不支持隱式調用 APK 內部的 Activity。
  • 插件編寫和改造過程中,需要考慮兼容性問題比較多,聯調起來會比較費時費力。

DroidPlugin( 2015 年 8 月)

DroidPlugin 是 360 手機助手實現的一種插件化框架,它可以直接運行第三方的獨立 APK 文件,完全不需要對 APK 進行修改或安裝。一種新的插件機制,一種免安裝的運行機制,是一個沙箱(但是不完全的沙箱。就是對于使用者來說,并不知道他會把 apk 怎么樣), 是模塊化的基礎。

實現原理:

  • 共享進程:為android提供一個進程運行多個 apk 的機制,通過 API 欺騙機制瞞過系統。
  • 占坑:通過預先占坑的方式實現不用在 manifest 注冊,通過一帶多的方式實現服務管理。
  • Hook 機制:動態代理實現函數 hook ,Binder 代理繞過部分系統服務限制,IO 重定向(先獲取原始 Object –> Read ,然后動態代理 Hook Object 后–> Write 回去,達到瞞天過海的目的)。

插件 Host 的程序架構:

 

優點如下:

  • 支持 Android 四大組件,而且插件中的組件不需要在宿主 APK 中注冊。
  • 支持 Android 2.3 及以上系統,支持所有的系統 API。
  • 插件與插件之間,插件與宿主之間的代碼和資源完全隔閡。
  • 實現了進程管理,插件的空進程會被及時回收,占用內存低。

缺點如下:

  • 插件 APK 中不支持自定義資源的 Notification,通知欄限制。
  • 插件 APK 中無法注冊具有特殊的 IntentFilter 的四大組件。
  • 缺乏對 Native 層的 Hook 操作,對于某些帶有 Native 代碼的插件 APK 支持不友好,可能無法正常運行。
  • 由于插件與插件,插件與宿主之間的代碼完全隔離,因此,插件與插件,插件與宿主之間的通信只能通過 Android 系統級別的通信方式。
  • 安全性擔憂(可以修改,hook一些重要信息)。
  • 機型適配(不是所有機器上都能行,因為大量用反射相關,如果rom廠商深度定制了framework層,反射的方法或者類不在,容易插件運用失敗)

Small( 2015 年底)

Small 是一種實現輕巧的跨平臺插件化框架,基于“輕量、透明、極小化、跨平臺”的理念,實現原理有以下三點。

  • 動態加載類:我們知道插件化很多都從 DexClassLoader 類有個 DexPathList 清單,支持 dex/jar/zip/apk 文件格式,卻沒有支持 .so 文件格式,因此 Small 框架則是把 .so 文件包裝成 zip 文件格式,插入到 DexPathList 集合中,改寫動態加載的代碼。
  • 資源分段:由于 Android 資源的格式是 0xPPTTNNNN ,PP 是包 ID ,00-02 是屬于系統,7f 屬于應用程序,03-7e 則保留,可以在這個范圍內做文章 , TT 則是 Type 比如,attr 、layout 、string 等等,NNNN 則是資源全局 ID。那么這個框架則是對資源包進行重新打包,每個插件重新分配資源 ID ,這樣就保證了宿主和插件的資源不沖突。
  • 動態代理注冊:在 Android 中要使用四大組件,都是需要在 manifest 清單中注冊,這樣才可以使用,那如何在不注冊情況也能使用呢,這里就是用到動態代理機制進行 Hook ,在發送 AMS 之前用占坑的組件來欺騙系統,通過認證后,再把真正要調用的組件還原回來,達到瞞天過海目的。

架構圖:

 


Picture

優點如下:

  • 所有插件支持內置宿主包中。
  • 插件的編碼和資源文件的使用與普通開發應用沒有差別。
  • 通過設定 URI ,宿主以及 Native 應用插件,Web 插件,在線網頁等能夠方便進行通信。
  • 支持 Android 、 iOS 、和 Html5 ,三者可以通過同一套 Java 接口實現通信。

缺點如下:

  • 暫不支持 Service 的動態注冊,不過這個可以通過將 Service 預先注冊在宿主的 AndroidManifest.xml 文件中進行規避,因為 Service 的更新頻率通常非常低。

與其他主流框架的區別:

 

  1. DyLA  : Dynamic-load-apk          @singwhatiwanna   
  2. DiLA  : Direct-Load-apk           @FinalLody   
  3. APF   : Android-Plugin-Framework  @limpoxe   
  4. ACDD  : ACDD                      @bunnyblue   
  5. DyAPK : DynamicAPK                @TediWang   
  6. DPG   : DroidPlugin               @cmzy, 360 

功能

 

有關Android插件化的一些總結思考

透明度

 

有關Android插件化的一些總結思考

VirtualAPK (2017年 6 月 )

VirtualAPK 是滴滴開源的一套插件化框架,支持幾乎所有的 Android 特性,四大組件方面。

架構圖:

 

實現思路:

VirtualAPK 對插件沒有額外的約束,原生的 apk 即可作為插件。插件工程編譯生成 apk后,即可通過宿主 App 加載,每個插件 apk 被加載后,都會在宿主中創建一個單獨的 LoadedPlugin 對象。如下圖所示,通過這些 LoadedPlugin 對象,VirtualAPK 就可以管理插件并賦予插件新的意義,使其可以像手機中安裝過的 App 一樣運行。

  • 合并宿主和插件的ClassLoader 需要注意的是,插件中的類不可以和宿主重復
  • 合并插件和宿主的資源 重設插件資源的 packageId,將插件資源和宿主資源合并
  • 去除插件包對宿主的引用 構建時通過 Gradle 插件去除插件對宿主的代碼以及資源的引用

 

特性如下:

四大組件均不需要在宿主manifest中預注冊,每個組件都有完整的生命周期。

  • Activity:支持顯示和隱式調用,支持Activity的theme和LaunchMode,支持透明主題;
  • Service:支持顯示和隱式調用,支持Service的start、stop、bind和unbind,并支持跨進程bind插件中的Service;
  • Receiver:支持靜態注冊和動態注冊的Receiver;
  • ContentProvider:支持provider的所有操作,包括CRUD和call方法等,支持跨進程訪問插件中的Provider。
  • 自定義View:支持自定義 View,支持自定義屬性和style,支持動畫;
  • PendingIntent:支持PendingIntent以及和其相關的Alarm、Notification和AppWidget;
  • 支持插件Application以及插件manifest中的meta-data;
  • 支持插件中的so。

優秀的兼容性

  • 兼容市面上幾乎所有的Android手機,這一點已經在滴滴出行客戶端中得到驗證。
  • 資源方面適配小米、Vivo、Nubia 等,對未知機型采用自適應適配方案。
  • 極少的 Binder Hook,目前僅僅 hook了兩個Binder:AMS和IContentProvider,hook 過程做了充分的兼容性適配。
  • 插件運行邏輯和宿主隔離,確保框架的任何問題都不會影響宿主的正常運行。

入侵性極低

  • 插件開發等同于原生開發,四大組件無需繼承特定的基類;
  • 精簡的插件包,插件可以依賴宿主中的代碼和資源,也可以不依賴;
  • 插件的構建過程簡單,通過 Gradle 插件來完成插件的構建,整個過程對開發者透明。

如下是 VirtualAPK 和主流的插件化框架之間的對比。

 

有關Android插件化的一些總結思考

RePlugin (2017 年 7 月)

RePlugin是一套完整的、穩定的、適合全面使用的,占坑類插件化方案,由360手機衛士的RePlugin Team研發,也是業內首個提出”全面插件化“(全面特性、全面兼容、全面使用)的方案。

框架圖:

 

主要優勢有:

  • 極其靈活:主程序無需升級(無需在Manifest中預埋組件),即可支持新增的四大組件,甚至全新的插件
  • 非常穩定:Hook 點僅有一處(ClassLoader),無任何 Binder Hook!如此可做到其崩潰率僅為“萬分之一”,并完美兼容市面上近乎所有的 Android ROM。
  • 特性豐富:支持近乎所有在“單品”開發時的特性。包括靜態 Receiver、 Task-Affinity 坑位、自定義 Theme、進程坑位、AppCompat、DataBinding等。
  • 易于集成:無論插件還是主程序,只需“數行”就能完成接入。
  • 管理成熟:擁有成熟穩定的“插件管理方案”,支持插件安裝、升級、卸載、版本管理,甚至包括進程通訊、協議版本、安全校驗等。
  • 數億支撐:有 360 手機衛士龐大的數億用戶做支撐,三年多的殘酷驗證,確保App用到的方案是最穩定、最適合使用的。

實戰

主要是測試各個框架之間上手的容易度如何,并做不同對比,這邊寫了兩個 Demo 例子,一個是基于 Small 框架,一個基于 VirtualAPK 框架,從中能看出不同。

Small 實踐

要引用官方最新的版本,不然在宿主和插件合并build.gradle 的時候會出現一個 BUG,這是個坑位,注意行走。其次在模塊命名上要遵循一定的規則,比如業務模塊用 app.* ,公共庫模塊用 lib.* ,相當于包名 .app.,.lib. 。每次在插件中添加一個 activity 組件,都需要在宿主中配置路由,然后在重新編譯插件一遍,不然直接運行的話,在宿主中是找到新添加的 activity 組件,會報該組件沒在系統 manifest 中,所以每次新增或修改建議插件都重新編譯一遍。官方里說了,對于 Service 支持不太友好,就沒去實踐了。

VirtualAPK 實踐

有個坑需要注意的是構建環境,官方說明是要以下版本環境,Gradle 2.14.1 和 com.android.tools.build 2.1.3, 之前編譯的是用最新的Gradle版本,導致一直有問題,至于是否有其他問題,可以看官方文檔。

具體代碼

  • Small Demo :https://github.com/cr330326/MySmall
  • VirtualAPK Demo :https://github.com/cr330326/MyVirtualAPKDemo

小結

正如開頭所說,要實現插件化的框架,無非就是解決那典型的三個問題:插件代碼如何加載、插件中的組件生命周期如何管理、插件資源和宿主資源沖突怎么辦。每個框架針對這三個問題,都有不同的解決方案,同時呢,根據時間順序,后出來的框架往往都會吸收已經出的框架精髓,進而修復那些比較有里程碑意義框架的不足。但這些框架的核心思想都是用到了代理模式,有的在表面層進行代理,有的則在系統應用層進行代理,通過代理達到替換和瞞天過海,最終讓 Android 系統誤以為調用插件功能和調用原生開發的功能是一樣的,進而達到插件化和原生兼容編程的目的。

責任編輯:未麗燕 來源: 安卓巴士Android開發者門戶
相關推薦

2009-08-27 11:02:22

JavaScript事

2021-09-28 06:28:51

EF錯誤用法

2019-09-17 09:21:01

2018-06-14 09:35:35

2012-12-19 09:36:49

測試自動化測試

2020-02-03 16:03:36

疫情思考

2009-06-25 09:50:32

JSF

2022-02-18 09:05:54

Java序列化框架Record

2017-11-03 09:40:27

數據庫MySQLMHA

2017-07-04 13:59:28

Android模塊化

2011-11-30 15:57:18

2020-07-14 09:23:49

安全運營甲方乙方

2018-07-11 14:06:04

數據質量數據治理數據清洗

2017-12-21 07:54:07

2017-09-01 12:48:34

DevSecOps安全運維

2011-08-01 10:37:29

軟件項目管理

2021-06-10 10:02:19

優化緩存性能

2013-04-19 10:01:19

jQueryJS

2021-01-14 23:24:38

incaseforma蠕蟲病毒

2011-03-16 15:35:50

Debian
點贊
收藏

51CTO技術棧公眾號

澳门av一区二区三区| 无码精品视频一区二区三区| 97人人精品| 91精品久久久久久久99蜜桃| 久久综合久久久久| 快灬快灬一下爽蜜桃在线观看| 国产一二区在线观看| 欧美成免费一区二区视频| 国模娜娜一区二区三区| 涩涩av在线| 国产成人精品免费网站| 日本亚洲欧洲色| 破处女黄色一级片| 欧美美女在线| 精品国精品国产尤物美女| 91色国产在线| а√天堂中文资源在线bt| 宅男噜噜噜66国产日韩在线观看| 色悠悠国产精品| 中文在线永久免费观看| 欧美久久亚洲| 欧美无砖砖区免费| 国产一区二区网| 欧美a免费在线| 久久先锋影音av鲁色资源网| 99久久伊人精品影院| 老熟妇一区二区三区啪啪| 亚洲国产二区| 九色成人免费视频| 一本在线免费视频| 久久91精品| 337p日本欧洲亚洲大胆精品| 国产欧美激情视频| 亚洲电影有码| 欧美色图在线视频| 欧美激情视频免费看| caopo在线| 中文字幕日本不卡| 亚洲美女网站18| 蜜桃视频在线观看视频| bt7086福利一区国产| 97超碰资源| 国产强伦人妻毛片| 国产一区二区福利| 成人免费网站在线| 亚洲自拍偷拍另类| 免费成人av资源网| 国产精品高清在线观看| 区一区二在线观看| 美女爽到呻吟久久久久| 欧美一级视频免费在线观看| 国产第一页第二页| 极品av少妇一区二区| 欧美俄罗斯性视频| 麻豆视频在线观看| 国内精品福利| 97精品视频在线播放| 日韩无码精品一区二区三区| 在线日韩av| 国产91精品高潮白浆喷水| 成人精品在线看| 久久久久久久高潮| 国产精品va在线播放| 国产裸体美女永久免费无遮挡| 日本怡春院一区二区| 国产精品久久久久久久7电影| 一二三区免费视频| 美日韩一区二区三区| 成人免费网站在线看| 99热这里只有精品99| 国产成人av电影在线播放| 国产精品区一区二区三在线播放 | 精品免费日韩av| 精品人妻一区二区免费| 神马日本精品| 原创国产精品91| 国产福利视频网站| 亚洲性图久久| 日韩av免费在线| 亚洲一区二区三区高清视频| 国产精品一级黄| 好吊色欧美一区二区三区视频| 全色精品综合影院| 中文字幕亚洲区| 欧美大黑帍在线播放| 欧美电影网站| 51久久夜色精品国产麻豆| 国产吃瓜黑料一区二区| 欧美一级色片| 日韩午夜在线视频| 日本一级淫片色费放| 日韩电影在线免费看| 亚洲iv一区二区三区| 亚洲 精品 综合 精品 自拍| 国产精品丝袜久久久久久app| 穿情趣内衣被c到高潮视频| 爱啪啪综合导航| 精品视频在线免费观看| 又大又长粗又爽又黄少妇视频| 婷婷亚洲成人| 欧美日本高清一区| 中文在线免费观看| 成人免费av网站| 正在播放国产精品| 制服丝袜专区在线| 91麻豆精品国产91久久久久久久久 | 国产911在线观看| 欧美亚洲日本精品| 欧美一级高清片在线观看| 尤物视频最新网址| 韩日精品在线| 成人中心免费视频| 国产视频三级在线观看播放| 一二三四区精品视频| jizz欧美激情18| 日韩mv欧美mv国产网站| 欧美日韩成人精品| 在线观看视频中文字幕| 久久免费的精品国产v∧| 亚洲高潮无码久久| 国产成人77亚洲精品www| 日韩精品久久久久| 日韩激情一区二区三区| 国产精品亚洲一区二区三区在线| 视频一区二区在线观看| 中老年在线免费视频| 精品女同一区二区| 婷婷久久综合网| 免费的成人av| 神马影院我不卡| 美女福利一区二区三区| 亚洲国产日韩精品在线| 免费中文字幕在线| 激情欧美一区二区三区在线观看| 日本精品一区二区三区视频| 性xxxxfreexxxxx欧美丶| 亚洲精品一区二区三区福利 | 国产小视频在线观看| 婷婷中文字幕一区三区| 好吊操视频这里只有精品| 久久久久久久久久久久久久| 国产日韩精品入口| 888av在线| 精品视频在线免费| 特级西西人体高清大胆| 日本美女一区二区三区视频| 日韩福利二区| 国产成人精品一区二区三区视频 | 91精品国产综合久久久久久久久久 | 亚洲高清999| 美女福利精品视频| 亚洲大尺度视频| 一区二区三区视频在线观看| 亚洲妇女无套内射精| 黑丝一区二区三区| 国产欧美一区二区在线播放| 免费看男女www网站入口在线| 亚洲精品suv精品一区二区| 国产福利久久久| 99国产精品国产精品久久| 欧美在线观看成人| 激情婷婷综合| 91精品国产综合久久久久久久久 | 91chinesevideo永久地址| 偷拍精品一区二区三区| 日韩欧美国产网站| 波多野结衣一二三四区| 国内精品视频666| 屁屁影院ccyy国产第一页| 岛国av一区| 青青久久av北条麻妃海外网| 91大神xh98hx在线播放| 91精品国产91久久综合桃花| 久久久久亚洲天堂| 久久嫩草精品久久久精品| 波多野结衣作品集| 亚洲乱码免费伦视频| 国产伦理一区二区三区| 欧美极品免费| 毛片精品免费在线观看| 色综合免费视频| 欧美日韩久久久久久| 美国黄色小视频| 久久蜜桃av一区二区天堂 | 日本韩国欧美中文字幕| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 日韩毛片一二三区| 中文字幕天堂网| 日本成人中文字幕在线视频 | 91成人精品一区二区| 国产伦精品一区二区三区免费 | 婷婷五月色综合| 一区二区三区四区高清视频 | 日韩中文在线中文网在线观看| www.成人精品| 欧美性猛交一区二区三区精品| 国产极品国产极品| 国产亚洲一二三区| 18禁一区二区三区| 全部av―极品视觉盛宴亚洲| 男人添女人荫蒂免费视频| 国产一区二区区别| 国产日韩三区| 成人综合日日夜夜| 国产成人一区二区在线| 羞羞电影在线观看www| 夜夜嗨av一区二区三区免费区 | 中文亚洲视频在线| 日本xxxx人| 91精品免费在线| 高潮毛片又色又爽免费| 亚洲第一成年网| 午夜国产小视频| 久久精品亚洲一区二区三区浴池| 在线播放av网址| 久久99久久99小草精品免视看| jizzjizz国产精品喷水| 欧美黄污视频| 中文字幕剧情在线观看一区| 国产一区二区精品福利地址| 极品尤物一区二区三区| 精品国产乱码久久久久久樱花| 国产成人精品亚洲精品| 久草免费在线视频| 久久久亚洲欧洲日产国码aⅴ| 国产理论在线观看| 色综合伊人色综合网站| 国产中文在线| 亚洲人成电影网站色…| 污污的视频网站在线观看| 日韩欧美激情一区| 国产哺乳奶水91在线播放| 欧美日韩精品一区二区三区四区| 国产免费a视频| 日本韩国欧美一区二区三区| 在线观看亚洲天堂| 欧美视频在线免费| 99久久精品国产亚洲| 精品久久久久国产| 国产一级做a爱片久久毛片a| 亚洲国产成人av好男人在线观看| 九九热国产精品视频| 亚洲免费av高清| 永久看片925tv| 一区二区成人在线视频| 久久国产露脸精品国产| 亚洲无线码一区二区三区| 国产无码精品视频| 亚洲福利视频一区| 天堂网一区二区三区| 欧美日韩国产一区中文午夜| 麻豆精品久久久久久久99蜜桃| 色综合久久中文字幕| 亚洲成人av网址| 欧美日高清视频| 99精品在线视频观看| 精品日韩99亚洲| 手机看片国产1024| 亚洲人精品午夜在线观看| 二区在线观看| 久久久91精品国产| 图片区小说区亚洲| 26uuu另类亚洲欧美日本一| 天天综合网站| 国产日韩在线看| aiai久久| 免费在线一区二区| 色婷婷综合网| 国产a级黄色大片| 一区二区三区国产盗摄| 五月婷婷深爱五月| 国产一区999| 欧美成人三级伦在线观看| 国产日韩欧美在线一区| 992在线观看| 亚洲成人手机在线| 国产精品xxxxxx| 欧美一级二级在线观看| 五十路在线视频| 精品国产美女在线| 91九色在线看| 国产精品男人的天堂| 亚洲乱码一区| 日韩精品国内| 狠久久av成人天堂| 黄色三级视频片| 国产盗摄视频一区二区三区| 色无极影院亚洲| 一区二区三区丝袜| 波多野结衣高清在线| 欧美成人aa大片| a视频网址在线观看| 午夜精品在线观看| 国产精品亚洲四区在线观看| 欧美精彩一区二区三区| 亚洲色图插插| 男女曰b免费视频| 国产v日产∨综合v精品视频| 国产jjizz一区二区三区视频| 亚洲精品菠萝久久久久久久| 天天干天天操天天爱| 日韩欧美一卡二卡| 一级毛片视频在线观看| 2023亚洲男人天堂| 日韩中文字幕一区二区高清99| 日本精品一区| 日韩视频不卡| 国产老头和老头xxxx×| 国产精品视频在线看| 天天操天天摸天天干| 欧美一区二区免费观在线| 番号在线播放| 啪一啪鲁一鲁2019在线视频| 日韩成人在线观看视频| 图片区小说区区亚洲五月| 午夜在线精品| 精品国产av色一区二区深夜久久| 亚洲女同ⅹxx女同tv| 中日韩av在线| 亚洲男人天堂2024| 不卡视频观看| 成人动漫在线视频| 亚洲精品中文字幕乱码| 亚洲18在线看污www麻豆| 国产欧美一区二区三区鸳鸯浴 | 69夜色精品国产69乱| 日韩欧美在线视频日韩欧美在线视频| 国产91免费在线观看| 欧美大奶子在线| 成人精品在线| 国产a级片免费看| 另类人妖一区二区av| 国产精品天天干| 日本道色综合久久| 激情小视频在线| 国产成人拍精品视频午夜网站| 婷婷综合福利| 波多野结衣作品集| 国产三级精品视频| www.五月婷婷.com| 夜夜嗨av一区二区三区免费区 | 黄色三级生活片| 91国在线观看| аⅴ资源新版在线天堂| 国产精品免费一区豆花| 日韩精品永久网址| 黄色永久免费网站| 国产精品电影院| 91丨porny丨在线中文 | 亚洲第一精品久久忘忧草社区| 国产美女一区视频| 国产欧美日韩综合精品二区| 亚洲美女91| 手机在线看片日韩| 一本久久a久久免费精品不卡| 九色视频在线播放| 国产精品一区二区三区在线播放| 999久久久国产精品| 韩国一区二区在线播放| 一个色综合av| 色吊丝在线永久观看最新版本| 日韩免费观看高清| 不卡日本视频| 亚洲制服中文字幕| 亚洲国产日韩一级| 深夜福利视频一区| 国产精品高潮粉嫩av| 我不卡手机影院| 国产性猛交96| 色综合久久综合中文综合网| 91在线品视觉盛宴免费| 91欧美精品成人综合在线观看| 国产一区激情| 非洲一级黄色片| 欧美一区二区三区四区高清| 春色校园综合激情亚洲| 日韩精品电影网站| 粉嫩av亚洲一区二区图片| 91porny在线| 日韩亚洲在线观看| 国产精品毛片av| 色悠悠久久综合网| 一区二区三区国产精品| 男同在线观看| 亚洲综合中文字幕68页| 久久国产免费| www日韩在线| 亚洲欧美国产va在线影院| 国产日韩在线观看视频| 男人天堂网视频| 亚洲婷婷国产精品电影人久久| 欧美一区二区三区激情| 国产精品日韩av| 在线日韩视频| 国产中文av在线| 亚洲欧美综合精品久久成人| 精品亚洲二区| 精品久久久久久无码国产| 亚洲男人天堂av网| wwwww在线观看免费视频|