久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

App瘦身最佳实践(分析了微信、淘宝、微博图片文件的放法)

發布時間:2023/12/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 App瘦身最佳实践(分析了微信、淘宝、微博图片文件的放法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文會不定期更新,推薦watch下項目。如果喜歡請star,如果覺得有紕漏請提交issue,如果你有更好的點子可以提交pull request。
本文的示例代碼主要是基于作者的經驗來編寫的,若你有其他的技巧和方法可以參與進來一起完善這篇文章。

本文固定連接:https://github.com/tianzhijiexian/Android-Best-Practices

目標

業務方和開發都希望app盡量的小,本文會給出多個實用性的技巧來幫助開發者進行app的瘦身工作。瘦身和減負雖好,但需要注意瘦身對于項目可維護性的影響,建議根據自身的項目進行技巧的選取。

分析app組成結構

做瘦身之前一定要了解自己app的組成結構,然后要有針對性的進行優化,并且要逐步記錄比對,這樣才能更好的完成此項工作。目前as的2.2預覽版中已經有了apk分析器,功能相當強大,此外你還可以利用nimbledroid來分析apk。nimbledroid是一個強大的工具,推薦一試。


image_1ar7h642m1v52g0p1r5c4fo1idc4e.png-79.1kB

我們都知道apk是由:

  • asserts
  • lib
  • res
  • dex
  • META-INF
  • androidManifest

這幾個部分構成的。下面我會利用as的分析工具,以微信、微博、淘寶為例進行講述。


image_1ar5097i31eqm12kp1ndlbilos59.png-36.3kB

開始分析后幾秒鐘就能輸出結果,你還可以看到具體類目占的百分比,清晰明了。旁邊的“對比”按鈕提供了diff的功能,讓你可以方便的進行apk優化前后的對比,簡直利器。


image_1ar50k0hl4ek1b8k8fd14bjg9d13.png-63.8kB
image_1ar50n9r11tha15la1gpi1uqs19d81t.png-90.8kB

assets

assets目錄可以存放一些配置文件或資源文件,比如webview的本地html,react native的jsbundle等,微信的整個assets占用了13.4M。如果你的應用對本地資源要求很少的話,這個文件應該不會太大。


image_1ar50vjva119s1abt9it64n1pbfm.png-120.2kB

lib

lib目錄下會有各種so文件,分析器會檢查出項目自己的so和各種庫的so。微博和微信一樣只支持了arm一個平臺,淘寶支持了arm和x86兩個平臺。


image_1ar8g77ucuj7ffo14hs15a1lknm.png-36.4kB

淘寶:


image_1ar8gsi62hbg15711m1l1l1816oo2a.png-23.6kB

resources.arsc

這個文件是編譯后的二進制資源文件,里面是id-name-value的一個map。因為微信做了資源的混淆,所以這里可以看到資源名稱都是不可讀的。


image_1ar50ru80tkj165u1v5g90j1tte9.png-133.3kB

索性放個微博的圖,易于大家理解:


image_1ar8ggv1q4ac6m100pd4r7uo1g.png-80.1kB

META-INF

META-INF目錄下存放的是簽名信息,用來保證apk包的完整性和系統的安全性,幫助用戶避免安裝來歷不明的盜版apk。


image_1ar8gijsiudo1h99lc89leiic1t.png-28kB

res

res目錄存放的是資源文件。包括圖片、字符串。raw文件夾下面是音頻文件,各種xml文件等等。因為微信做了資源混淆,圖片名字都不可讀了。


image_1ar5143g519urnco1tbt2f3158k1j.png-35.6kB

微博就沒有做資源混淆,所以可讀性較好:


image_1ar8gefrd1anu1q5b5h170d1rie13.png-57.3kB

dex

dex文件是java代碼打包后的字節碼,一個dex文件最多只支持65536個方法,這也是為什么微信有了三個dex文件的原因。


image_1ar8g2r9keg21dn1s8grcur7v9.png-5.1kB

因為dex分包是不均勻的,你可以理解為裝箱,一個箱子的大小是固定的,但你代碼的量是不確定的,微信把前兩個箱子裝滿了,最后還剩了2m多的代碼,這些代碼也占用了一個箱子,最終產生了上圖不均勻的結果。

現在,我們已經知道了apk中各個文件的大小和它們占的比例,下面就可以開始針對性的進行優化了。

優化assets

assets中會存放資源文件,這個目錄中各個app存放的內容都有所不同,所以優化也比較難。自從引入RN以來,這個目錄下還會有jsbundle的信息。如果你有地址選擇的功能,這里還會存放地址的映射文件(可參考全名k歌)。對于這塊的資源,as是不會進行主動的刪減的,所以一切都是需要靠開發者進行手動管理的。

全名k歌中的bundle文件:


image_1arn9rc731t40m3kgsa1md11ohg3u.png-126.1kB

刪除無用字體

中文字體是相當大的,我一直不建議將字體文件隨意丟棄到assets中。有時候一個小功能急著上,開發者為了追求速度,可以先放在這里圖省事。但一定要知道這個隱患,并且一定要多和產品核對功能的必要性。此外,對于有些只會用在logo中的字體,我推薦將字體文件進行刪減處理。
FontZip是一個字體提取工具,readme中寫到:

經過測試,已經把項目5MB的藝術字體,按需求提取后,占用只有20KB,并且可正常使用。


gif2 (1).gif-204.5kB

減少icon-font的使用

icon-font和svg都能完成一些icon的展示,但因為icon-font在assets中難以管理,并且功能和svg有所重疊,所以我建議減少icon-font的使用,利用svg進行代替,畢竟一個很小的icon-font也比svg大呢。我給出一個提供各種格式icon的網站,方便大家進行測試:https://icomoon.io/app/


image_1ara1tf2ucmeetq14v510a21fob1d.png-16.1kB
image_1ara1mtufm781bbs1khag1k21ag.png-22.2kB
  • svg:549字節
  • png:375字節(單一分辨率)
  • ion-font:1.1kb

動態下載資源

字體、js代碼這樣的資源能動態下載的就做動態下載,雖然這樣會有出錯的可能性,復雜度也會提升,但這個對于app的瘦身和用戶來說是有長遠的好處的。如果你用了RN,你就可以在app運行時動態去拉取最新的代碼,將圖片和js代碼一并下載后解壓使用。

壓縮資源文件

有些資源文件是必須要隨著app一并發布的,對于這樣的文件,可以采用壓縮存儲的方式,在需要資源的時候將其解壓使用,下面就是解壓zip文件的代碼:

public static void unzipFile(File zipFile, String destination) throws IOException {FileInputStream fileStream = null;BufferedInputStream bufferedStream = null;ZipInputStream zipStream = null;try {fileStream = new FileInputStream(zipFile);bufferedStream = new BufferedInputStream(fileStream);zipStream = new ZipInputStream(bufferedStream);ZipEntry entry;File destinationFolder = new File(destination);if (destinationFolder.exists()) {deleteDirectory(destinationFolder);}destinationFolder.mkdirs();byte[] buffer = new byte[WRITE_BUFFER_SIZE];while ((entry = zipStream.getNextEntry()) != null) {String fileName = entry.getName();File file = new File(destinationFolder, fileName);if (entry.isDirectory()) {file.mkdirs();} else {File parent = file.getParentFile();if (!parent.exists()) {parent.mkdirs();}FileOutputStream fout = new FileOutputStream(file);try {int numBytesRead;while ((numBytesRead = zipStream.read(buffer)) != -1) {fout.write(buffer, 0, numBytesRead);}} finally {fout.close();}}long time = entry.getTime();if (time > 0) {file.setLastModified(time);}}} finally {try {if (zipStream != null) {zipStream.close();}if (bufferedStream != null) {bufferedStream.close();}if (fileStream != null) {fileStream.close();}} catch (IOException e) {e.printStackTrace();}}}

全名k歌中的assets目錄下我就發現了大量的zip文件:


image_1arn9mkkmm061j631b3f1ag7a3i3h.png-26.5kB

android上也有一個7z庫幫助我們方便的使用7z。這個庫我目前沒用到,有需求的同學可以嘗試一下。

優化lib

配置abiFilters

一個硬件設備對應一個架構(mips、arm或者x86),只保留與設備架構相關的庫文件夾(主流的架構都是arm的,mips屬于小眾,默認也是支持arm的so的,但x86的不支持)可以大大降低lib文件夾的大小。配置方式也十分簡單,直接配置abiFilters即可:

defaultConfig {versionCode 1versionName '1.0.0'renderscriptTargetApi 23renderscriptSupportModeEnabled true// http://stackoverflow.com/questions/30794584/exclude-jnilibs-folder-from-production-apkndk {abiFilters "armeabi", "armeabi-v7a" ,"x86"} }

之后生成的apk中就會排出多余的平臺文件了。armeabi就不用說了,這個是必須包含的,v7是一個圖形加強版本,x86是英特爾平臺的支持庫。

官方例子:


image_1arsrvqedh49dju1s7ulkf13du13.png-61.3kB

分析用戶手機的cpu

我們在舍棄so之前需要進行用戶cpu型號的統計,這樣你才能放心大膽的進行操作。我先是花了幾個版本的時間統計了用戶的cpu型號,然后排除了沒有或少量用戶才會用到的so,以達到瘦身的目的。

@NonNull public static String getCpuName() {String name = getCpuName1();if (TextUtils.isEmpty(name)) {name = getCpuName2();if (TextUtils.isEmpty(name)) {name = "unknown";}}return name; }private static String getCpuName1() {String[] abiArr;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {abiArr = Build.SUPPORTED_ABIS;} else {abiArr = new String[]{Build.CPU_ABI, Build.CPU_ABI2};}StringBuilder abiStr = new StringBuilder();for (String abi : abiArr) {abiStr.append(abi);abiStr.append(',');}return abiStr.toString(); }private static String getCpuName2() {try {FileReader e = new FileReader("/proc/cpuinfo");BufferedReader br = new BufferedReader(e);String text = br.readLine();String[] array = text.split(":\\s+", 2);e.close();br.close();return array[1];} catch (IOException var4) {var4.printStackTrace();return null;} }

注意:

  • 如果你和我一樣用到了renderscript那么你必須包含v7,否則會出現模糊異常的問題。
  • 如果你用了RN,那么對于x86需要謹慎的保留,否則可能會出現用戶找不到so而崩潰的情況。畢竟rn是一個全局的東西,稍有不慎就可能會出現開機崩的情況。
  • so這個東西還是比較危險的,我們雖然可以通過統計cpu型號來降低風險,但我還是推薦發布app前走一遍大量機型的云測,通過云測平臺把風險進一步降低。
  • 小廠的項目可能會舍棄一些so,但隨著公司規模的增大,你未來仍舊要重復考慮這個問題。所以我推薦在崩潰系統中上傳用戶cpu型號的信息,這樣我們就可以在第一時間知道因找不到so引起的崩潰量,至于是否需要增加so就看問題的嚴重程度了。
  • 避免復制so

    so有個常年大坑。在Android 6.0之前,so文件會壓縮到apk中。系統在安裝應用的時候,會把so文件解壓到data分區,這樣同一個so文件會有兩份存在,一個在apk里,一個在data中。這也導致多占用了一倍的空間,而且會出現各種詭異的錯誤。這個策略雖然和apk的瘦身無關,但它和app安裝在用戶手機中的大小有關,因此我們也是需要多多留意的。

    Starting from Android Studio 2.2 Preview 2 and newest build tools, the build process will automatically store native libraries uncompressed and page aligned in the APK.

    在6.0+中,可以通過如下的方式進行申明:

    <applicationandroid:extractNativeLibs=”false”... >

    如果想了解更多信息或者想知道這種配置的限制,可以瀏覽下SmallerAPK(8)。

    優化resources.arsc

    resources.arsc中存放了一個對應關系:

    idnamedefaultv11
    0x7f090002PopupAnimation@ref/0x7f040042, @ref/0x7f040041

    我們在程序運行的時候肯定要經常用到id,因此它在安裝之后仍需要被頻繁的讀取。如果將這個文件進行壓縮,在每次讀取前系統都必須進行解壓的操作,這就會有一些性能和內存的開銷,綜合考慮下這是得不償失的。

    刪除無用的資源映射

    resources.arsc的正確瘦身方式是刪除不必要的string entry,你可以借助 android-arscblamer 來檢查出可以優化的部分,比如一些空的引用。

    進行資源名稱混淆

    微信團隊開源了一個資源混淆工具,AndResGuard。它將資源的名稱進行了混淆,所以可以用它對resources.arsc進行優化,只是具體優化效果與編碼方式、id數量、平均減少命名長度有關。

    表1:

    idnamedefaultv11
    0x7f090001Android@ref/0x7f040042, @ref/0x7f040041
    0x7f090002ios@ref/0x7f040042, @ref/0x7f040041
    0x7f090003Windows Phone@ref/0x7f040042, @ref/0x7f040041

    表2:

    idnamedefaultv11
    0x7f090001a@ref/0x7f040042, @ref/0x7f040041
    0x7f090002b@ref/0x7f040042, @ref/0x7f040041
    0x7f090003c@ref/0x7f040042, @ref/0x7f040041

    我們一眼就可以知道表2肯定比表1存儲的字符要小,所以整個文件的大小肯定也要小一些。

    關于AndResGuard

    這個壓縮工具其實就是一個task,使用也十分簡單,具體的用法請參考中文文檔。

    原理介紹:安裝包立減1M--微信Android資源混淆打包工具

    andResGuard {mappingFile = nulluse7zip = trueuseSign = truekeepRoot = falsewhiteList = [//for your icon"R.drawable.icon",//for fabric"R.string.com.crashlytics.*",//for umeng update"R.string.umeng*","R.string.UM*","R.layout.umeng*","R.drawable.umeng*",//umeng share for sina"R.drawable.sina*"]compressFilePattern = ["*.png","*.jpg","*.jpeg","*.gif","resources.arsc"]sevenzip {artifact = 'com.tencent.mm:SevenZip:1.1.9'//path = "/usr/local/bin/7za"} }

    使用這個工具的時候需要注意一些坑,像友盟這種喜歡用反射獲取資源的SDK就是一個坑(友盟的SDK就是坑王)!對于app啟動圖標這樣的icon可以不做混淆,推薦將其放入白名單里。

    優化META-INF

    META-INF文件夾中有三個文件,分別是MANIFEST.MF、CERT.SF、CERT.RSA。下面我將會列出簡要的分析,如果你希望更詳盡的了解原理,可以查看《Android APK 簽名文件MANIFEST.MF、CERT.SF、CERT.RSA分析》。

    MANIFEST.MF


    image_1arn2sdp8ip3cj31j9m1vofcajm.png-81.6kB

    每一個資源文件(res開頭)下面都有一個SHA1-Digest的值。這個值為該文件SHA-1值進行base64編碼后的結果。
    如果要探究原理,可以看下SignApk.java。這個類中有一段main方法:

    public static void main(String[] args) {//...// MANIFEST.MFManifest manifest = addDigestsToManifest(inputJar);je = new JarEntry(JarFile.MANIFEST_NAME);je.setTime(timestamp);outputJar.putNextEntry(je);manifest.write(outputJar);//... } private static void writeSignatureFile(Manifest manifest, OutputStream out)throws IOException, GeneralSecurityException {Manifest sf = new Manifest();Attributes main = sf.getMainAttributes();main.putValue("Signature-Version", "1.0");main.putValue("Created-By", "1.0 (Android SignApk)");BASE64Encoder base64 = new BASE64Encoder();MessageDigest md = MessageDigest.getInstance("SHA1");PrintStream print = new PrintStream(new DigestOutputStream(new ByteArrayOutputStream(), md),true, "UTF-8");// Digest of the entire manifestmanifest.write(print);print.flush();main.putValue("SHA1-Digest-Manifest", base64.encode(md.digest()));Map<String, Attributes> entries = manifest.getEntries();for (Map.Entry<String, Attributes> entry : entries.entrySet()) {// Digest of the manifest stanza for this entry.print.print("Name: " + entry.getKey() + "\r\n");for (Map.Entry<Object, Object> att : entry.getValue().entrySet()) {print.print(att.getKey() + ": " + att.getValue() + "\r\n");}print.print("\r\n");print.flush();Attributes sfAttr = new Attributes();sfAttr.putValue("SHA1-Digest", base64.encode(md.digest()));sf.getEntries().put(entry.getKey(), sfAttr);}sf.write(out); }

    通過代碼我們可以發現SHA1-Digest-Manifest是MANIFEST.MF文件的SHA1并base64編碼的結果。

    CERT.SF


    image_1arn41udjrb91fku103b193a2qe13.png-68.3kB

    這里有一項SHA1-Digest-Manifest的值,這個值就是MANIFEST.MF文件的SHA-1并base64編碼后的值。后面幾項的值是對MANIFEST.MF文件中的每項再次SHA1并base64編碼后的值。所以你會看到在manifest.mf中的資源名稱在這里也出現了,比如abc_btn_check_material這個系統資源文件就出現了兩次。

    MANIFEST.MF:


    image_1arn47aeq15qc40910rt1u4cvm11g.png-39.3kB

    CERT.SF


    image_1arn4bje01q921ih1plv15te1n871t.png-44kB

    前者是:4XHnecusACTIgtImUjC7bQ9HNM8=,后者是YFDDnTUd6St4932sE/Xk6H0HMoc=。如果你把前一個文件打開在后面加上\n\r,然后進行編碼,你就會得到CERT.SF中的值。

    Map<String, Attributes> entries = manifest.getEntries();for (Map.Entry<String, Attributes> entry : entries.entrySet()) {// Digest of the manifest stanza for this entry.print.print("Name: " + entry.getKey() + "\r\n");for (Map.Entry<Object, Object> att : entry.getValue().entrySet()) {print.print(att.getKey() + ": " + att.getValue() + "\r\n");}print.print("\r\n");print.flush();Attributes sfAttr = new Attributes();sfAttr.putValue("SHA1-Digest", base64.encode(md.digest()));sf.getEntries().put(entry.getKey(), sfAttr);}sf.write(out);

    CERT.RSA

    CERT.RSA包含了公鑰、所采用的加密算法等信息。它對前一步生成的MANIFEST.MF使用了SHA1-RSA算法,用開發者的私鑰進行簽名,在安裝時使用公鑰解密它。解密之后,將它與未加密的摘要信息(即,MANIFEST.MF文件)進行對比,如果相符,則表明內容沒有被修改。這點和app瘦身就完全無關了,就是android的apk簽名機制。這塊我平時也沒有仔細研究過,就不誤人子弟了。具體的簽名過程可以參考:http://blog.csdn.net/asmcvc/article/details/9312123

    優化建議

    通過分析得出,除了CERT.RSA沒有壓縮機會外,其余的兩個文件都可以通過混淆資源名稱的方式進行壓縮。


    image_1arn6q7ip1p71c1q1kv3s9rigi2a.png-49.6kB

    優化res

    資源文件的優化一直是我們的重頭戲。如果要和它進行對比,上文的META-INF文件的優化簡直可以忽略不計。這里的優化會分為兩塊,一個是文本資源(shape、layout等)優化,還有一個就是圖片資源優化。


    image_1arn8pmpn1ofkdnk14o11hfp15es34.png-116.3kB

    說明:
    上圖中有-v4,-v21這樣的文件有些是app開發者自己寫的,但大多都是系統在打包的時候自動生成的,所以你只需要考慮自己項目中的drawable-mdpi、drawable-hdpi、drawable-xhdpi、drawable-xxhdpi即可。

    通過as刪除無用資源

    在as的任何文件中右擊,選擇清除無用資源即可刪除沒有用到的資源文件。


    image_1arni457b1j7o1q3pu6f1gn62ju4b.png-57.2kB

    不要勾選清除id!如果清除了id,會影響databinding等庫的使用(id絕對占不了多少空間)


    image_1arni765omt7bv01qrm1h2d19us4o.png-14.6kB

    Tips:
    做此操作之前,請務必產生一次commit,操作完成后一定要通過git看下diff。這樣既方便查看被刪除的文件,又可以利用git進行誤刪恢復。

    打包時剔除無用資源

    shrinkResources顧名思義————收縮資源。將它設置為true后,每次打包的時候就會自動排除無用的資源(不僅僅是圖片)。有了它的幫忙,即使你忘記手動刪除無用的資源文件也沒事。

    buildTypes {release {zipAlignEnabled trueminifyEnabled trueshrinkResources true // 是否去除無效的資源文件proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'signingConfig signingConfigs.release}rtm.initWith(buildTypes.release)rtm {}debug {multiDexEnabled true} }

    刪除無用的語言

    大部分應用其實并不需要支持幾十種語言的,微信也做了根據地區選擇性下載語言包的功能。作為國內應用,我們可以只支持中文。推薦在項目的build.gradle中進行如下配置:

    android {//...defaultConfig {resConfigs "zh"} }

    這樣在打包的時候就會排除私有項目、android系統庫和第三方庫中非中文的資源文件了,效果還是比較顯著的。

    控制raw中資源的大小

    • assets目錄允許下面有多級子目錄,而raw下不允許存在目錄結構
    • assets中的文件不會產生R文件映射,但raw會
    • 如果你app最低支持的版本不是2.3的話,assets和raw應該都不會對資源文件的大小進行限制
    • raw文件會生成R文件映射,可以被as的lint分析,而assets則不能
    • raw缺少子目錄的缺點讓其無法成為存放大量文件的目錄

    一般raw文件下會放音頻文件。如果raw文件夾下有音頻文件,盡量不要使用無損(如:wav)的音頻格式,可以考慮同等質量但文件更小的音頻格式。

    ogg是一種較適合做音效的音頻格式。當年我初中做游戲的時候,我全都是用的mp3和png,最終游戲達到了2G。在換為ogg和jpg后,游戲縮小到了1G以內(因為游戲中音頻和大圖較多,所以效果比較夸張)。移動端的音頻主要是音效和短小的音頻,所以淘寶大量選擇了ogg格式,微博的選擇格式比較多,有wav、mp3、ogg,我更加推薦淘寶的做法。當然,你仍舊不要忘記opus格式,opus也是一種有損壓縮格式,如果感興趣的話也可以嘗試一下。


    image_1arn8i7lq1ub56r41a022mj11n32n.png-38.8kB

    統一應用風格,減少shape文件

    一個應用的界面風格是必須要統一的,這個越早做越好,最基本的就是統一顏色和按鈕的按壓效果。無UI設計和扁平化風格流行后,倒是給應用瘦身帶來了極大的的福利。界面變得越樸實,我們可以用shape畫的東西就越多。


    image_1arnj7vjtn1mr74eql8781qjg5v.png-44.5kB

    當你的app統一過每種顏色對應的按下顏色后,接下來就需要統一按鈕的形狀、按鈕的圓角角度、有無陰影的樣子、陰影投射角度,陰影范圍等等,最后還要考慮是否支持水波紋效果。

    我簡單將按鈕分為下列元素:

    元素屬性01屬性02屬性03屬性04
    形狀正方形三角形圓角矩形圓形
    顏色
    有無陰影??
    陰影大小3dp5dp??
    陰影角度90°120°180°?
    水波紋效果??

    上面的各個元素會產生大量的組合,shape和layer-list當然可以實現各種組合,但這樣的話光按鈕的背景文件就有多個,很不好維護。
    一般為了開發方便,都會把需要用到的各種selector圖片事先定義好,做業務的時候只需要去調用就行。但這大量的selector文件對于業務開發者來說也是有記憶難度的,所以我推薦使用SelectorInjection這個庫,它可以將上面的每個元素進行各種組合,用最少的資源文件來實現大量的按壓效果。

    用庫雖然好,但庫也會帶來學習成本,所以引入者可以將上述的組合定義為按鈕的一個個的style。因為style本身是支持繼承的,對于這樣的組合形態來說,繼承簡直是一大利器。當你的style有良好的命名后,調用者只需要知道引入什么style就行,至于你用了什么屬性別人才不希望管呢。如果業務開發中有一些特別特殊的按壓狀態,沒有任何復用的價值,那你就可以利用庫提供的豐富屬性在layout文件中進行實現,再也不用手忙腳亂的到處定義selector文件了。


    image_1arnkegaj1eug1dvsafj1ao71e7p6p.png-37.7kB

    我將不能繼承和不靈活的shape變成了一個個單一的屬性,通過庫將多個屬性進行組合,接著利用支持繼承的style來將多個屬性固定成一個配置文件,最后對外形成強制的規范性約束,至此便完成了減少selector文件的工作。

    使用toolbar,減少menu文件

    menu文件是ActionBar時代的產物,as雖然對于menu的支持做的還不錯,但我很難愛上它。menu的設計初衷是解耦和抽象,但因為過度的解耦和定制的不方便,很多項目已經不再使用menu.xml作為actionbar的菜單了。
    就目前的形勢來看,toolbar是android未來的方向。我雖然作為一個對actionbar和actionbar的兼容處理相當了解的人,但我還是不得不承認actionbar的時代過去了。如果你不信,我可以告訴你淘寶的menu文件就3個,微博的menu文件就9個,如果你還是苦苦依戀著actionbar的配置模式,我推薦一個庫AppBar,它可以讓你在用靈活的toolbar的同時也享受到配置menu的便利性。


    image_1ars0g9partf41i1g1lnt8fogm.png-58.4kB

    限制靈活性,減少layout文件

    減少layout文件有兩個方法:復用和融合(include)。

    復用layout文件

    把一些頁面共用的布局抽出來,這無論是對layout文件的管理還是瘦身都是極為有用的。就比如說任何一個app的list頁面是相當多的,從布局層面來說就是一個ListView或者RecyclerView,其背后還可能會有loading的view,空狀態的view等等,所以我的建議是建立一個list_layout.xml,其余的list頁面可以復用或者include它,這樣會從很大程度上減少layout文件的數目。

    融合layout代碼

    對于可以被復用的layout我們可以做統一管理,但是對于不會被復用的layout怎么辦呢?假設一個頁面是由兩個區域組合而成的,fragment的做法是一個頁面中放兩個container,然后再寫兩個layout,但實際上這兩個layout經常是沒有任何復用價值的。我希望找到一種方式,在view區塊還沒有復用需求的時候用一個layout搞定,需要被復用的時候也可以快速、無痛的拆分出來。

    1. UiBlock

    UiBlock是一個類似于fragment的解耦庫,它可以為同一個layout中不同區域的view進行邏輯解耦(因為layout可預覽的特性,ui定位方面不是難題),它能幫我們盡可能少的建立layout文件。
    如果未來需求發生了變動,layout文件中的一塊view需要抽出成獨立的layout文件的時候,UiBlock的邏輯代碼幾乎不用改動,你只需要把抽出的layout文件include進來,然后在include標簽上定義一個id即可。而這個工作可以通過as的重構功能自動完成,絕不拖泥帶水。


    image_1asesb6fq1dfu1df71iu0117ps8c9.png-142.6kB <!-- 使用include --> <includeandroid:id="@+id/bottom_ub"layout="@layout/demo_uiblock"android:layout_width="match_parent"android:layout_height="100dp"/>

    2. ListHeader


    image_1arsqihk3bdg1p281ks0phricam.png-149.8kB public void addHeaderToListView(ListView listView, View header) {if (header == null) {throw new IllegalArgumentException("Can't add a null header view to ListView");}ViewGroup viewParent = (ViewGroup) header.getParent();viewParent.removeView(header);AbsListView.LayoutParams params = new AbsListView.LayoutParams(header.getLayoutParams().width,header.getLayoutParams().height);header.setLayoutParams(params);listView.addHeaderView(header); // add }

    我將listView和它的沒有復用價值的header放到了同一個layout中,然后在activity中利用上述代碼進行了操作,最終完成了用一個layout文件給listView加頭的工作。這段代碼我很久沒動過了,有利有弊,放在這里我也僅僅是舉個例子,希望可以幫助大家擴展下思路。

    動態下載圖片

    做過濾鏡和貼紙的同學應該會注意到貼紙、表情這類的東西是相當大的,對于這類的圖片資源我強烈建議通過在線商店進行獲取。這樣既可以讓你踏踏實實的賣貼紙,又可以減小應用的大小。這么做雖然有一定的復雜度和出錯概率,但投入產出比還是很不錯的。


    image_1arnj0n951qd7ua1pl44uk16ak5i.png-103kB

    分門別類放置不同分辨率的圖片

    這個雖然不算是app大小的優化,但是如果你放錯了圖片,對于app啟動時的內存大小會有一定的影響:

    思考一下,如果把一個本來應該放在drawable-xxhdpi里面的圖片放在了drawable文件夾中會出現什么問題呢?
    在xxhdpi設備上,圖片會被放大3倍,圖片內存占用就會變為原來的9倍!

    國內也有很多人說可以用一套圖片來做,不用出多套圖,借此來達到app瘦身和給設計減負的目的。谷歌官方是建議為不同分辨率出不同的圖片,為此國內也有不少文章討論過這件事情,這篇總結的不錯推薦一讀。

    每次說到這個話題的時候總有很多人有不同的看法,況且很多人還不知道.9圖也是需要切多份的,所以這里我還是先分析一下大廠的放圖策略,最后咱們再討論下較優的方案。

    1. 淘寶

    mdpi:


    image_1arnmbr6n2sji90tas1s0k1g7176.png-84.4kB

    mdpi中存留了一些android原始的icon,這個從命名和前綴就能看出來。通過圖片大小分析,這個目錄下面都是一些很小的icon,還有一些沒有用到的icon(這個launcher圖片也很好的說明了淘寶的歷史)。

    hdp:


    image_1arnmlnf92cv1oca1riu196t1j7o7j.png-93.2kB

    hdp中分為兩部分:表情和其他圖片。f+數字的圖片都是表情圖片,淘寶僅僅有一套表情圖片,并且都放在這個目錄下。除了少量的圖片和mdip的圖片一致(比如用戶頭像的place_holder)外,其余的圖片和mdpi的圖片完全不同。順便說一下,此目錄下除了表情之外,其余的都是一些小icon,絕對屬于尺寸很小的那類。

    xhdpi:


    image_1arnn1tc416n1s0h58f1bnc1dpi80.png-98.4kB

    xhdpi又和hdpi不同了,它里面有大量的國家icon。除此之外就是一些對清晰度要求較高的icon。

    xxhdpi:


    image_1arnnj2f0k8v1moek63ggej1s97.png-58.1kB

    xxhdpi就沒什么東西了,幾張圖而已。

    其他:


    image_1arnnptoucj31n4h1g4n13ft1b0v9k.png-17kB

    有后綴的文件夾中除了5張左右的淘寶自己的icon外,其余都是系統的圖片,均以abc開頭。我不清楚淘寶到底有沒有使用到這些圖片,但我可以肯定地說其中有著冗余圖片,或許有著進一步優化的方案。

    總結:
    淘寶的放置圖片策略是大量的圖片在hdpi,xhdpi中,比如表情圖在hdpi中,國家圖在xhdpi中,大多數圖片都僅有一套,少數全局的icon是會有多張的情況(極少,估計只有十幾張)。xxhdpi和mhdpi僅僅作為補充,沒有太大的作用。

    淘寶最令人好奇的點在于它的資源文件很小,但是so文件相當大:


    image_1arnuhm0o1k6813581o0dg5m1jung4.png-47.3kB

    2. 微博

    微博是一個典型的android風格的app,它的drawable全都是有后綴的,完全符合安卓標準的默認打包策略,它還有根據像素密度的圖片,甚至有ldpi的目錄。


    image_1arnoj1rl1h2m9trqiusqh5jva1.png-41.8kB

    mdpi-v4


    image_1arnopum9ogf121a68612ga4peae.png-94.7kB

    mdpi中有大量的小icon,里面有個叫做share_wx的,從名字一下子就知道是微信分享的icon,但實際是微博的logo,比較有趣。其余的都是一些邊邊角角的圖標,量不大,所以主力圖肯定不在這里。

    hdpi-v4


    image_1arnouv1n1cpgdqc1evj12gdmdoar.png-205.6kB

    這是微博圖片存放的主要目錄,有很多大背景和表情,微博的表情圖片和淘寶一樣都是在hdpi中的,它以lxh,emoji等前綴開頭,用來區分不同風格的表情。

    xhdpi-v4和xxhdpi-v4*


    image_1arnp6ag51jt7cka1b3d1slsal5b8.png-195.9kB

    這里放了一些背景大圖,我也發現了大量和hdpi中一樣的圖片,所以可以大膽的假設微博是做了不同像素的圖片的。這也證實了我的想法——微博是很標準的android應用。

    ldpi-v4


    image_1arnpeog7cik19hsage4u020ibl.png-58.3kB

    這個目錄的確沒什么用,微博自身也不會維護這個目錄,這全都是第三方庫和應用商店給的圖片,微博開發者只需要放進來就好。

    sw400dp和sw32dp-400dp


    image_1arnpip3j1iulg7ecio1gtcs1fc2.png-48.7kB

    這些目錄放了一些為不同分辨率準備的長得相同的icon,當然還有微博自己的logo。

    3. 微信

    通過上面的分析,我們是不是可以得出一些經驗了呢?

    • 大量的圖片都在hdpi和xdpi中
    • 表情圖片在hdpi中
    • anim目錄中都是xml文件
    • drawable目錄中有大量的xml和少量的png和.9圖
    • layout文件中是全部的xml
    • raw中放置音頻
    • svg圖片在raw、drawable或assets中
    • 最大的文件夾是圖片文件
    • layout文件較小
    • 相同的圖片,高分屏的肯定比低分屏的大

    ok,現在咱們就可以來看微信的資源了,混淆怕啥,友盟混淆的abcd代碼都能看懂,微信的adcd資源也應該不難。

    raw(a9)


    image_1arnqa3vfd76lrn78n3fsdfcf.png-64.3kB

    這個目錄中放置了大量的svg圖片和mp3文件,從專業的角度來想,drawable目錄下肯定不會放mp3,所以這個肯定是raw文件了。這個目錄下有大量的svg,所以可以看出微信已經實現了全svg化,并且已經在線上穩定運行了。這點在微信早期的公眾號上也可以得到佐證,詳細請看Android微信上的SVG。

    文中提到了:

    第一步,拿到.svg后綴的資源文件(UI很容導出這種圖片),放在raw目錄下而不是drawable目錄。
    第二步,把 R.drawable.xxx 換成 R.raw.xxx;把 @drawable/xxx 換成 @raw/xxx。

    layout(f)


    image_1arnqqs2fbl9j932ie1llt1tgacs.png-14kB

    現在有了兩個線索,那么初步估計上面的三個目錄肯定是我們常見的目錄,否則不會那么大。


    image_1arnr4ghkld6r0r1r9910e81ussd9.png-51.8kB

    打開f后發現這個就是layout文件,所以其余的肯定就是圖片文件了。

    hdpi(y)


    image_1arnr8rn015lj3in76ou621tqadm.png-97.9kB


    y是2.9m,里面有大量的表情,所以我判斷它是hdpi,為了更加證實這個猜測,我找到了兩張相同的圖片。

    a2中:


    image_1arnrkkh21ooi1mquuq9sh614hueg.png-101.4kB

    y中:


    image_1arnrng70t9s7vnpj36alf5het.png-61.4kB

    y中圖片是11kb,a2中圖片是76kb,這明顯說明y是hdpi,a2是xhdpi。

    xhdpi(a2):


    image_1arnrscp011v6ptk1r5q1tn01mudfa.png-95.8kB

    xhdpi中的圖片和hdpi中的圖片相同的不多,微信在這里放的是一些大圖。

    drawable(k)


    image_1arns8oe9167th553bb66t857fn.png-72.5kB

    drawable本身沒啥可以說的,但是微信的drawable中.9圖份額很少,所以我在想是否svg可以在一定的程度上完成一些.9的工作呢?

    總結:

  • 微信的表情都在hdpi中,僅有一套圖片,這點幾乎已經成為了標準
  • 微信已經實現了svg化,svg圖片在raw中
  • 微信傾向于把較大的圖片放在xhdpi中,僅出一套圖
  • 微信和淘寶一樣都是盡量選擇一套圖來完成需求
  • 優化思路

    通過分析得出,傳統的出多個分辨率圖片的做法在大廠中已經發生了改變,阿里系、騰訊系的產品都采用了一套圖走天下的路子。這樣的做法還是有利有弊的,權衡之下我給出如下建議:

    • 聊天表情就出一套圖,放在hdpi中
    • 純色小icon用svg做
    • 背景等大圖,出一套放在xhdpi中
    • logo等權重較大的圖片可針對hdpi,xhdpi做兩套圖
    • 如果某些圖在真機中確實展示異常,那就用多套圖
    • 如果遇到奇葩機型,可針對性的補圖

    成年人不看對錯,只看利弊,所以還請大家權衡一二。

    優化圖片

    對于圖片的優化應該是放在優化res一節中進行講解的,但是因為圖片這塊比重太大了,所以我讓其獨立成為一節。本節主要會從圖片格式、復用圖片和壓縮圖片三個方面進行講解。

    使用VectorDrawable

    想要做好圖片的優化工作最重要的一點是知道應該選擇什么樣的圖片格式,對于這點我推薦一個視頻,方便大家進行深入的了解。


    image_1ar7a260ogr2cldradmbl132o20.png-154.3kB

    這是谷歌給出的建議,簡單來說就是:VD->WebP->Png->JPG

  • 如果是純色的icon,那么用svg
  • 如果是兩種以上顏色的icon,用webp
  • 如果webp無法達到效果,選擇png
  • 如果圖片沒有alpha通道,可以考慮jpg
  • VD即VectorDrawable,android上的svg實現類。在經歷了長達半年的緩慢兼容之路后,現在終于被support庫兼容了,官方文檔中給出了這樣一個例子:

    // Gradle Plugin 2.0+ android { defaultConfig { vectorDrawables.useSupportLibrary = true } } <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@drawable/ic_add" />

    配置好后,我們就可以利用強大的svg來替換純色icon了。

    svg轉VectorDrawable

    先去這里下載svg圖片:https://icomoon.io/app/#/select


    image_1as2a4ja5h64os6ujvtvj7gt13.png-39.4kB

    然后利用這個在線工具轉換成VectorDrawable。


    image_1as29ve0pl661sn71po24df1cm09.png-60.8kB

    svg的兼容性

    support庫的代碼質量還是不錯的,但是svg畢竟是一個圖片格式,所以使用svg前還是需要格外慎重的。我寫了一個demo,把用到的所有屬性都做了示例,然后利用云測服務進行兼容性測試。


    image_1as22vm0n1avk1bgvukv18561krt1g.png-199.2kB

    測試svg也挺簡單的,首先看會不會崩潰,然后看各個分辨率、各個api下是否會有顯示不正常的情況,如果都ok,那么就可以準備引入到項目里面了。
    具體的測試代碼在SelectorInjection,我測試下來100%通過。

    svg的使用技巧

    設置恰當的寬高

    svg圖片是有默認寬高的,設計也會給出一個默認寬高,設置一個合適的默認寬高對以后的圖片復用會有很大幫助。


    image_1as915i10in41fqg71il71fifm.png-88.2kB
    image_1as912sge1hkm1jkgm411j5favp9.png-96kB

    TextView中drawableLeft等屬性是不能設置圖片的寬高的,但ImageView可以。如果你的圖片會被復用,建議將圖片的寬高設置為TextView中的drawable寬高。

    利用padding和scaleType屬性

    ImageView中的svg默認情況下是會隨著控件的大小而改變的,它不會像png那樣保持自己的原始大小。我們可以利用這一特性,再配合padding和scaleType屬性來完成各種效果。


    image_1as91pho95r229p14nd1siuhpt1g.png-4.7kB
  • 圖1:60x60,svg自動鋪滿控件
  • 圖2:30x30,svg被壓縮到原始大小以下
  • 圖3:60x60,使用scaleType,讓svg保持原始寬度
  • 圖4:60x60,使用padding,對svg進行任意比例的壓縮
  • <ImageViewandroid:layout_width="60dp"android:layout_height="60dp"android:tint="@color/blue"app:srcCompat="@drawable/facebook"/><ImageViewandroid:layout_width="30dp"android:layout_height="30dp"android:tint="@color/orange"app:srcCompat="@drawable/facebook"/><ImageViewandroid:layout_width="60dp"android:layout_height="60dp"android:scaleType="centerInside"android:tint="@color/red"app:srcCompat="@drawable/facebook"/><ImageViewandroid:layout_width="60dp"android:layout_height="60dp"android:padding="10dp"android:tint="@color/green"app:srcCompat="@drawable/facebook"/>

    svg的問題和解決方案

    svg有很多好處,但也免不了一些問題,本小節中寫代碼的猴子提出了一些很實用的建議,感謝他的幫助。

    容易寫錯屬性

    svg的支持是要通過app:srcCompat這個屬性來做的,如果稍微一不注意寫成了src,那么就會出現低版本手機上不兼容的問題。你可以嘗試通過配置Lint規則或是利用腳本進行文件的遍歷等方式來防止出現因開發寫錯屬性而崩潰的問題。

    不兼容selector

    將svg放入selector中的時候可能會出現一些問題,stackoverflow上也給出了解決方案,就是下面這段代碼放在Activity中。

    static {AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); }

    開啟這個flag后,你就可以正常的使用Selector這樣的DrawableContainers了。

    不支持自定義控件

    AppCompatActivity會自動將xml文件中的ImageView替換為AppCompatImageView,但是如果用了你的自定義控件,那么這種機制就無效了,所以自定義控件中盡量使用AppCompatImageView來代替ImageView,使用 setImageResource()來設置資源。如果你的自定義控件中需要獲得drawable或者是有自定義需求,那么可以參考AppCompatImageView中的svg的helper類來編寫。

    public class AppCompatImageHelper {private final ImageView mView;public AppCompatImageHelper(ImageView view) {mView = view;}public void loadFromAttributes(AttributeSet attrs, int defStyleAttr) {TintTypedArray a = null;try {Drawable drawable = mView.getDrawable();if (drawable == null) {a = TintTypedArray.obtainStyledAttributes(mView.getContext(), attrs,R.styleable.AppCompatImageView, defStyleAttr, 0);// If the view doesn't already have a drawable (from android:src), try loading// it from srcCompatfinal int id = a.getResourceId(R.styleable.AppCompatImageView_srcCompat, -1);if (id != -1) {drawable = AppCompatResources.getDrawable(mView.getContext(), id);if (drawable != null) {mView.setImageDrawable(drawable);}}}if (drawable != null) {DrawableUtils.fixDrawable(drawable);}} finally {if (a != null) {a.recycle();}}}public void setImageResource(int resId) {if (resId != 0) {final Drawable d = AppCompatResources.getDrawable(mView.getContext(), resId);if (d != null) {DrawableUtils.fixDrawable(d);}mView.setImageDrawable(d);} else {mView.setImageDrawable(null);}}boolean hasOverlappingRendering() {final Drawable background = mView.getBackground();if (Build.VERSION.SDK_INT >= 21&& background instanceof android.graphics.drawable.RippleDrawable) {// RippleDrawable has an issue on L+ when used with an alpha animation.// This workaround should be disabled when the platform bug is fixed. See b/27715789return false;}return true;} }

    不兼容第三方庫

    市面上有很多優秀的圖片加載庫,它們一般都會支持多種圖片路徑的加載,比如磁盤圖片,網絡圖片,res圖片等等,對于svg這樣的圖片格式,它們是否支持就要大家結合自己的圖片框架進行調研了。像glide目前(2016.09.10)就不支持加載本地的svg圖片,詳見: Vector drawable can't be used as error drawable 。

    PS:因為第三方庫更新十分頻繁,建議在用到svg的時候再調研。

    性能問題

    關于動畫和性能方面的問題,《Android Vector曲折的兼容之路》中給出了具體的示例和建議:

  • Bitmap的繪制效率并不一定會比Vector高,它們有一定的平衡點,當Vector比較簡單時,其效率是一定比Bitmap高的,所以為了保證Vector的高效率,Vector需要更加簡單,PathData更加標準、精簡,當Vector圖像變得非常復雜時,就需要使用Bitmap來代替了。
  • Vector適用于icon、Button、ImageView的圖標等小的icon,或者是需要的動畫效果,由于Bitmap在GPU中有緩存功能,而Vector并沒有,所以Vector圖像不能做頻繁的重繪。
  • Vector圖像過于復雜時,不僅僅要注意繪制效率,初始化效率也是需要考慮的重要因素。這點可以參考微信中的svg。
  • SVG加載速度會快于PNG,但渲染速度會慢于PNG,畢竟PNG有硬件加速,但平均下來,加載速度的提升彌補了繪制的速度缺陷。
  • 不便于管理

    svg是沒辦法在文件目錄下進行預覽的,其放置的目錄也和其他圖片不同,如果沒有做好管理工作,未來的drawable目錄就會變得越發的混亂。其實,對于目錄或者包內文件的管理有個很簡單的原則:同目錄多類型文件,以前綴區分;不同目錄,同類型文件,以意義區分。

    drawable目錄下有多種類型的文件,我們利用英文排序的原則將這些文件簡單分為svg、.9圖、shape、layer-list這幾類。


    image_1asbj36rs1k0a13rn1bmb2p01dumm.png-15.9kB

    通過規范特定的前綴,就可以形成一個便于查找和理解的目錄樹,以達到分類的目的。


    image_1asbk0j4417s53ed9vphma1cea13.png-81.3kB

    在特定前綴的規范下,次級分類的命名就可以按照功能或用途來做區分,比如button或share的icon就可以用不同的前綴來標識。強烈建議開發和設計定一個命名標準,這樣開發就不用對設計出的圖片進行重命名了,而且還可以保證兩個部門有一致的認知。

    這個僅僅是一個簡單的分類方法,在實際中需要靈活使用。如果一些文件都是用于某種特定類型的,那么可以自定義前綴。比如我對于按鈕使用的形狀就用了btn作為前綴,而忽略了它們本身的文件類型。


    image_1ase39vaiud91foq188ilif1n219.png-13.8kB

    不便于預覽

    svg是一個特殊格式的文件,可預覽性大大低于png等常用的圖片格式,但幸好win下可以直接在文件目錄下預覽svg圖像,效果十分不錯。


    image_1asbld3ar1ptn1pne1l3hrgl12v51g.png-14.6kB

    但是vd是一個xml文件,預覽器很難識別出這是什么格式,所以對于vd的預覽才是一個難點。我之后準備寫一個as插件來解決這個問題。

    使用WebP

    webp作為一種新的圖片格式,從Android4.0+開始原生支持,但是不支持包含透明度,直到4.2.1+才支持顯示含透明度的webp,使用的時候要特別注意。
    webp相比于png最明顯的問題是加載稍慢,不過現在的智能設備硬件配置越來越高,這點差異越來越小。騰訊之前有一篇對于webp的分析文十分不錯,如果你準備要用webp了,那么它絕對值得一看。

    注意:如果你的項目最低支持到4.2.1,那么你可以繼續閱讀了,如果項目還需要支持到4.0版本,我建議暫時不要上webp,成本太高。

    png轉webp

    我們可以通過智圖或者isparta將其它格式的圖片轉換成webP格式。


    image_1asbgag1erb11i6b1pqg1gga18is9.png-1045.2kB

    webp的問題

    兼容性不好

    官方文檔中說只有在4.2.1+以上的機型,才能解析無損或者有透明度調整的webp圖片,4.0+才開始支持無透明度的webp圖片。我通過云測發現,在4.0~4.2.1的系統中,帶有透明度的webp圖片雖然不會崩潰,但是完全無法顯示。


    image_1asbo6vvd1o9roku1keqa9r4om1t.png-33.5kB

    《APK瘦身記,如何實現高達53%的壓縮效果》一文中也提到有alpha值的jpg圖片,經過webp轉換后,無法在4.0,4.1的Android系統上運行的問題,具體原因見官方文檔:


    image_1asbq6bejqva1mtuvaj3kc1al22n.png-14kB

    除了兼容性問題外,webp在某些機型和rom上可能會出現一些“神奇”的問題。在三星的部分機型上,部分有alpha通道的圖中會有一條很明顯的黑線(三星的rom對于shape的alpha的支持也有問題,是紅線)。在小米2刷成4.xx的手機上,系統未能正確識別xml文件中描述的webp圖片,也會導致加載webp失敗。

    不便于預覽

    因為webp的圖片格式是很難預覽的,as也沒有辦法直接預覽webp格式,我一般是通過chrome瀏覽器打開webp,十分不方便。


    image_1asbq487rk9b1ff514p7nrefe02a.png-115.1kB

    我們知道gradle在build時,有一個mergeXXXResource Task,它將項目的各個aar中所有的res資源統一整合到/build/intermediates/res/flavorName/{buildType}目錄下。

    webpConvertPlugin這個gradle插件可以在mergeXXXResource Task和processXXXResource Task之間插入一個task,這個task會將上述目錄下的drawable進行統一處理,將項目目錄里的png、jpg圖片(不包含.9圖片,webp轉換后顯示效果不佳)批量處理成webp圖片,這樣可以讓我們在日常開發時用png、jpg,正式發包時用webp。

    復用圖片

    復用相同的icon

    我們通過svg可以讓一張圖片適用于不同大小的容器中,以達到復用的目的。最常見的例子就是“叉”,除非你的x是有多種顏色的,那么這種表示關閉的icon可以復用到很多地方。


    image_1arst9t8p1tq61k8117n31489eg22a.png-12.5kB
    image_1as1sslhf1r0a10mr18rnccg1m6o9.png-24.5kB

    上圖中我通過組合的方式將長得一樣的icon(facebook、renren等)復用到了不同的界面中,不僅實現了效果,可維護性也不錯。

    使用Tint

    著色器(tint)是一個強大的工具,我將其和shape、svg等結合后產生了化學反應。TintMode共有6種,分別是:add,multiply,screen,srcatop,srcin(默認),src_over。下圖是一篇文章中的總結,說明了其靈活性


    image_1as22gvi1jdc16ji1p67a3dqu613.png-67.8kB

    一般用默認的模式就可以搞定大多數需求了,使用到的控件主要是TextView和ImageButton。ImageButton官方已經給出了支持方案,TextView因為有四個Drawable,官方的tint屬性在低版本又不可用,所以我讓SelectorTextView支持了一下。如果你想要了解具體的兼容方法,可以參考庫代碼或《Drawable 著色的后向兼容方案》。

    ImageButton

    android:tint="@color/blue"

    SelectorTextView

    app:drawableLeftTint="@color/orange" app:drawableRightTint="@color/green" app:drawableTopTint="@color/green" app:drawableBottomTint="@color/green"

    因為我用了SelectorTextView和SelectorImageButton,所以我對于背景的tint沒有什么需求,也就沒做兼容性測試,有興趣的同學可以嘗試一下。如果你決定要采用tint,一定要通過云測等手段做下兼容性測試,下圖是我對于上述屬性的測試結果:


    image_1as2382s1sfleismn21q991h8b1t.png-218.6kB

    復用按壓效果

    一個應用中的list頁面都應該做一定程度的統一,對于有限長度的list,我們可能偏向于用ScrollView做,對于無限長的list用RecyclerView做,但對于它們的按壓效果我強烈建議采用同一個樣式。


    image_1arsu35djprokc73jpp3c1cj22n.png-75.1kB

    以微信為例,它的所有列表都是白色的item,我的優化思路如下:

  • 列表由LinearLayout、RecyclerView組成
  • 分割線用統一的shape進行繪制,不用切圖
  • 整個列表背景設置為白色
  • item的背景是一個selector文件,正常時顏色是透明,按下后出現灰色
  • 通過旋轉來復用

    如果一個icon可以通過另一個icon的旋轉變換來得到,那么我們就可以通過如下方法來實現:

    <?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android"android:drawable="@drawable/blue_btn_icon" // 原始iconandroid:fromDegrees="180" // 旋轉角度android:pivotX="50%"android:pivotY="50%"android:toDegrees="180" />
    image_1art1llie1j2j1hac1hmtndbe1g9.png-28.3kB

    這種方法雖好,但是不要濫用。需要看代碼的人知道這種思路,否則會出現不好維護的情況。當設計真的是認為兩個圖有如此的關系的時候才可這樣實現,萬不可耍小聰明。

    壓縮圖片

    圖片的壓縮策略是:

  • 優先壓大圖,后小圖
  • 不壓.9圖(svg在俠義上不算圖)
  • 對于開屏大圖片的壓縮需注意力度,要和設計確認后再做
  • 對于體積特別大(超過50k)的圖片資源可以考慮有損壓縮
  • 關于如何量化兩張圖片在視覺上的差別,Google 提供了一個叫butteraugli的工具,有興趣的同學可以嘗試一下。

    ImageOptim

    mac上超好用的圖片壓縮工具是ImageOptim,它集成了很多好用圖片壓縮庫,很多blog中的圖片也是用它來壓縮的。


    image_1ar7a83kr1lrns861di8q3mm6p2q.png-639.7kB

    值得一提的是,借助Zopfli,它可以在不改變png圖像質量的情況下使圖片大小明顯變小。

    pngquant

    pngquant也是一款著名的壓縮工具,對于png的療效還不錯,但它不一定就適合app中那種背景透明的小icon,所以對比起tinypng來說,優勢不明顯。


    image_1art6qlf812hk1c19l0h1te413u6m.png-56.6kB

    上圖的數據來自:http://www.jianshu.com/p/a721fbaa62ab

    tinypng

    tinypng是一款相當著名的商用壓縮工具,tinypng提供了開放接口供開發者開發屬于自己的壓縮工具(付費服務)。tinypng對于免費用戶也算友好,每月可以免費壓縮幾百張圖片。

    我用gradle插件來使用tinypng,更加簡單方便。我一般的做法是發版本前才做一次圖片壓縮,每次debug的時候是直接跳過這個task的,完全不影響日常的debug。

    tinyinfo {apiKey = 'xxxxxxxxx'//編譯時是否跳過此taskskip = true//是否打印日志isShowLog = true }

    有人說tinypng的缺點是在壓縮某些帶有過渡效果(帶alpha值)的圖片時,圖片可能會失真,對于這種圖片你可以將png圖片轉換為webP格式。

    注意事項

    aapt默認會在打包時進行圖片的壓縮工作(無論你知不知道,它一直在默默的工作),如果你已經做了圖片壓縮了,那么建議手動禁止這個功能,否則“可能會”出現圖片二次壓縮后反而變大的情況,原因請看:Smaller PNGs, and Android’s AAPT tool。


    image_1art7sk821fugmvh172i1tnkhi713.png-404.5kB android { defaultConfig { //...} aaptOptions { cruncherEnabled = false } }

    優化dex

    dex本身的體積還是很可觀的,雖說代碼這東西不占用多少存儲空間,但是微信這樣的大廠的dex已經達到了20多M。我大概估計了一下,如果你沒有達到方法數上限,那么你的dex的大小大約是10M??v觀應用市場,沒有用multiDex的又有幾家呢?

    記錄方法數和代碼行數

    dexcout

    要優化這部分,首先需要對公司的、android庫的、第三方庫的代碼進行深入的了解,我用了dexcount來記錄項目的方法數:

    dexcount {format = "list"includeClasses = falseincludeFieldCount = trueincludeTotalMethodCount = falseorderByMethodCount = falseverbose = falsemaxTreeDepth = Integer.MAX_VALUEteamCityIntegration = false }
    image_1arpdkoh618hc5ss1ud51buhf79ho.png-172.9kB

    通過分析你可以知道代碼的具體情況了,比如某個第三方庫是否已經不用了、自己項目的哪個包的方法數最多、目前代碼情況是否合理等等。

    statistic

    我是通過Statistic這個as插件來評估項目中開發人員寫的代碼量的,它生成的報表也不錯:


    image_1arpdsqips6jp323969fivcqi5.png-123.4kB
    image_1arpduoqa107u8vn8cv1thm1nn0ii.png-145.2kB

    現在我可以知道:
    哪些類空行數太多,是不是沒有按照代碼規范來;
    哪些類的代碼量很少,是否有存在的必要;
    哪些類行數過多,是否沒有遵守單一職責原則,是否可以進行進一步的拆分

    apk method

    你還可以用apk-method-count這個工具來查看項目中各個包中的方法數,它會生成樹形結構的文檔,十分直觀。


    image_1arpedp5l1vrn191t1j7b1gkm7q2iv.png-258.2kB

    利用Lint分析無用代碼

    如果你想刪掉沒有用到的代碼,可以借助as中的Inspect Code對工程做靜態代碼檢查。


    image_1arpbjnn0gq41604v1p82g1p4dgh.png-52.8kB
    image_1arpbrhdp2221n1k7ob15ae1ijrgu.png-141.6kB

    Lint是一個相當強大的工具,它能做的事情自然不限于檢查無用資源和代碼,它還能檢測丟失的屬性、寫錯的單位(dp/sp)、放錯像素目錄的圖片、會引起內存溢出的代碼等等。從eclipse時代發展到現在,lint真的是越來越方便了,我們現在只需要點一點就行。

    Lint的強大也會帶來相應的缺點,缺點就是生成的信息量過多,不適合快速定位無用的代碼。我推薦的流程是到下圖中的結果中直接看無用的代碼和方法。


    image_1arpccgij2hjtgi1s7nuob8o5hb.png-160.3kB

    注意:
    這種刪除無用代碼的工作需要反復多次進行(比如一月一次)。當你刪除了無用代碼后,這些代碼中用到的資源也會被標記為無用,這時就可以通過上文提到的Remove Unused Resources來刪除。

    通過proguard來刪除無用代碼

    手動刪除無用代碼的流程太繁瑣了,如果是一兩次倒還會帶來刪除代碼的爽快感,但如果是專人機械性持續工作,那個人肯定要瘋的。為了保證每次打包后的apk都包含盡可能少的無用代碼,我們可以在build.gradle中進行如下配置:

    android {buildTypes {release {minifyEnabled true // 是否混淆}} }

    雖然這種方式成果顯著,但也需要配合正確的proguard配置才能起作用,推薦看下讀懂 Android 中的代碼混淆一文。

    這種利用混淆來刪除代碼的方式是一種保險措施,真正治本的方法還是在開發過程中隨手刪除無用的代碼,畢竟開發者才是最清楚一段代碼該不該被刪的。我之前就是隨手清理了下沒用的代碼,然后就莫名其妙的不用使用mulitdex了。

    剔除測試代碼

    我們在測試的時候可能會隨便寫點測試方法,比如main方法之類的,并且還會引入一些測試庫。對于測試環境的代碼gradle提供了很方便的androidTest和test目錄來隔離生產環境。
    對于測試時用到的大量庫,可以進行test依賴,這樣就可以保證測試代碼不會污染線上代碼,也可以防止把測試工具、代碼等發布到線上等錯誤(微博就干過這樣的事情)。

    // Dependencies for local unit tests testCompile 'junit:junit:4.12' testCompile 'org.hamcrest:hamcrest-junit:2.0.0.0'// Android Testing Support Library's runner and rules androidTestCompile 'com.android.support:support-annotations:24.1.1' androidTestCompile 'com.android.support.test:runner:0.5' androidTestCompile 'com.android.support.test:rules:0.5'// Espresso UI Testing androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {exclude group: 'com.android.support', module: 'support-annotations' })

    PS:在layout中利用tools也是為了達到上述目的。

    區分debug/rtm/release模式

    debug模式是開發者的調試模式,這個模式下log全開,并且會有一些幫助調試的工具(比如:leakcanary,stetho),我們可以通過debugCompile和releaseCompile來做不同的依賴,有時候也會需要no-op(關于no-op的內容可以參考下開發第三方庫最佳實踐)。

    dependencies {debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2'releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'}

    debug和release是android本身自帶的兩種生產環境,在實際中我們可能需要有多個環境,比如提測環境、預發環境等,我以rtm(Release to Manufacturing 或者 Release to Marketing的簡稱)環境做例子。

    首先在目錄下創建rtm文件:


    image_1arpi1tfq1dd5pga35j10ntuhjjc.png-12.3kB

    復刻release的配置:

    buildTypes {release {zipAlignEnabled trueminifyEnabled trueshrinkResources true // 是否去除無效的資源文件proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'signingConfig signingConfigs.release}rtm.initWith(buildTypes.release)rtm {}debug {multiDexEnabled true} }

    配置rtm依賴:

    ext {leakcanaryVersion = '1.3.1' }dependencies {debugCompile "com.squareup.leakcanary:leakcanary-android:$leakcanaryVersion"rtmCompile "com.squareup.leakcanary:leakcanary-android-no-op:$leakcanaryVersion"releaseCompile "com.squareup.leakcanary:leakcanary-android-no-op:$leakcanaryVersion"

    rtm環境自然也有動態替換application文件的能力,我為了方便非開發者區分app類別,我做了啟動icon的替換。

    <?xml version="1.0" encoding="utf-8"?> <manifest package="com.kale.example"xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><applicationandroid:name=".RtmApplication"android:allowBackup="true"android:icon="@drawable/rtm_icon"tools:replace="android:name,android:icon"/></manifest>

    現在我可以將環境真正需要的代碼打包,不需要的代碼全部剔除,以達到瘦身的目的。

    使用拆分后的support庫

    谷歌最近有意將support-v4庫進行拆分,但是無奈v4被引用的地方太多了,但這不失為一個好的開始。目前來看使用拆分后的support庫是沒有什么優點的,所以我也不建議現在就開始動手,當谷歌和第三方庫作者都開始真的往這方面想的時候,你再開始吧。

    減少方法數,不用mulitdex

    mulitdex會進行分包,分包的結果自然比原始的包要大一些些,能不用mulitdex則不用。但如果方法數超了,除了插件化和RN動態發包等奇淫巧技外我也沒什么好辦法了。

    使用更小庫或合并現有庫

    同一功能就用一個庫,禁止一個app中有多個網絡庫、多個圖片庫的情況出現。如果一個庫很大,并且申請了各種權限,那么就去考慮換掉他。

    話人人都會說,但如果一個項目是由多個項目成員合作完成的,很難避免重復引用庫的問題,同一個功能用不同的庫,或者一個庫用不同版本的現象比比皆是,這也是很難去解決的。我的解決方案是部門之間多溝通,盡量做base層,base層由少數人進行維護,正如微信在so庫層面的做法:

  • C++運行時庫統一使用stlport_shared
    之前微信中的C++運行庫大多使用靜態編譯方式,使用stlport_shared方式可減小APK包大小,相當于把大家公有的代碼提取出來放一份,減少冗余。同時也會節省一點內存,加載so的時候動態庫只會加載一次,靜態庫則隨著so的加載被加載多份內存映像。
  • 把公用的C++模塊抽成功能庫
    其實與上面的思路是一致的,主要為了減少冗余模塊。大家都用到的一些基礎功能,應該抽成基礎模塊。
  • 總結

    app的瘦身是一個長期并且艱巨的工作,如果是小公司建議一個月做一次。大公司的話一般都會對app的大小進行持續的統計和追蹤,有余力的小公司也可以多多借鑒一下。希望大家閱讀完本文后可以著手對項目進行優化工作,帶來真正的收益。


    developer_kale@foxmail.com

    參考資料:
    smaller apk系列文章:
    https://medium.com/google-developers/smallerapk-part-1-anatomy-of-an-apk-da83c25e7003



    文/天之界線2010(簡書作者)
    原文鏈接:http://www.jianshu.com/p/8f14679809b3

    著作權歸作者所有,轉載請聯系作者獲得授權,并標注“簡書作者”。

    • Android Vector曲折的兼容之路 - 簡書
      ?— AndroidVector曲折的兼容之路兩年前寫書的時候,就在研究AndroidL提出的Vector 天之界線2010??www.jianshu.com →
    • Google I/O 2016 筆記之圖像壓縮
      ?— 本篇文章已授權微信公眾號 guolin_blog (郭霖)獨家發布 寫在前面Android開發中的圖像壓縮是一個很重要的部分 天之界線2010??hlong.xyz →
    • 如何將apk大小減少6M的 - UsherFor的專欄 - 博客頻道 - CSDN.NET
      ?— 轉載至:http://blog.csdn.net/lifetragedy/article/details/43817903 天之界線2010??blog.csdn.net →
    • [Android技術專題]APK瘦身看這一篇文章就夠了 - 簡書
      ?— 前言??之前我在微信群里面有說到,隨著Android開發越來越成熟,關于Android方面的技術文章越來越多

    總結

    以上是生活随笔為你收集整理的App瘦身最佳实践(分析了微信、淘宝、微博图片文件的放法)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    精品国产一区二区三区av 性色 | 国产在热线精品视频 | 国产成人av免费观看 | 老熟女重囗味hdxx69 | 福利一区二区三区视频在线观看 | 99久久人妻精品免费二区 | 亚洲一区二区观看播放 | 欧美野外疯狂做受xxxx高潮 | 成人片黄网站色大片免费观看 | 高潮毛片无遮挡高清免费 | 国产超碰人人爽人人做人人添 | 国产97色在线 | 免 | 亚洲乱码中文字幕在线 | 欧美日韩综合一区二区三区 | 18无码粉嫩小泬无套在线观看 | 激情国产av做激情国产爱 | 国产色xx群视频射精 | 亚洲 a v无 码免 费 成 人 a v | 99精品国产综合久久久久五月天 | 精品国产麻豆免费人成网站 | 波多野结衣乳巨码无在线观看 | 欧美性猛交内射兽交老熟妇 | 国产在线精品一区二区高清不卡 | 东北女人啪啪对白 | 中国女人内谢69xxxxxa片 | aⅴ在线视频男人的天堂 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国产在线精品一区二区三区直播 | 亚洲人成网站色7799 | 久久综合香蕉国产蜜臀av | 亚洲啪av永久无码精品放毛片 | 中国大陆精品视频xxxx | 天天做天天爱天天爽综合网 | 精品欧美一区二区三区久久久 | 高清不卡一区二区三区 | 国产极品美女高潮无套在线观看 | 牲交欧美兽交欧美 | 日韩少妇内射免费播放 | 国语自产偷拍精品视频偷 | 久久久久人妻一区精品色欧美 | 久久午夜无码鲁丝片午夜精品 | 亚洲成a人片在线观看日本 | 亚洲熟女一区二区三区 | 色婷婷av一区二区三区之红樱桃 | 亚洲色成人中文字幕网站 | 内射爽无广熟女亚洲 | 日本成熟视频免费视频 | 午夜无码区在线观看 | 国产午夜福利100集发布 | 亚洲一区二区三区在线观看网站 | 野狼第一精品社区 | 国产av久久久久精东av | 人妻互换免费中文字幕 | 久精品国产欧美亚洲色aⅴ大片 | 免费无码的av片在线观看 | 亚洲日韩精品欧美一区二区 | 亚洲精品成人福利网站 | 国产免费久久精品国产传媒 | 免费网站看v片在线18禁无码 | 熟女俱乐部五十路六十路av | 岛国片人妻三上悠亚 | 成在人线av无码免费 | 国产农村乱对白刺激视频 | 老子影院午夜精品无码 | 自拍偷自拍亚洲精品10p | 欧美国产日产一区二区 | 久久久久久a亚洲欧洲av冫 | 又粗又大又硬毛片免费看 | 欧美成人免费全部网站 | 久久久精品欧美一区二区免费 | 婷婷五月综合缴情在线视频 | 亚洲色在线无码国产精品不卡 | 国产激情一区二区三区 | 日韩精品a片一区二区三区妖精 | 欧美日韩在线亚洲综合国产人 | 欧美人与禽猛交狂配 | 国产av一区二区精品久久凹凸 | 亚拍精品一区二区三区探花 | 国产香蕉97碰碰久久人人 | 亚洲熟悉妇女xxx妇女av | 一本久道久久综合狠狠爱 | 大地资源网第二页免费观看 | 无码人妻久久一区二区三区不卡 | 秋霞特色aa大片 | 国产成人精品视频ⅴa片软件竹菊 | 亚洲熟女一区二区三区 | 国产在线精品一区二区高清不卡 | 亚洲精品国偷拍自产在线麻豆 | 国产精品久久精品三级 | 精品人人妻人人澡人人爽人人 | 精品少妇爆乳无码av无码专区 | 狠狠亚洲超碰狼人久久 | 妺妺窝人体色www婷婷 | 亚洲精品无码人妻无码 | 国产一区二区三区四区五区加勒比 | 国产精品二区一区二区aⅴ污介绍 | 亚洲精品一区三区三区在线观看 | 成人一区二区免费视频 | 成人精品视频一区二区三区尤物 | 久久精品视频在线看15 | 国内少妇偷人精品视频免费 | 熟女俱乐部五十路六十路av | 亚洲性无码av中文字幕 | 一二三四社区在线中文视频 | 欧美老熟妇乱xxxxx | 国产精品久久久一区二区三区 | 中文字幕无码av波多野吉衣 | 成人欧美一区二区三区黑人免费 | 久久97精品久久久久久久不卡 | 人人妻人人澡人人爽欧美一区 | 亚洲精品欧美二区三区中文字幕 | 国产舌乚八伦偷品w中 | 亚洲午夜无码久久 | 一个人免费观看的www视频 | 国产午夜无码精品免费看 | 偷窥村妇洗澡毛毛多 | 疯狂三人交性欧美 | 成年美女黄网站色大免费视频 | 久久国产自偷自偷免费一区调 | 国产亚洲精品久久久久久国模美 | 国产午夜福利100集发布 | 97精品人妻一区二区三区香蕉 | www国产亚洲精品久久网站 | 人人妻人人澡人人爽精品欧美 | 国产热a欧美热a在线视频 | 老熟女重囗味hdxx69 | 久久天天躁夜夜躁狠狠 | 18禁止看的免费污网站 | 欧洲极品少妇 | 国产精品亚洲专区无码不卡 | 久久伊人色av天堂九九小黄鸭 | 欧美乱妇无乱码大黄a片 | 国产激情艳情在线看视频 | 极品尤物被啪到呻吟喷水 | 婷婷丁香五月天综合东京热 | 免费看男女做好爽好硬视频 | 性欧美熟妇videofreesex | 丰满人妻翻云覆雨呻吟视频 | 欧美日韩一区二区三区自拍 | 亚洲狠狠色丁香婷婷综合 | 国产精品毛片一区二区 | 少妇无套内谢久久久久 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | а天堂中文在线官网 | 日本精品人妻无码77777 天堂一区人妻无码 | 无码人妻精品一区二区三区不卡 | 精品无码av一区二区三区 | 激情内射日本一区二区三区 | 黄网在线观看免费网站 | 久久亚洲精品成人无码 | 久久天天躁狠狠躁夜夜免费观看 | 狠狠躁日日躁夜夜躁2020 | 又黄又爽又色的视频 | 欧美黑人乱大交 | 国产综合久久久久鬼色 | 激情国产av做激情国产爱 | 四虎国产精品免费久久 | 婷婷五月综合缴情在线视频 | 人人妻人人澡人人爽人人精品浪潮 | 欧美变态另类xxxx | 国产精品毛多多水多 | 国产精品办公室沙发 | 老熟妇仑乱视频一区二区 | 少妇性荡欲午夜性开放视频剧场 | 国产三级久久久精品麻豆三级 | 丁香啪啪综合成人亚洲 | 亚洲人成影院在线观看 | 久9re热视频这里只有精品 | 婷婷丁香六月激情综合啪 | 伊人久久大香线蕉av一区二区 | 日韩人妻系列无码专区 | www成人国产高清内射 | 久久久久久久女国产乱让韩 | 激情内射日本一区二区三区 | 国产精品第一国产精品 | 噜噜噜亚洲色成人网站 | 国产激情无码一区二区app | 久久精品国产99精品亚洲 | 久久熟妇人妻午夜寂寞影院 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 强开小婷嫩苞又嫩又紧视频 | 久久午夜无码鲁丝片秋霞 | 国产高清不卡无码视频 | 又湿又紧又大又爽a视频国产 | 国产麻豆精品一区二区三区v视界 | 亚洲 另类 在线 欧美 制服 | aⅴ亚洲 日韩 色 图网站 播放 | 欧美xxxx黑人又粗又长 | 国产亚洲精品久久久久久久久动漫 | 国产超碰人人爽人人做人人添 | 欧美高清在线精品一区 | 亚洲精品一区二区三区四区五区 | 好屌草这里只有精品 | 精品久久久无码人妻字幂 | 国产97人人超碰caoprom | 国产热a欧美热a在线视频 | 波多野结衣 黑人 | 欧美高清在线精品一区 | 欧美 日韩 亚洲 在线 | 亚洲人亚洲人成电影网站色 | 国产真人无遮挡作爱免费视频 | 久久精品人人做人人综合 | 男人和女人高潮免费网站 | 亚洲欧美日韩成人高清在线一区 | 精品欧洲av无码一区二区三区 | 欧美日韩人成综合在线播放 | 午夜丰满少妇性开放视频 | 精品亚洲成av人在线观看 | 水蜜桃av无码 | 国产激情一区二区三区 | 人妻尝试又大又粗久久 | 天堂а√在线中文在线 | 2020久久香蕉国产线看观看 | 国产黑色丝袜在线播放 | 少妇性l交大片 | 国产精品久久久 | 在线精品国产一区二区三区 | 中文精品久久久久人妻不卡 | 在线亚洲高清揄拍自拍一品区 | 国产午夜福利100集发布 | 丰满肥臀大屁股熟妇激情视频 | 日韩精品无码免费一区二区三区 | 人人妻人人澡人人爽欧美精品 | 日本大香伊一区二区三区 | 性啪啪chinese东北女人 | 国内精品人妻无码久久久影院蜜桃 | 76少妇精品导航 | 波多野结衣一区二区三区av免费 | 国产性生交xxxxx无码 | 久久久亚洲欧洲日产国码αv | 白嫩日本少妇做爰 | 亚洲精品欧美二区三区中文字幕 | 国产亚av手机在线观看 | 少妇高潮一区二区三区99 | 精品无码av一区二区三区 | 午夜嘿嘿嘿影院 | 午夜福利一区二区三区在线观看 | 中文字幕无码免费久久99 | 无码午夜成人1000部免费视频 | 亚洲欧美国产精品专区久久 | 久久精品无码一区二区三区 | 无码av免费一区二区三区试看 | 精品国产aⅴ无码一区二区 | 性色欲情网站iwww九文堂 | 2020久久超碰国产精品最新 | 国产精品多人p群无码 | 51国偷自产一区二区三区 | 日日鲁鲁鲁夜夜爽爽狠狠 | 精品乱码久久久久久久 | 又紧又大又爽精品一区二区 | 亚洲国产日韩a在线播放 | 中文无码成人免费视频在线观看 | 成人片黄网站色大片免费观看 | 国产精品美女久久久 | 国产色在线 | 国产 | 精品国产一区av天美传媒 | 人妻少妇精品无码专区动漫 | 欧美一区二区三区视频在线观看 | 亚洲精品国偷拍自产在线麻豆 | 亚洲色欲色欲天天天www | 狂野欧美性猛交免费视频 | 亚洲欧美色中文字幕在线 | 亚洲成色在线综合网站 | 国产亚洲视频中文字幕97精品 | 国产另类ts人妖一区二区 | 久久人人爽人人爽人人片av高清 | 亚洲国产精品久久久久久 | 色噜噜亚洲男人的天堂 | 亚洲中文无码av永久不收费 | 一本久久伊人热热精品中文字幕 | 国产黄在线观看免费观看不卡 | 性欧美videos高清精品 | 欧美亚洲日韩国产人成在线播放 | 亚洲精品一区二区三区在线观看 | 黄网在线观看免费网站 | 国产极品视觉盛宴 | 亚洲成a人片在线观看无码3d | 国产精品毛多多水多 | 亚洲成在人网站无码天堂 | 一本色道久久综合亚洲精品不卡 | 国产精品亚洲一区二区三区喷水 | 亚洲色大成网站www国产 | 无码av最新清无码专区吞精 | 人妻体内射精一区二区三四 | 少妇愉情理伦片bd | 精品久久久久久人妻无码中文字幕 | 久久久久免费精品国产 | 熟女少妇人妻中文字幕 | 亚洲精品一区国产 | 亚洲毛片av日韩av无码 | 丰满肥臀大屁股熟妇激情视频 | 无码一区二区三区在线观看 | 强奷人妻日本中文字幕 | 乱人伦人妻中文字幕无码久久网 | 欧美熟妇另类久久久久久多毛 | 国产精品人人爽人人做我的可爱 | 亚洲日韩一区二区 | 国产午夜视频在线观看 | 欧美亚洲日韩国产人成在线播放 | 18禁黄网站男男禁片免费观看 | 最新版天堂资源中文官网 | 欧美精品免费观看二区 | 久久久精品欧美一区二区免费 | 性欧美牲交xxxxx视频 | 精品熟女少妇av免费观看 | 性啪啪chinese东北女人 | 成人性做爰aaa片免费看不忠 | 又湿又紧又大又爽a视频国产 | 成熟女人特级毛片www免费 | 88国产精品欧美一区二区三区 | 久久精品国产一区二区三区肥胖 | 免费无码av一区二区 | 亚洲色欲久久久综合网东京热 | 少女韩国电视剧在线观看完整 | 全黄性性激高免费视频 | 亚洲の无码国产の无码影院 | 97精品国产97久久久久久免费 | 国产凸凹视频一区二区 | 亚洲欧洲日本综合aⅴ在线 | 免费国产成人高清在线观看网站 | 国产精品美女久久久久av爽李琼 | 亚洲 日韩 欧美 成人 在线观看 | 久久久久se色偷偷亚洲精品av | 一本久久伊人热热精品中文字幕 | 国精产品一区二区三区 | 天堂а√在线地址中文在线 | 国产免费久久精品国产传媒 | 中文字幕日韩精品一区二区三区 | 给我免费的视频在线观看 | 成人无码视频在线观看网站 | 欧美性黑人极品hd | 最近的中文字幕在线看视频 | 俺去俺来也www色官网 | 色婷婷综合中文久久一本 | 熟妇人妻中文av无码 | 国产性生交xxxxx无码 | 欧美熟妇另类久久久久久不卡 | 日本欧美一区二区三区乱码 | 人人妻在人人 | 青青草原综合久久大伊人精品 | 国产午夜无码精品免费看 | 亚洲综合无码久久精品综合 | 亚洲欧洲日本综合aⅴ在线 | 曰韩少妇内射免费播放 | 亚洲а∨天堂久久精品2021 | 东京热男人av天堂 | 亚洲色www成人永久网址 | 中文字幕无码免费久久99 | 风流少妇按摩来高潮 | 国产精品久久国产精品99 | 国产av人人夜夜澡人人爽麻豆 | 99久久婷婷国产综合精品青草免费 | 国产人妻精品午夜福利免费 | 精品久久久久久人妻无码中文字幕 | 国产美女极度色诱视频www | а天堂中文在线官网 | 国产农村妇女高潮大叫 | 亚洲人交乣女bbw | 国产成人综合在线女婷五月99播放 | 国产av剧情md精品麻豆 | 欧美熟妇另类久久久久久多毛 | 性色欲情网站iwww九文堂 | 精品人妻中文字幕有码在线 | 日韩无码专区 | 国产亚av手机在线观看 | 国产精品无套呻吟在线 | 亚洲精品鲁一鲁一区二区三区 | 久久99精品国产麻豆蜜芽 | 牲欲强的熟妇农村老妇女 | 俄罗斯老熟妇色xxxx | 波多野结衣av一区二区全免费观看 | 人妻无码αv中文字幕久久琪琪布 | 乱人伦人妻中文字幕无码久久网 | 内射后入在线观看一区 | 在线看片无码永久免费视频 | 水蜜桃亚洲一二三四在线 | 欧美自拍另类欧美综合图片区 | 日本欧美一区二区三区乱码 | 日日碰狠狠丁香久燥 | 性生交片免费无码看人 | 色欲av亚洲一区无码少妇 | 伊人久久大香线蕉午夜 | 玩弄人妻少妇500系列视频 | 久久久久亚洲精品中文字幕 | 97人妻精品一区二区三区 | 精品国精品国产自在久国产87 | 国产午夜无码视频在线观看 | 人人妻人人澡人人爽欧美一区九九 | av小次郎收藏 | 鲁大师影院在线观看 | 荫蒂被男人添的好舒服爽免费视频 | 国产极品视觉盛宴 | 日欧一片内射va在线影院 | 人妻尝试又大又粗久久 | 精品一二三区久久aaa片 | 老熟妇仑乱视频一区二区 | 亚洲成av人综合在线观看 | 最近的中文字幕在线看视频 | 亚洲а∨天堂久久精品2021 | 久久综合网欧美色妞网 | 中文字幕中文有码在线 | 亚洲日韩av一区二区三区四区 | 天天av天天av天天透 | 欧美人与善在线com | 欧美乱妇无乱码大黄a片 | 99久久人妻精品免费二区 | 大屁股大乳丰满人妻 | 少妇的肉体aa片免费 | 又粗又大又硬毛片免费看 | 蜜桃臀无码内射一区二区三区 | 亚洲人成网站在线播放942 | 国产99久久精品一区二区 | 久久无码中文字幕免费影院蜜桃 | 欧洲极品少妇 | 少妇被粗大的猛进出69影院 | 久9re热视频这里只有精品 | 久久国内精品自在自线 | 国产精品亚洲lv粉色 | 久久无码中文字幕免费影院蜜桃 | 国产色xx群视频射精 | 久久99精品久久久久久 | 日韩精品成人一区二区三区 | 亚洲色大成网站www | 久久久久se色偷偷亚洲精品av | 亚洲 日韩 欧美 成人 在线观看 | 精品无码av一区二区三区 | 亚洲成av人综合在线观看 | 日韩人妻无码中文字幕视频 | 日韩亚洲欧美精品综合 | 精品国产一区二区三区四区在线看 | 永久免费精品精品永久-夜色 | 亚洲精品国产品国语在线观看 | 精品国产一区av天美传媒 | 天海翼激烈高潮到腰振不止 | 装睡被陌生人摸出水好爽 | 亚洲精品综合一区二区三区在线 | 国产亚洲精品久久久久久久久动漫 | 国产成人综合美国十次 | aa片在线观看视频在线播放 | 亚洲色成人中文字幕网站 | 377p欧洲日本亚洲大胆 | 97久久超碰中文字幕 | 97夜夜澡人人爽人人喊中国片 | 高潮毛片无遮挡高清免费 | 国产精品久久久久影院嫩草 | 88国产精品欧美一区二区三区 | 久久亚洲精品成人无码 | 国产成人精品无码播放 | 51国偷自产一区二区三区 | 精品无码国产自产拍在线观看蜜 | 亚洲中文字幕乱码av波多ji | 无码播放一区二区三区 | 亚洲自偷自拍另类第1页 | 99久久无码一区人妻 | 麻豆国产人妻欲求不满谁演的 | 人妻aⅴ无码一区二区三区 | 国产电影无码午夜在线播放 | 无码av免费一区二区三区试看 | 欧美 丝袜 自拍 制服 另类 | 亚洲a无码综合a国产av中文 | 牛和人交xxxx欧美 | 露脸叫床粗话东北少妇 | 中文字幕无线码 | 亚洲大尺度无码无码专区 | 强伦人妻一区二区三区视频18 | 亚洲中文字幕无码中文字在线 | 色诱久久久久综合网ywww | 婷婷综合久久中文字幕蜜桃三电影 | 久久久久久亚洲精品a片成人 | 啦啦啦www在线观看免费视频 | 国产精品嫩草久久久久 | 无套内射视频囯产 | 亚洲精品综合一区二区三区在线 | 久久亚洲中文字幕无码 | 成人无码影片精品久久久 | 露脸叫床粗话东北少妇 | 日韩成人一区二区三区在线观看 | 国产成人综合美国十次 | 午夜精品久久久内射近拍高清 | 国内老熟妇对白xxxxhd | 亚洲熟悉妇女xxx妇女av | 亚洲の无码国产の无码步美 | 国产成人人人97超碰超爽8 | 久久国产36精品色熟妇 | 中文字幕人妻无码一夲道 | 精品偷自拍另类在线观看 | 男女猛烈xx00免费视频试看 | 亚洲中文字幕va福利 | 亚洲最大成人网站 | 人人妻在人人 | 色欲综合久久中文字幕网 | 鲁大师影院在线观看 | 亚洲欧美国产精品久久 | 久久精品国产一区二区三区肥胖 | 99久久精品无码一区二区毛片 | 久久精品中文闷骚内射 | 最近中文2019字幕第二页 | 日本在线高清不卡免费播放 | 无码午夜成人1000部免费视频 | 亚洲の无码国产の无码步美 | 青青久在线视频免费观看 | 老熟女乱子伦 | 内射老妇bbwx0c0ck | 激情亚洲一区国产精品 | 性做久久久久久久免费看 | 伊人久久大香线蕉午夜 | 女人被男人爽到呻吟的视频 | 色狠狠av一区二区三区 | 九一九色国产 | 蜜臀av在线播放 久久综合激激的五月天 | 伊人久久大香线焦av综合影院 | 亚洲一区二区观看播放 | 综合激情五月综合激情五月激情1 | 1000部夫妻午夜免费 | 少妇人妻大乳在线视频 | 中文无码精品a∨在线观看不卡 | 天堂在线观看www | 亚洲人成网站在线播放942 | 六月丁香婷婷色狠狠久久 | 亚洲精品成人av在线 | 熟女俱乐部五十路六十路av | 久久综合狠狠综合久久综合88 | 亚洲色www成人永久网址 | 亚洲春色在线视频 | 成在人线av无码免费 | 两性色午夜视频免费播放 | 中文字幕无码免费久久9一区9 | 免费人成网站视频在线观看 | 日韩精品成人一区二区三区 | 免费无码肉片在线观看 | 成人试看120秒体验区 | 国产人妻人伦精品1国产丝袜 | 精品国产青草久久久久福利 | 午夜丰满少妇性开放视频 | 无码国产色欲xxxxx视频 | 午夜精品久久久内射近拍高清 | 国产精华av午夜在线观看 | 国产区女主播在线观看 | 水蜜桃色314在线观看 | 色一情一乱一伦一视频免费看 | 131美女爱做视频 | 东北女人啪啪对白 | 国产卡一卡二卡三 | a在线亚洲男人的天堂 | 久久99精品国产麻豆 | 欧美国产亚洲日韩在线二区 | 成人性做爰aaa片免费看不忠 | 色欲综合久久中文字幕网 | 亚洲午夜无码久久 | 亚洲国产精品无码久久久久高潮 | 岛国片人妻三上悠亚 | 亚洲精品久久久久avwww潮水 | 国产成人无码av片在线观看不卡 | 狂野欧美性猛交免费视频 | 国产精品无码一区二区桃花视频 | 天堂亚洲免费视频 | 无码av中文字幕免费放 | 图片小说视频一区二区 | 秋霞特色aa大片 | 一本久久a久久精品亚洲 | 永久免费观看国产裸体美女 | 无码人妻丰满熟妇区五十路百度 | 国产午夜亚洲精品不卡下载 | 成人性做爰aaa片免费看不忠 | 无码人妻久久一区二区三区不卡 | 国产成人精品无码播放 | 日日噜噜噜噜夜夜爽亚洲精品 | 麻豆果冻传媒2021精品传媒一区下载 | 男人和女人高潮免费网站 | 亚洲国产精品一区二区第一页 | 国产精品久久久久久久9999 | 精品国产一区二区三区av 性色 | 亚洲第一网站男人都懂 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 久久久精品456亚洲影院 | 久久午夜无码鲁丝片午夜精品 | 国产一精品一av一免费 | 中文字幕 人妻熟女 | 激情五月综合色婷婷一区二区 | 无码人妻黑人中文字幕 | 日本又色又爽又黄的a片18禁 | 欧美精品国产综合久久 | 无码免费一区二区三区 | 麻豆精品国产精华精华液好用吗 | 久久久久成人片免费观看蜜芽 | 99久久99久久免费精品蜜桃 | 国产三级久久久精品麻豆三级 | 日日碰狠狠丁香久燥 | 久久午夜无码鲁丝片午夜精品 | 午夜男女很黄的视频 | 亚洲第一无码av无码专区 | 国产精品无码一区二区桃花视频 | 波多野42部无码喷潮在线 | 精品国产成人一区二区三区 | 亚洲色欲色欲欲www在线 | 在线天堂新版最新版在线8 | 国产激情无码一区二区app | 日本精品人妻无码免费大全 | 欧美日本免费一区二区三区 | 麻豆精品国产精华精华液好用吗 | 精品 日韩 国产 欧美 视频 | 老头边吃奶边弄进去呻吟 | 久久综合网欧美色妞网 | 在线观看国产一区二区三区 | 亚洲成av人片在线观看无码不卡 | 亚拍精品一区二区三区探花 | 久久天天躁夜夜躁狠狠 | 伊人久久婷婷五月综合97色 | 成 人影片 免费观看 | 秋霞特色aa大片 | 97久久精品无码一区二区 | 久久亚洲精品中文字幕无男同 | 无码乱肉视频免费大全合集 | 日本又色又爽又黄的a片18禁 | 久久久久成人精品免费播放动漫 | 人人澡人人妻人人爽人人蜜桃 | 最近中文2019字幕第二页 | 漂亮人妻洗澡被公强 日日躁 | 少妇激情av一区二区 | 国产精品久久久久影院嫩草 | 亚洲小说春色综合另类 | 少妇激情av一区二区 | 免费无码av一区二区 | 熟女体下毛毛黑森林 | 草草网站影院白丝内射 | 亚洲欧洲无卡二区视頻 | 99re在线播放 | 国产精品高潮呻吟av久久 | 日日摸天天摸爽爽狠狠97 | 亚洲娇小与黑人巨大交 | 日日躁夜夜躁狠狠躁 | 国产午夜视频在线观看 | 亚洲码国产精品高潮在线 | 2020久久超碰国产精品最新 | 扒开双腿疯狂进出爽爽爽视频 | 免费乱码人妻系列无码专区 | 麻花豆传媒剧国产免费mv在线 | 国产 浪潮av性色四虎 | 在线亚洲高清揄拍自拍一品区 | 麻花豆传媒剧国产免费mv在线 | 任你躁国产自任一区二区三区 | 日本高清一区免费中文视频 | 亚洲精品午夜国产va久久成人 | 久久精品中文字幕大胸 | 樱花草在线社区www | 国产99久久精品一区二区 | 熟妇人妻无乱码中文字幕 | 丝袜人妻一区二区三区 | 国产精品无码久久av | 无套内射视频囯产 | 精品人妻人人做人人爽 | aa片在线观看视频在线播放 | 在线a亚洲视频播放在线观看 | 色一情一乱一伦 | а天堂中文在线官网 | 亚洲呦女专区 | 无码毛片视频一区二区本码 | 牛和人交xxxx欧美 | 中文字幕无线码免费人妻 | 在教室伦流澡到高潮hnp视频 | 在线播放亚洲第一字幕 | 国产精品国产自线拍免费软件 | 欧美xxxx黑人又粗又长 | 99久久久国产精品无码免费 | 亚洲中文字幕在线观看 | 久久综合香蕉国产蜜臀av | 亚洲精品综合一区二区三区在线 | 99精品视频在线观看免费 | 亚洲s色大片在线观看 | 人妻少妇被猛烈进入中文字幕 | 四虎永久在线精品免费网址 | 国产精品高潮呻吟av久久4虎 | 99精品国产综合久久久久五月天 | 久久 国产 尿 小便 嘘嘘 | 一本久久a久久精品vr综合 | 国产免费久久精品国产传媒 | 国产手机在线αⅴ片无码观看 | 国产精品无码一区二区桃花视频 | 一区二区三区乱码在线 | 欧洲 | 亚洲精品国产精品乱码视色 | 久久99久久99精品中文字幕 | 天天做天天爱天天爽综合网 | 九月婷婷人人澡人人添人人爽 | 亚洲呦女专区 | 欧美亚洲国产一区二区三区 | 搡女人真爽免费视频大全 | 荫蒂被男人添的好舒服爽免费视频 | 色婷婷av一区二区三区之红樱桃 | 无码国内精品人妻少妇 | 青青青爽视频在线观看 | 国产猛烈高潮尖叫视频免费 | 久久久国产精品无码免费专区 | 国内精品人妻无码久久久影院蜜桃 | 波多野42部无码喷潮在线 | 国产另类ts人妖一区二区 | 女人被男人躁得好爽免费视频 | aⅴ在线视频男人的天堂 | 国产尤物精品视频 | 乱人伦人妻中文字幕无码 | 成人欧美一区二区三区黑人免费 | 在线精品国产一区二区三区 | 熟女少妇人妻中文字幕 | 欧美阿v高清资源不卡在线播放 | 国产成人无码a区在线观看视频app | 少妇愉情理伦片bd | 熟女体下毛毛黑森林 | 性欧美疯狂xxxxbbbb | 久久精品国产亚洲精品 | 中国女人内谢69xxxxxa片 | 精品国偷自产在线视频 | 欧美肥老太牲交大战 | 日日干夜夜干 | 欧美高清在线精品一区 | 久久精品一区二区三区四区 | 18无码粉嫩小泬无套在线观看 | 思思久久99热只有频精品66 | 精品久久久中文字幕人妻 | 日韩av无码一区二区三区不卡 | 久久久成人毛片无码 | 精品久久久无码中文字幕 | 亚洲爆乳大丰满无码专区 | 国产午夜福利100集发布 | 色综合视频一区二区三区 | 久精品国产欧美亚洲色aⅴ大片 | 无码av免费一区二区三区试看 | 日产精品高潮呻吟av久久 | 人妻有码中文字幕在线 | 亚洲中文无码av永久不收费 | 无码人妻精品一区二区三区下载 | 亚洲乱码日产精品bd | 久久久久99精品成人片 | 中文字幕乱码亚洲无线三区 | 成人aaa片一区国产精品 | 日日夜夜撸啊撸 | 精品日本一区二区三区在线观看 | 中文字幕色婷婷在线视频 | 欧美35页视频在线观看 | 亚洲无人区午夜福利码高清完整版 | 精品无码国产一区二区三区av | 在线а√天堂中文官网 | 精品熟女少妇av免费观看 | 国产xxx69麻豆国语对白 | 中文字幕日韩精品一区二区三区 | 99久久99久久免费精品蜜桃 | 免费无码肉片在线观看 | 日本xxxx色视频在线观看免费 | 在线播放无码字幕亚洲 | 亚洲区小说区激情区图片区 | 色综合视频一区二区三区 | 一本色道久久综合亚洲精品不卡 | 欧美精品在线观看 | 高清不卡一区二区三区 | 日本熟妇乱子伦xxxx | 日本乱人伦片中文三区 | 草草网站影院白丝内射 | 色一情一乱一伦一区二区三欧美 | 欧美熟妇另类久久久久久多毛 | 久久99久久99精品中文字幕 | 精品一区二区三区无码免费视频 | 欧美日韩亚洲国产精品 | 亚洲精品鲁一鲁一区二区三区 | 秋霞成人午夜鲁丝一区二区三区 | 久精品国产欧美亚洲色aⅴ大片 | 亚洲国产一区二区三区在线观看 | 激情综合激情五月俺也去 | 天天爽夜夜爽夜夜爽 | 欧美黑人性暴力猛交喷水 | 国产办公室秘书无码精品99 | 无遮无挡爽爽免费视频 | 无码av中文字幕免费放 | 国产亚洲精品久久久闺蜜 | 中文字幕无码免费久久9一区9 | 一本大道伊人av久久综合 | 成人精品天堂一区二区三区 | 国产综合色产在线精品 | 中文字幕乱码人妻无码久久 | 久久亚洲中文字幕精品一区 | 亚洲精品成a人在线观看 | 亚洲精品久久久久久久久久久 | 日本肉体xxxx裸交 | 久久人人爽人人爽人人片ⅴ | 亚洲日韩av一区二区三区四区 | 领导边摸边吃奶边做爽在线观看 | 99久久婷婷国产综合精品青草免费 | 久久国产36精品色熟妇 | 亚洲欧美日韩国产精品一区二区 | 又紧又大又爽精品一区二区 | 日本乱偷人妻中文字幕 | 精品国产av色一区二区深夜久久 | 高潮毛片无遮挡高清免费视频 | 成人无码影片精品久久久 | 夜精品a片一区二区三区无码白浆 | 我要看www免费看插插视频 | 国产乱人偷精品人妻a片 | 国产av人人夜夜澡人人爽麻豆 | 四十如虎的丰满熟妇啪啪 | 久激情内射婷内射蜜桃人妖 | 人人妻人人澡人人爽人人精品 | 久久午夜无码鲁丝片 | 精品国产一区二区三区四区 | 国产激情艳情在线看视频 | 免费无码的av片在线观看 | 人人爽人人澡人人人妻 | 国产精品99爱免费视频 | 午夜精品久久久久久久久 | 在线亚洲高清揄拍自拍一品区 | 欧美高清在线精品一区 | 亚洲欧美日韩国产精品一区二区 | 久久久婷婷五月亚洲97号色 | 日韩在线不卡免费视频一区 | 亚洲国产综合无码一区 | 精品久久综合1区2区3区激情 | 精品国产乱码久久久久乱码 | 国产精品久久久午夜夜伦鲁鲁 | 人人妻人人澡人人爽人人精品浪潮 | 亚洲日韩av一区二区三区四区 | 波多野结衣av一区二区全免费观看 | 欧美肥老太牲交大战 | 乱人伦人妻中文字幕无码久久网 | 色综合视频一区二区三区 | 午夜男女很黄的视频 | 欧美黑人性暴力猛交喷水 | 人人妻人人澡人人爽欧美一区九九 | 两性色午夜免费视频 | 国产一区二区三区四区五区加勒比 | av在线亚洲欧洲日产一区二区 | 极品尤物被啪到呻吟喷水 | 自拍偷自拍亚洲精品10p | 久久国产精品二国产精品 | 精品久久综合1区2区3区激情 | 国产情侣作爱视频免费观看 | 夜先锋av资源网站 | 久9re热视频这里只有精品 | 中文字幕av伊人av无码av | 爆乳一区二区三区无码 | 久久99精品久久久久婷婷 | 久久婷婷五月综合色国产香蕉 | 成人无码影片精品久久久 | 女人被爽到呻吟gif动态图视看 | 精品夜夜澡人妻无码av蜜桃 | 成人无码精品一区二区三区 | 久久久久亚洲精品男人的天堂 | 久久综合色之久久综合 | 日本精品人妻无码免费大全 | 无码一区二区三区在线观看 | 老熟妇仑乱视频一区二区 | 亚洲精品一区国产 | 日韩精品a片一区二区三区妖精 | 奇米影视7777久久精品人人爽 | 亚洲国产欧美日韩精品一区二区三区 | 国产一区二区不卡老阿姨 | 国产性生大片免费观看性 | 亚洲第一网站男人都懂 | 国产成人精品三级麻豆 | 国模大胆一区二区三区 | 成人性做爰aaa片免费看 | 国产亚洲人成a在线v网站 | 欧美freesex黑人又粗又大 | 国产精品亚洲一区二区三区喷水 | 少妇一晚三次一区二区三区 | 精品国产一区二区三区四区 | 无套内谢老熟女 | 国产三级精品三级男人的天堂 | 丰满妇女强制高潮18xxxx | 国产猛烈高潮尖叫视频免费 | 人人妻在人人 | 国产亚洲精品久久久久久国模美 | 国产精品亚洲专区无码不卡 | 欧美变态另类xxxx | 亚洲无人区午夜福利码高清完整版 | 亚洲无人区一区二区三区 | 日韩成人一区二区三区在线观看 | 狂野欧美性猛交免费视频 | 无码精品人妻一区二区三区av | 亚洲精品午夜无码电影网 | 久久精品成人欧美大片 | 97色伦图片97综合影院 | av无码电影一区二区三区 | 一本色道婷婷久久欧美 | 亚洲男女内射在线播放 | 日韩欧美成人免费观看 | 亚洲精品一区二区三区在线 | 在线成人www免费观看视频 | 欧美性生交xxxxx久久久 | 色综合久久久无码中文字幕 | 国产亚洲视频中文字幕97精品 | 亚洲国产精品无码一区二区三区 | 久久久久久国产精品无码下载 | 久久综合给久久狠狠97色 | 国内精品人妻无码久久久影院蜜桃 | 牲交欧美兽交欧美 | 亚洲gv猛男gv无码男同 | 亚洲精品一区二区三区婷婷月 | 国产成人精品视频ⅴa片软件竹菊 | 人人妻人人澡人人爽欧美一区 | 中文字幕人妻丝袜二区 | 国产农村乱对白刺激视频 | 亚洲爆乳精品无码一区二区三区 | 国产精品对白交换视频 | 国内揄拍国内精品少妇国语 | 亚洲国产精品成人久久蜜臀 | 东北女人啪啪对白 | 久久久av男人的天堂 | 久久亚洲中文字幕无码 | 在线播放亚洲第一字幕 | 国产sm调教视频在线观看 | 国产精品爱久久久久久久 | 亚洲乱亚洲乱妇50p | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 中文亚洲成a人片在线观看 | 亚洲综合在线一区二区三区 | 亚洲娇小与黑人巨大交 | 国产成人无码一二三区视频 | 夜精品a片一区二区三区无码白浆 | 妺妺窝人体色www在线小说 | 大地资源中文第3页 | 奇米影视888欧美在线观看 | 亚洲熟妇自偷自拍另类 | 综合网日日天干夜夜久久 | 国产精品亚洲а∨无码播放麻豆 | 久久精品人人做人人综合试看 | 熟妇人妻无码xxx视频 | 日本护士xxxxhd少妇 | 中文字幕无码日韩欧毛 | 波多野结衣一区二区三区av免费 | 欧洲欧美人成视频在线 | 国产无套内射久久久国产 | 国产免费无码一区二区视频 | 亚洲综合久久一区二区 | 久久久久av无码免费网 | 久久精品无码一区二区三区 | 亚洲精品成a人在线观看 | 网友自拍区视频精品 | 男人扒开女人内裤强吻桶进去 | 国产凸凹视频一区二区 | 久久久久久国产精品无码下载 | 亚洲午夜福利在线观看 | 四虎国产精品一区二区 | 国产精品免费大片 | 国产无av码在线观看 | 国产精品久免费的黄网站 | 亚洲欧洲日本无在线码 | 国色天香社区在线视频 | 国产真实乱对白精彩久久 | 亚洲区小说区激情区图片区 | 国产成人综合美国十次 | 亚洲精品www久久久 | 久久99精品国产.久久久久 | 99久久人妻精品免费二区 | 国产精品无码久久av | 久久久久久久人妻无码中文字幕爆 | 日本精品人妻无码免费大全 | 日韩av无码一区二区三区不卡 | 亚洲小说图区综合在线 | 熟妇人妻无码xxx视频 | 一本久久a久久精品亚洲 | 欧美丰满熟妇xxxx | 爆乳一区二区三区无码 | 任你躁在线精品免费 | 无码人中文字幕 | 国产精品久久久午夜夜伦鲁鲁 | 对白脏话肉麻粗话av | 人妻天天爽夜夜爽一区二区 | 亚洲国产精品无码一区二区三区 | 久久亚洲中文字幕无码 | 亚洲精品欧美二区三区中文字幕 | 麻豆精品国产精华精华液好用吗 | 午夜男女很黄的视频 | 国产区女主播在线观看 | √天堂中文官网8在线 | 99麻豆久久久国产精品免费 | 中文字幕人妻无码一区二区三区 | 呦交小u女精品视频 | 最新国产乱人伦偷精品免费网站 | 色综合久久网 | 男女作爱免费网站 | 亚洲欧洲无卡二区视頻 | 天堂无码人妻精品一区二区三区 | 在线亚洲高清揄拍自拍一品区 | 亚洲色欲久久久综合网东京热 | 欧美日韩在线亚洲综合国产人 | 久久综合狠狠综合久久综合88 | 色一情一乱一伦 | 亚洲欧洲中文日韩av乱码 | 国产亚洲精品精品国产亚洲综合 | 青春草在线视频免费观看 | а√资源新版在线天堂 | 日韩精品成人一区二区三区 | 久久午夜无码鲁丝片秋霞 | 丰腴饱满的极品熟妇 | 国产97色在线 | 免 | 亚洲人亚洲人成电影网站色 | 亚洲码国产精品高潮在线 | 亚洲春色在线视频 | 国产成人一区二区三区别 | 久久久久久久人妻无码中文字幕爆 | 日本一区二区更新不卡 | 女人高潮内射99精品 | av人摸人人人澡人人超碰下载 | 99国产欧美久久久精品 | 国产后入清纯学生妹 | 欧美丰满熟妇xxxx | 欧美真人作爱免费视频 | 人人澡人摸人人添 | 国产av无码专区亚洲a∨毛片 | 久青草影院在线观看国产 | 欧美人与牲动交xxxx | 亚洲日韩av片在线观看 | 在线精品国产一区二区三区 | 麻豆国产人妻欲求不满谁演的 | 日本精品久久久久中文字幕 | 国模大胆一区二区三区 | 国产精品永久免费视频 | 狠狠综合久久久久综合网 | 国产无套内射久久久国产 | 无码一区二区三区在线观看 | 亚洲成在人网站无码天堂 | 国产亚洲精品精品国产亚洲综合 | 日韩精品乱码av一区二区 | 国产凸凹视频一区二区 | 欧美三级不卡在线观看 | 日本护士xxxxhd少妇 | 亚洲精品一区二区三区四区五区 | 亚洲欧美国产精品久久 | 国产在线精品一区二区高清不卡 | 成人av无码一区二区三区 | 欧美兽交xxxx×视频 | 精品久久久久久人妻无码中文字幕 | 亚洲日本一区二区三区在线 | 久久午夜无码鲁丝片 | 亚洲日本一区二区三区在线 | 久久99精品国产麻豆 | 乱人伦人妻中文字幕无码 | 国产亚洲精品久久久ai换 | 一个人看的视频www在线 | 99久久久无码国产aaa精品 | 亚洲国产精品美女久久久久 | 亚洲欧美综合区丁香五月小说 | 久久精品国产一区二区三区 | 中文字幕无码av波多野吉衣 | 在线a亚洲视频播放在线观看 | 久久久久久久女国产乱让韩 | 国产精品沙发午睡系列 | 国产麻豆精品精东影业av网站 | 精品国产国产综合精品 | 亚洲精品国偷拍自产在线麻豆 | 日本肉体xxxx裸交 | 亚洲精品国偷拍自产在线观看蜜桃 | 午夜无码区在线观看 | 中文无码成人免费视频在线观看 | aa片在线观看视频在线播放 | 色婷婷久久一区二区三区麻豆 | 内射欧美老妇wbb | 亚洲男女内射在线播放 | 性做久久久久久久免费看 | 亚洲国产av美女网站 | 亚洲日韩精品欧美一区二区 | 亚洲综合无码一区二区三区 | 7777奇米四色成人眼影 | 国产精品理论片在线观看 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产真实夫妇视频 | 中文字幕日韩精品一区二区三区 | 日韩人妻无码一区二区三区久久99 | 7777奇米四色成人眼影 | 亚洲成a人片在线观看日本 | 色一情一乱一伦一视频免费看 | 中文字幕精品av一区二区五区 | 亚洲一区二区观看播放 | 无码精品国产va在线观看dvd | 中文字幕av伊人av无码av | 网友自拍区视频精品 | 精品国产青草久久久久福利 | 午夜丰满少妇性开放视频 | 亚洲精品综合一区二区三区在线 | 国产女主播喷水视频在线观看 | 欧美午夜特黄aaaaaa片 | 亚洲国产高清在线观看视频 | 欧美猛少妇色xxxxx | 色一情一乱一伦一视频免费看 | 亚洲区欧美区综合区自拍区 | 久久99久久99精品中文字幕 | 国产无套内射久久久国产 | 蜜臀aⅴ国产精品久久久国产老师 | 亚洲中文字幕久久无码 | 国产尤物精品视频 | 狂野欧美性猛xxxx乱大交 | 丝袜人妻一区二区三区 | 日本xxxx色视频在线观看免费 | 久久天天躁狠狠躁夜夜免费观看 | 丝袜 中出 制服 人妻 美腿 | 少妇高潮一区二区三区99 | 成年女人永久免费看片 | 欧美精品一区二区精品久久 | 无码吃奶揉捏奶头高潮视频 | 性色av无码免费一区二区三区 | 一本大道伊人av久久综合 | 久久久久久久女国产乱让韩 | 内射后入在线观看一区 | 夜夜躁日日躁狠狠久久av | 国产免费无码一区二区视频 | 国产内射爽爽大片视频社区在线 | 青青久在线视频免费观看 | 国产肉丝袜在线观看 | 天堂无码人妻精品一区二区三区 | 国模大胆一区二区三区 | 亚洲自偷自拍另类第1页 | 欧美野外疯狂做受xxxx高潮 | 2019nv天堂香蕉在线观看 | 亚洲区欧美区综合区自拍区 | 国产真人无遮挡作爱免费视频 | 乱码av麻豆丝袜熟女系列 | 国产精品高潮呻吟av久久4虎 | 国产午夜手机精彩视频 | 亚洲自偷自拍另类第1页 | 国产内射爽爽大片视频社区在线 | 99久久99久久免费精品蜜桃 | 中文精品无码中文字幕无码专区 | 性色欲情网站iwww九文堂 | 99久久亚洲精品无码毛片 | 久久久国产精品无码免费专区 | 日本爽爽爽爽爽爽在线观看免 | 在线播放无码字幕亚洲 | 人妻插b视频一区二区三区 | 日本大乳高潮视频在线观看 | 国产精品第一国产精品 | 老熟妇仑乱视频一区二区 | 中文字幕乱码中文乱码51精品 | 荫蒂被男人添的好舒服爽免费视频 | 国产av人人夜夜澡人人爽麻豆 | 在线а√天堂中文官网 | 1000部啪啪未满十八勿入下载 | 日本一区二区更新不卡 | 久久久久久久久888 | 久青草影院在线观看国产 | 国产电影无码午夜在线播放 | 国产精品高潮呻吟av久久 | 国产免费观看黄av片 | 欧美激情一区二区三区成人 | 一二三四社区在线中文视频 | 性色欲网站人妻丰满中文久久不卡 | 日欧一片内射va在线影院 | 亚洲aⅴ无码成人网站国产app | 人妻少妇精品久久 | 少妇厨房愉情理9仑片视频 | 乱人伦人妻中文字幕无码久久网 | 日韩欧美中文字幕公布 | 国产又爽又黄又刺激的视频 | aⅴ亚洲 日韩 色 图网站 播放 | 久久久久亚洲精品中文字幕 | 国产小呦泬泬99精品 | 亚洲综合伊人久久大杳蕉 | 久久伊人色av天堂九九小黄鸭 | 99久久无码一区人妻 | 亚洲人成网站免费播放 | 欧美第一黄网免费网站 | 色综合天天综合狠狠爱 | 狠狠色丁香久久婷婷综合五月 | 国产精品毛片一区二区 | 夜夜影院未满十八勿进 | 麻豆av传媒蜜桃天美传媒 | 亚洲 日韩 欧美 成人 在线观看 | 欧洲精品码一区二区三区免费看 | 狠狠色欧美亚洲狠狠色www | 国产精品爱久久久久久久 | 福利一区二区三区视频在线观看 | 老子影院午夜伦不卡 | 狂野欧美性猛交免费视频 | av无码电影一区二区三区 | 人妻体内射精一区二区三四 | 国产人妻大战黑人第1集 | 久久97精品久久久久久久不卡 | 大肉大捧一进一出好爽视频 | a在线观看免费网站大全 | 精品无码av一区二区三区 | 日本大乳高潮视频在线观看 | 午夜理论片yy44880影院 | 亚洲午夜福利在线观看 | 欧美日韩久久久精品a片 | 性欧美熟妇videofreesex | 无码成人精品区在线观看 | 欧美精品一区二区精品久久 | 精品国产乱码久久久久乱码 | 精品无码一区二区三区的天堂 | 5858s亚洲色大成网站www | 玩弄人妻少妇500系列视频 | 日韩精品一区二区av在线 | 性色欲网站人妻丰满中文久久不卡 | 帮老师解开蕾丝奶罩吸乳网站 | 好男人www社区 | 亚洲成在人网站无码天堂 | 免费乱码人妻系列无码专区 | 久久久久亚洲精品男人的天堂 | 中文字幕色婷婷在线视频 | 中文字幕人成乱码熟女app | 国产精品人人爽人人做我的可爱 | 2020最新国产自产精品 | 日本精品人妻无码77777 天堂一区人妻无码 | 午夜免费福利小电影 | 亚洲色偷偷男人的天堂 | 自拍偷自拍亚洲精品10p | 曰韩少妇内射免费播放 | 六月丁香婷婷色狠狠久久 | 中文字幕+乱码+中文字幕一区 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | av无码久久久久不卡免费网站 | 中文字幕人成乱码熟女app | 亚洲一区二区三区在线观看网站 | 97资源共享在线视频 | 2019nv天堂香蕉在线观看 | 精品一二三区久久aaa片 | 99精品国产综合久久久久五月天 | 亚洲中文字幕va福利 | 97精品人妻一区二区三区香蕉 | 性欧美牲交在线视频 | 欧美国产日韩久久mv | 久久久亚洲欧洲日产国码αv | 乱中年女人伦av三区 | 国产网红无码精品视频 | 无码国模国产在线观看 | 国产精品久久精品三级 | 亚洲春色在线视频 | 欧美喷潮久久久xxxxx | 少妇人妻偷人精品无码视频 | 亚洲va欧美va天堂v国产综合 | 中文无码成人免费视频在线观看 | 99久久人妻精品免费二区 | 国产午夜无码视频在线观看 | 国产精品久久久午夜夜伦鲁鲁 | 永久免费观看国产裸体美女 | 精品一区二区不卡无码av | 日韩无套无码精品 | 精品人妻av区 | 欧洲vodafone精品性 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 天天爽夜夜爽夜夜爽 | 四虎永久在线精品免费网址 | 香港三级日本三级妇三级 | 草草网站影院白丝内射 | 国产精品美女久久久久av爽李琼 | 婷婷五月综合缴情在线视频 | 成人亚洲精品久久久久 | 在线 国产 欧美 亚洲 天堂 | 久久久久成人片免费观看蜜芽 | 亚洲欧洲中文日韩av乱码 | 老太婆性杂交欧美肥老太 | 色婷婷综合激情综在线播放 | 国产特级毛片aaaaaaa高清 | 色老头在线一区二区三区 | 欧美激情综合亚洲一二区 | 少妇久久久久久人妻无码 | 六十路熟妇乱子伦 | 国产乡下妇女做爰 | 久久久亚洲欧洲日产国码αv | 国产乱码精品一品二品 | 国产精品爱久久久久久久 | 欧美精品一区二区精品久久 | 玩弄少妇高潮ⅹxxxyw | 蜜桃视频韩日免费播放 | 欧美精品一区二区精品久久 | 狠狠色噜噜狠狠狠7777奇米 | 国产sm调教视频在线观看 | 国产麻豆精品一区二区三区v视界 | 成年美女黄网站色大免费视频 | 欧美性猛交内射兽交老熟妇 | 四虎4hu永久免费 | 色 综合 欧美 亚洲 国产 | 九月婷婷人人澡人人添人人爽 | 中文无码成人免费视频在线观看 | 久久久精品欧美一区二区免费 | 在线a亚洲视频播放在线观看 | 国产舌乚八伦偷品w中 | 风流少妇按摩来高潮 | 99久久精品日本一区二区免费 | 精品国精品国产自在久国产87 | 久久无码人妻影院 | 熟妇女人妻丰满少妇中文字幕 | 国产精品va在线播放 | 小泽玛莉亚一区二区视频在线 | 日韩视频 中文字幕 视频一区 | 国内丰满熟女出轨videos | 成人片黄网站色大片免费观看 | 国产精品亚洲五月天高清 | 强奷人妻日本中文字幕 | 伊在人天堂亚洲香蕉精品区 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 人人妻人人澡人人爽欧美一区九九 | 无码免费一区二区三区 | 亚洲综合在线一区二区三区 | 98国产精品综合一区二区三区 | 国产精品美女久久久网av | 国产成人精品久久亚洲高清不卡 | 色一情一乱一伦一区二区三欧美 | 亚洲乱码日产精品bd | 国产特级毛片aaaaaa高潮流水 | 国产精品99久久精品爆乳 | 国产免费观看黄av片 | 国产亚洲日韩欧美另类第八页 | 久久国产劲爆∧v内射 | 亚洲第一无码av无码专区 | 四虎影视成人永久免费观看视频 | 少妇被粗大的猛进出69影院 | 国产av无码专区亚洲a∨毛片 | 国产av无码专区亚洲a∨毛片 | 好爽又高潮了毛片免费下载 | 欧美xxxxx精品 | 大乳丰满人妻中文字幕日本 | 亚洲狠狠婷婷综合久久 | 在线播放无码字幕亚洲 | a国产一区二区免费入口 | 日韩成人一区二区三区在线观看 | 国产精品久久久久7777 | www一区二区www免费 | 国产成人无码一二三区视频 | 精品无码国产一区二区三区av | 久久精品丝袜高跟鞋 | 伊人久久大香线蕉av一区二区 | 久久天天躁狠狠躁夜夜免费观看 | 成人亚洲精品久久久久软件 | 欧美日韩亚洲国产精品 | 久久久av男人的天堂 | 国产精品久免费的黄网站 | 亚洲欧洲日本无在线码 | 亚洲日本va午夜在线电影 | 久久综合给久久狠狠97色 | 午夜丰满少妇性开放视频 | 在线观看国产一区二区三区 | 奇米影视7777久久精品人人爽 | 亚洲精品中文字幕久久久久 | 精品无人区无码乱码毛片国产 | 国产亚洲tv在线观看 | 一本色道久久综合狠狠躁 | 好爽又高潮了毛片免费下载 | 天天躁日日躁狠狠躁免费麻豆 | 久久亚洲精品成人无码 | 国产人妻久久精品二区三区老狼 | 中文字幕日韩精品一区二区三区 | 久久久中文字幕日本无吗 | 鲁一鲁av2019在线 | 国产精品欧美成人 | 久久亚洲精品中文字幕无男同 | 男女爱爱好爽视频免费看 | 亚洲中文字幕乱码av波多ji | 久久久久av无码免费网 | 图片区 小说区 区 亚洲五月 | 精品乱子伦一区二区三区 | 午夜精品一区二区三区在线观看 | 99久久精品午夜一区二区 | 午夜精品久久久久久久久 | 精品国产国产综合精品 | 大肉大捧一进一出视频出来呀 | 欧美性猛交xxxx富婆 | 成人精品视频一区二区 | 国产肉丝袜在线观看 | 国产三级精品三级男人的天堂 | 日本爽爽爽爽爽爽在线观看免 | 强辱丰满人妻hd中文字幕 | 一本色道久久综合亚洲精品不卡 | 成人性做爰aaa片免费看不忠 | 国产成人久久精品流白浆 | 色狠狠av一区二区三区 | aⅴ在线视频男人的天堂 | 亚洲精品无码人妻无码 | 免费人成网站视频在线观看 | 日本熟妇乱子伦xxxx | 精品夜夜澡人妻无码av蜜桃 | 鲁一鲁av2019在线 | 亚洲成a人片在线观看日本 | 国产超级va在线观看视频 | 亚洲欧美精品aaaaaa片 | 999久久久国产精品消防器材 | 麻豆精品国产精华精华液好用吗 | 午夜精品一区二区三区在线观看 | 久久精品国产精品国产精品污 | 亚洲无人区午夜福利码高清完整版 | 国产成人综合在线女婷五月99播放 | 国产精品国产自线拍免费软件 | 亚洲色成人中文字幕网站 | 国内精品人妻无码久久久影院 | 亚洲va欧美va天堂v国产综合 | 国产特级毛片aaaaaa高潮流水 | 国产电影无码午夜在线播放 | av无码久久久久不卡免费网站 | 亚洲狠狠婷婷综合久久 | 久久99精品久久久久久动态图 | 国产麻豆精品一区二区三区v视界 | 国产美女精品一区二区三区 | 亚洲国产精品美女久久久久 | 免费无码的av片在线观看 | 5858s亚洲色大成网站www | 久久久亚洲欧洲日产国码αv | 国产特级毛片aaaaaaa高清 | 色欲av亚洲一区无码少妇 | 天堂久久天堂av色综合 | 蜜臀av无码人妻精品 | 一本久久a久久精品亚洲 | 狠狠色噜噜狠狠狠7777奇米 | 国产成人av免费观看 | 久久 国产 尿 小便 嘘嘘 | 日日躁夜夜躁狠狠躁 | 无码人妻丰满熟妇区五十路百度 | 国产av剧情md精品麻豆 | 午夜无码区在线观看 | 国产午夜亚洲精品不卡 | 中文字幕乱码中文乱码51精品 | 国产人成高清在线视频99最全资源 | 狠狠色噜噜狠狠狠7777奇米 | 精品国产青草久久久久福利 | 日本va欧美va欧美va精品 | 亚洲精品一区三区三区在线观看 | 国产成人久久精品流白浆 | 两性色午夜免费视频 | 国产精品久久国产三级国 | 最新国产麻豆aⅴ精品无码 | 亚洲爆乳精品无码一区二区三区 | 国产一区二区三区日韩精品 | 俺去俺来也在线www色官网 | 天天av天天av天天透 | 日本熟妇乱子伦xxxx | 久久久久成人精品免费播放动漫 | 免费人成网站视频在线观看 | 中文无码伦av中文字幕 | 国产精品免费大片 | 久久综合给久久狠狠97色 | 欧美真人作爱免费视频 | 亚洲精品成人福利网站 | 无码播放一区二区三区 | 国产手机在线αⅴ片无码观看 | 蜜臀aⅴ国产精品久久久国产老师 | 久久综合网欧美色妞网 | 日韩av无码一区二区三区不卡 | www国产亚洲精品久久久日本 | 九九久久精品国产免费看小说 | 中文字幕无码日韩欧毛 | 水蜜桃色314在线观看 | 综合网日日天干夜夜久久 | 日本欧美一区二区三区乱码 | 人妻少妇精品无码专区动漫 | 久久婷婷五月综合色国产香蕉 | 久久综合九色综合97网 | 欧美性猛交内射兽交老熟妇 | 人人澡人人透人人爽 | 亚洲一区二区三区国产精华液 | 乱人伦人妻中文字幕无码久久网 | 少妇人妻大乳在线视频 | 少妇无套内谢久久久久 | 好爽又高潮了毛片免费下载 | 久久五月精品中文字幕 | 中文字幕日韩精品一区二区三区 | 99在线 | 亚洲 | 又粗又大又硬毛片免费看 | 男人扒开女人内裤强吻桶进去 | 欧美性生交xxxxx久久久 | 乌克兰少妇xxxx做受 | 亚洲国产欧美日韩精品一区二区三区 | 一区二区三区高清视频一 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 国产乱子伦视频在线播放 | 伊人久久大香线焦av综合影院 | 自拍偷自拍亚洲精品被多人伦好爽 | 国产精品免费大片 | 少妇人妻大乳在线视频 | 99久久婷婷国产综合精品青草免费 | 国产精品办公室沙发 | 少妇厨房愉情理9仑片视频 | 久久久久久久女国产乱让韩 | 精品 日韩 国产 欧美 视频 | 成人免费视频视频在线观看 免费 | 久久亚洲中文字幕无码 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 亚洲色大成网站www | 国产成人人人97超碰超爽8 | 国产情侣作爱视频免费观看 | 一本久道久久综合狠狠爱 | 人妻少妇精品无码专区二区 | 日本一区二区三区免费播放 | 性欧美熟妇videofreesex | 欧美黑人巨大xxxxx | 亚洲国产精品久久人人爱 | 无码一区二区三区在线观看 | 国产精品第一国产精品 | 精品国产乱码久久久久乱码 | 久久久久久国产精品无码下载 | 国产亚洲精品久久久ai换 | 久久精品女人天堂av免费观看 | 国産精品久久久久久久 | 欧美肥老太牲交大战 | 欧美猛少妇色xxxxx | 免费无码午夜福利片69 | а√资源新版在线天堂 | 大肉大捧一进一出好爽视频 | 2019午夜福利不卡片在线 | 国产精品内射视频免费 | 亚洲成a人片在线观看无码 | 丝袜足控一区二区三区 | 久久久久久久女国产乱让韩 | 伊人久久大香线蕉亚洲 | 久久精品无码一区二区三区 | 国产无遮挡又黄又爽免费视频 | 成熟女人特级毛片www免费 | 成人免费视频视频在线观看 免费 | 久9re热视频这里只有精品 | 88国产精品欧美一区二区三区 | 一个人看的视频www在线 | 人妻天天爽夜夜爽一区二区 | 波多野结衣av在线观看 | 亚洲中文字幕久久无码 | 免费观看激色视频网站 | 大色综合色综合网站 | 国产成人av免费观看 | 久久亚洲a片com人成 | 久久久久久av无码免费看大片 | 帮老师解开蕾丝奶罩吸乳网站 | 国内老熟妇对白xxxxhd | 国精品人妻无码一区二区三区蜜柚 | 无码福利日韩神码福利片 | 免费人成在线视频无码 | 两性色午夜视频免费播放 | 奇米影视7777久久精品人人爽 | 成人免费视频一区二区 | 狂野欧美性猛交免费视频 | 国产电影无码午夜在线播放 | 内射白嫩少妇超碰 | 欧美人与禽猛交狂配 | 人妻少妇精品视频专区 | 永久免费观看美女裸体的网站 | 人人妻在人人 | 亚洲另类伦春色综合小说 | 东京热一精品无码av | 影音先锋中文字幕无码 | 久久午夜无码鲁丝片午夜精品 | 天天躁夜夜躁狠狠是什么心态 | 久久久久亚洲精品男人的天堂 | 三上悠亚人妻中文字幕在线 | 偷窥日本少妇撒尿chinese | 伊人久久大香线蕉av一区二区 | 天天燥日日燥 | 久久亚洲日韩精品一区二区三区 | 无码中文字幕色专区 | 2020久久超碰国产精品最新 | 丰满肥臀大屁股熟妇激情视频 | 中文字幕人成乱码熟女app | 欧美精品免费观看二区 | 狠狠色丁香久久婷婷综合五月 | 国产激情一区二区三区 | 免费人成在线观看网站 | 国产97在线 | 亚洲 | 亚洲中文字幕av在天堂 | 亚洲精品一区三区三区在线观看 | 成年美女黄网站色大免费视频 | 成人试看120秒体验区 | 骚片av蜜桃精品一区 | 思思久久99热只有频精品66 | 亚洲gv猛男gv无码男同 | 久久精品中文字幕大胸 | 日韩精品无码一区二区中文字幕 | 亚无码乱人伦一区二区 | 国产欧美亚洲精品a | 兔费看少妇性l交大片免费 | 无码帝国www无码专区色综合 | 台湾无码一区二区 | 欧美 亚洲 国产 另类 | 久久精品女人天堂av免费观看 | 亚洲日韩av一区二区三区中文 | 亚洲精品一区二区三区在线观看 | 午夜嘿嘿嘿影院 | 久久熟妇人妻午夜寂寞影院 | 国精品人妻无码一区二区三区蜜柚 | 亚洲色大成网站www国产 | 成人欧美一区二区三区黑人 | 亚洲va欧美va天堂v国产综合 | 午夜无码人妻av大片色欲 | 亚洲一区二区三区在线观看网站 | 免费无码的av片在线观看 | 国语自产偷拍精品视频偷 | 国模大胆一区二区三区 | 亚洲欧美精品aaaaaa片 | 精品国产一区av天美传媒 | 国产日产欧产精品精品app | 色综合久久网 | 人人妻在人人 | 婷婷丁香五月天综合东京热 | 精品久久久无码中文字幕 | 成人性做爰aaa片免费看不忠 | 黑人巨大精品欧美黑寡妇 | 亚洲精品国产品国语在线观看 | 天下第一社区视频www日本 | 97久久精品无码一区二区 | 欧美三级不卡在线观看 | 久久99精品国产.久久久久 | 久久综合激激的五月天 | 成人性做爰aaa片免费看 | 亚洲成a人片在线观看日本 | 亚洲а∨天堂久久精品2021 | 亚洲乱码国产乱码精品精 | 纯爱无遮挡h肉动漫在线播放 | 丰满少妇高潮惨叫视频 | 麻豆成人精品国产免费 | 亚洲日韩av片在线观看 | 麻豆成人精品国产免费 | 呦交小u女精品视频 | 国产精品理论片在线观看 | 特级做a爰片毛片免费69 | 久久精品一区二区三区四区 | 中文字幕av无码一区二区三区电影 | 国内精品久久久久久中文字幕 | 丰满人妻翻云覆雨呻吟视频 | 亚洲综合无码久久精品综合 | 久久亚洲国产成人精品性色 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产艳妇av在线观看果冻传媒 | 欧美精品在线观看 | 麻豆果冻传媒2021精品传媒一区下载 | 少妇久久久久久人妻无码 | 亚洲色在线无码国产精品不卡 | 2019午夜福利不卡片在线 | 99久久精品日本一区二区免费 | 狠狠色丁香久久婷婷综合五月 | 天天综合网天天综合色 | 免费国产成人高清在线观看网站 | 天天做天天爱天天爽综合网 | 狠狠cao日日穞夜夜穞av | 在线视频网站www色 | 国产无套粉嫩白浆在线 | 中文字幕无码热在线视频 | 精品国产一区二区三区四区 | 国产人妻人伦精品 | 久在线观看福利视频 | 色诱久久久久综合网ywww | 精品人妻人人做人人爽夜夜爽 | 成 人 网 站国产免费观看 | 成人性做爰aaa片免费看不忠 | 无码人妻少妇伦在线电影 | 日本一本二本三区免费 | 男女超爽视频免费播放 | 国产午夜福利亚洲第一 | 高潮毛片无遮挡高清免费 | 国产精品二区一区二区aⅴ污介绍 | 无码国内精品人妻少妇 | 国产真实伦对白全集 | 亚洲中文字幕在线观看 | 久久99精品久久久久婷婷 | 无码一区二区三区在线观看 | 国产色视频一区二区三区 | 国产尤物精品视频 | 中文字幕精品av一区二区五区 | 97色伦图片97综合影院 | 久久99精品国产.久久久久 | 兔费看少妇性l交大片免费 | 玩弄人妻少妇500系列视频 | 熟妇女人妻丰满少妇中文字幕 | 在线成人www免费观看视频 | 日本大乳高潮视频在线观看 | 亚洲一区二区三区香蕉 | 无码av中文字幕免费放 | 亚洲精品一区二区三区婷婷月 | 大肉大捧一进一出好爽视频 | 性生交片免费无码看人 | 亚洲热妇无码av在线播放 | 色 综合 欧美 亚洲 国产 | 国产精品手机免费 | 久久www免费人成人片 | 中文字幕乱码亚洲无线三区 | 国产9 9在线 | 中文 | 伊人久久大香线焦av综合影院 | 大肉大捧一进一出好爽视频 | 高潮喷水的毛片 | 久久久久久久久蜜桃 | 亚洲精品一区二区三区大桥未久 | 无码人妻黑人中文字幕 | 人人爽人人爽人人片av亚洲 | 国产精品手机免费 | 日日碰狠狠躁久久躁蜜桃 | 国产suv精品一区二区五 | 国产三级精品三级男人的天堂 | 久久天天躁夜夜躁狠狠 |