日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android-Multidex安装流程解析

發(fā)布時(shí)間:2024/9/30 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android-Multidex安装流程解析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Android-Multidex安裝流程解析

關(guān)于為什么需要引入Multidex支持以及如何配置Multidex可參考官網(wǎng),本篇不做闡述,本篇著重分析Multidex1.0.2源碼進(jìn)行分析

大家都知道配置Multidex都需要在Application中的添加這樣代碼

public class MyApplication extends SomeOtherApplication {@Overrideprotected void attachBaseContext(Context base) {super.attachBaseContext(context);Multidex.install(this);} }

其關(guān)鍵代碼是Multidex類的install方法,我們來(lái)看看內(nèi)部如何實(shí)現(xiàn)

public final class MultiDex {static final String TAG = "MultiDex";private static final Set<File> installedApk = new HashSet();private static final boolean IS_VM_MULTIDEX_CAPABLE = isVMMultidexCapable(System.getProperty("java.vm.version"));...private MultiDex() {}public static void install(Context context) {Log.i("MultiDex", "Installing application");//1、判斷虛擬機(jī)是否支持MultiDexif(IS_VM_MULTIDEX_CAPABLE) {Log.i("MultiDex", "VM has multidex support, MultiDex support library is disabled.");} else if(VERSION.SDK_INT < 4) {//2、Android SDK小于4不支持Multidexthrow new RuntimeException("MultiDex installation failed. SDK " + VERSION.SDK_INT + " is unsupported. Min SDK version is " + 4 + ".");} else {try {ApplicationInfo applicationInfo = getApplicationInfo(context);if(applicationInfo == null) {Log.i("MultiDex", "No ApplicationInfo available, i.e. running on a test Context: MultiDex support library is disabled.");return;}//3、關(guān)鍵代碼doInstallation(context, new File(applicationInfo.sourceDir), new File(applicationInfo.dataDir), "secondary-dexes", "");} catch (Exception var2) {Log.e("MultiDex", "MultiDex installation failure", var2);throw new RuntimeException("MultiDex installation failed (" + var2.getMessage() + ").");}Log.i("MultiDex", "install done");}}static boolean isVMMultidexCapable(String versionString) {boolean isMultidexCapable = false;if(versionString != null) {Matcher matcher = Pattern.compile("(\\d+)\\.(\\d+)(\\.\\d+)?").matcher(versionString);if(matcher.matches()) {try {int major = Integer.parseInt(matcher.group(1));int minor = Integer.parseInt(matcher.group(2));isMultidexCapable = major > 2 || major == 2 && minor >= 1;} catch (NumberFormatException var5) {;}}}Log.i("MultiDex", "VM with version " + versionString + (isMultidexCapable?" has multidex support":" does not have multidex support"));return isMultidexCapable;} }

小結(jié):Multidex.install方法可分為如下3步
1、判斷VM是否原生支持Multidex,如果支持就不進(jìn)行Multidex.install方法
2、如果Android SDK小于4,直接拋出異常提示不支持Multidex
3、也是最關(guān)鍵的代碼即doInstallation方法


繼續(xù)看doInstallation方法

private static void doInstallation(Context mainContext, File sourceApk, File dataDir, String secondaryFolderName, String prefsKeyPrefix) throws IOException, IllegalArgumentException, IllegalAccessException, NoSuchFieldException, InvocationTargetException, NoSuchMethodException {//installedApk是個(gè)全局靜態(tài)變量Set集合Set var5 = installedApk;synchronized(installedApk) {if(!installedApk.contains(sourceApk)) {//1、如果集合中不存在將souceApk文件加入其中installedApk.add(sourceApk);//Android5.0以及以上版本使用ART機(jī)制運(yùn)行,后者原生支持從 APK 文件加載多個(gè) DEX 文件if(VERSION.SDK_INT > 20) {Log.w("MultiDex", "MultiDex is not guaranteed to work in SDK version " + VERSION.SDK_INT + ": SDK version higher than " + 20 + " should be backed by " + "runtime with built-in multidex capabilty but it's not the " + "case here: java.vm.version=\"" + System.getProperty("java.vm.version") + "\"");}ClassLoader loader;try {//此處獲取的類型為PathClassLoader,后面安裝非主dex會(huì)使用到loader = mainContext.getClassLoader();} catch (RuntimeException var11) {Log.w("MultiDex", "Failure while trying to obtain Context class loader. Must be running in test mode. Skip patching.", var11);return;}if(loader == null) {Log.e("MultiDex", "Context class loader is null. Must be running in test mode. Skip patching.");} else {try {//2、刪除secondar-dexs目錄(/data/data/app_package_name/files/secondary-dexes)clearOldDexDir(mainContext);} catch (Throwable var10) {Log.w("MultiDex", "Something went wrong when trying to clear old MultiDex extraction, continuing without cleaning.", var10);}//3、創(chuàng)建"secondar-dexs"目錄,用于存儲(chǔ)提取的zipFile dexDir = getDexDir(mainContext, dataDir, secondaryFolderName);//4、從副dex中提取zip并返回zip列表List<? extends File> files = MultiDexExtractor.load(mainContext, sourceApk, dexDir, prefsKeyPrefix, false);//5、將提取出所有zip添加到BaseDexClassLoader中pathList屬性installSecondaryDexes(loader, dexDir, files);}}}}//刪除舊dex目錄 private static void clearOldDexDir(Context context) throws Exception {File dexDir = new File(context.getFilesDir(), "secondary-dexes");if(dexDir.isDirectory()) {Log.i("MultiDex", "Clearing old secondary dex dir (" + dexDir.getPath() + ").");File[] files = dexDir.listFiles();if(files == null) {Log.w("MultiDex", "Failed to list secondary dex dir content (" + dexDir.getPath() + ").");return;}File[] var3 = files;int var4 = files.length;for(int var5 = 0; var5 < var4; ++var5) {File oldFile = var3[var5];Log.i("MultiDex", "Trying to delete old file " + oldFile.getPath() + " of size " + oldFile.length());if(!oldFile.delete()) {Log.w("MultiDex", "Failed to delete old file " + oldFile.getPath());} else {Log.i("MultiDex", "Deleted old file " + oldFile.getPath());}}if(!dexDir.delete()) {Log.w("MultiDex", "Failed to delete secondary dex dir " + dexDir.getPath());} else {Log.i("MultiDex", "Deleted old secondary dex dir " + dexDir.getPath());}}}private static File getDexDir(Context context, File dataDir, String secondaryFolderName) throws IOException {//默認(rèn)使用/data/data/app_package_name/code_cache/作為存放提取文件(zip)的父目錄File cache = new File(dataDir, "code_cache");try {mkdirChecked(cache);} catch (IOException var5) {cache = new File(context.getFilesDir(), "code_cache");mkdirChecked(cache);}//在code_cache目錄下新建secondary-dexes子目錄,以存放zip文件File dexDir = new File(cache, secondaryFolderName);mkdirChecked(dexDir);return dexDir;}private static void mkdirChecked(File dir) throws IOException {dir.mkdir();if(!dir.isDirectory()) {File parent = dir.getParentFile();if(parent == null) {Log.e("MultiDex", "Failed to create dir " + dir.getPath() + ". Parent file is null.");} else {Log.e("MultiDex", "Failed to create dir " + dir.getPath() + ". parent file is a dir " + parent.isDirectory() + ", a file " + parent.isFile() + ", exists " + parent.exists() + ", readable " + parent.canRead() + ", writable " + parent.canWrite());}throw new IOException("Failed to create directory " + dir.getPath());}}

我們小結(jié)下Multidex.doInstallation方法基本的四大步驟
1. 判斷sourceApk文件是否存在installedApk集合中,不存在則將其添加到集合中,否則不做處理
2. 刪除舊副dex目錄(/data/data/app_package_name/files/secondary-dexes)
3. 提取zip并返回zip的列表
4. 修改pathList

前二步好理解直接看源碼即可,我們重點(diǎn)來(lái)看第三步,第四步

提取zip并返回zip的列表

代碼如下

//提取的zip文件存放的目錄,正常情況下目錄為/data/data/you_package_name/code_cache/secondary-dexes File dexDir = getDexDir(mainContext, dataDir, secondaryFolderName);List<? extends File> files = MultiDexExtractor.load(mainContext, sourceApk, dexDir, prefsKeyPrefix, false);

我們繼續(xù)看MultiDexExtractor.load方法

static List<? extends File> load(Context context, File sourceApk, File dexDir, String prefsKeyPrefix, boolean forceReload) throws IOException {Log.i("MultiDex", "MultiDexExtractor.load(" + sourceApk.getPath() + ", " + forceReload + ", " + prefsKeyPrefix + ")");//獲取sourceApk循環(huán)冗余校驗(yàn)碼long currentCrc = getZipCrc(sourceApk);// 使用文件鎖來(lái)保證進(jìn)程間安裝multidex正常File lockFile = new File(dexDir, "MultiDex.lock");RandomAccessFile lockRaf = new RandomAccessFile(lockFile, "rw");FileChannel lockChannel = null;FileLock cacheLock = null;IOException releaseLockException = null;List files;try {lockChannel = lockRaf.getChannel();Log.i("MultiDex", "Blocking on lock " + lockFile.getPath());//1、使用文件鎖,阻塞當(dāng)前線程直到獲取鎖為止cacheLock = lockChannel.lock();Log.i("MultiDex", lockFile.getPath() + " locked");//2、如果不是強(qiáng)制重新加載且sourceApk沒(méi)有修改則直接加載已存在的文件if(!forceReload && !isModified(context, sourceApk, currentCrc, prefsKeyPrefix)) {try {//加載之前提取過(guò)的zip文件files = loadExistingExtractions(context, sourceApk, dexDir, prefsKeyPrefix);} catch (IOException var21) {Log.w("MultiDex", "Failed to reload existing extracted secondary dex files, falling back to fresh extraction", var21);//異常則執(zhí)行步驟3files = performExtractions(sourceApk, dexDir);putStoredApkInfo(context, prefsKeyPrefix, getTimeStamp(sourceApk), currentCrc, files);}} else {//3、執(zhí)行提取操作Log.i("MultiDex", "Detected that extraction must be performed.");files = performExtractions(sourceApk, dexDir);//保存提取出的文件相關(guān)屬性(apk的crc、timeStamp(**lastModified**())以及所有副dex的crc、timeStamp)putStoredApkInfo(context, prefsKeyPrefix, getTimeStamp(sourceApk), currentCrc, files);}} finally {//4、執(zhí)行收尾操作,譬如文件鎖的釋放等...if(cacheLock != null) {try {cacheLock.release();} catch (IOException var20) {Log.e("MultiDex", "Failed to release lock on " + lockFile.getPath());releaseLockException = var20;}}if(lockChannel != null) {closeQuietly(lockChannel);}closeQuietly(lockRaf);}//5、判斷釋放鎖是否出現(xiàn)異常,如果有直接拋出標(biāo)志提取或加載文件失敗,否則返回提取文件列表if(releaseLockException != null) {throw releaseLockException;} else {Log.i("MultiDex", "load found " + files.size() + " secondary dex files");return files;}}

小結(jié)下其實(shí)分為5個(gè)小步驟
1. 使用文件鎖來(lái)保證加載提取文件操作/提取文件操作的安全性
2. 加載之前提取的zip文件
3. 提取文件操作
4. 文件資源釋放(執(zhí)行收尾操作,譬如文件鎖的釋放等)
5. 根據(jù)釋放文件鎖是否有異常決定是拋出異常還是正常返回文件列表

上述步驟關(guān)鍵步驟為2、3步;我們按app首次安裝流程來(lái)分析,先看第三步提取文件操作


提取文件操作

廢話不多說(shuō),直接上代碼

private static List<MultiDexExtractor.ExtractedDex> performExtractions(File sourceApk, File dexDir) throws IOException {//定義提取zip文件的名稱前綴(fileName.apk.classes)String extractedFilePrefix = sourceApk.getName() + ".classes";//在dexDir目錄清理舊文件prepareDexDir(dexDir, extractedFilePrefix);//創(chuàng)建數(shù)組用于存放提取的zip文件和方法返回List<MultiDexExtractor.ExtractedDex> files = new ArrayList();/***解析apk壓縮包*/ZipFile apk = new ZipFile(sourceApk);try {int secondaryNumber = 2;//從apk文件中嘗試尋找"classes2.dex","chasses3.dex"..."classesN.dex"直到找到所有為止for(ZipEntry dexFile = apk.getEntry("classes" + secondaryNumber + ".dex"); dexFile != null; dexFile = apk.getEntry("classes" + secondaryNumber + ".dex")) {//每找到一個(gè)副dex,立馬創(chuàng)建一個(gè)相對(duì)應(yīng)名為"fileName.apk.classesN.zip"的提取文件String fileName = extractedFilePrefix + secondaryNumber + ".zip";MultiDexExtractor.ExtractedDex extractedFile = new MultiDexExtractor.ExtractedDex(dexDir, fileName);files.add(extractedFile);Log.i("MultiDex", "Extraction is needed for file " + extractedFile);//每次提取時(shí)有三次重試機(jī)會(huì)int numAttempts = 0;boolean isExtractionSuccessful = false;while(numAttempts < 3 && !isExtractionSuccessful) {++numAttempts;//執(zhí)行提取操作extract(apk, dexFile, extractedFile, extractedFilePrefix);try {//從提取文件中讀取crc校驗(yàn)碼,如果讀取失敗視為提取失敗extractedFile.crc = getZipCrc(extractedFile);isExtractionSuccessful = true;} catch (IOException var19) {isExtractionSuccessful = false;Log.w("MultiDex", "Failed to read crc from " + extractedFile.getAbsolutePath(), var19);}Log.i("MultiDex", "Extraction " + (isExtractionSuccessful?"succeeded":"failed") + " - length " + extractedFile.getAbsolutePath() + ": " + extractedFile.length() + " - crc: " + extractedFile.crc);if(!isExtractionSuccessful) {//提取失敗執(zhí)行清理操作extractedFile.delete();if(extractedFile.exists()) {Log.w("MultiDex", "Failed to delete corrupted secondary dex '" + extractedFile.getPath() + "'");}}}//若果重試了三次還是失敗則直接拋出異常if(!isExtractionSuccessful) {throw new IOException("Could not create zip file " + extractedFile.getAbsolutePath() + " for secondary dex (" + secondaryNumber + ")");}++secondaryNumber;}} finally {//釋放資源try {apk.close();} catch (IOException var18) {Log.w("MultiDex", "Failed to close resource", var18);}}return files;}

小結(jié)下上面方法做了哪些事
1. 清理dexDir舊文件
2. 創(chuàng)建數(shù)組用于保存提取文件
3. 從apk源包中尋找到所有副dex,每找到一個(gè)副dex嘗試提取(有三次重試機(jī)會(huì))并將提取到文件存放到數(shù)組中
4. 釋放資源并返回?cái)?shù)組


其實(shí)真正到提取還是第三步中的extract方法
extract其實(shí)內(nèi)部非常簡(jiǎn)單
大體就是將副dex數(shù)據(jù)拷貝一份生成一個(gè)classes.dex文件,并將該文件壓縮成zip
這個(gè)zip就是我們需要的提取文件

extract就不在細(xì)說(shuō)了,大家有興趣自己看

extract(apk, dexFile, extractedFile, extractedFilePrefix);

apk: zipFile
dexFile:apk中副dex(classesN.dex)
extractTo:提取文件(fileName.apk.classesN.zip)
extractedFilePrefix:提取文件前綴(fileName.apk.classes)

private static void extract(ZipFile apk, ZipEntry dexFile, File extractTo, String extractedFilePrefix) throws IOException, FileNotFoundException {InputStream in = apk.getInputStream(dexFile);ZipOutputStream out = null;//創(chuàng)建臨時(shí)文件(tmp-fileName.apk.classes.zip)File tmp = File.createTempFile("tmp-" + extractedFilePrefix, ".zip", extractTo.getParentFile());Log.i("MultiDex", "Extracting " + tmp.getPath());try {out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(tmp)));try {//構(gòu)建一個(gè)名為"classes.dex"的子文件ZipEntry classesDex = new ZipEntry("classes.dex");classesDex.setTime(dexFile.getTime());out.putNextEntry(classesDex);byte[] buffer = new byte[16384];for(int length = in.read(buffer); length != -1; length = in.read(buffer)) {out.write(buffer, 0, length);}out.closeEntry();} finally {out.close();}if(!tmp.setReadOnly()) {throw new IOException("Failed to mark readonly \"" + tmp.getAbsolutePath() + "\" (tmp of \"" + extractTo.getAbsolutePath() + "\")");}Log.i("MultiDex", "Renaming to " + extractTo.getPath());if(!tmp.renameTo(extractTo)) {throw new IOException("Failed to rename \"" + tmp.getAbsolutePath() + "\" to \"" + extractTo.getAbsolutePath() + "\"");}} finally {closeQuietly(in);tmp.delete();}}

至此提取文件的流程已分析完畢


我們?cè)倩剡^(guò)頭來(lái)看看MultiDexExtractor.load方法的第二步加載之前提取的zip文件

加載之前提取的zip文件

因?yàn)樘崛∥募僮骱筮€有一個(gè)保存文件信息的操作(見(jiàn)下面代碼)
該操作就是為了加載zip文件服務(wù),因?yàn)榧虞dzip需要知道有幾個(gè)zip需要加載,加載的zip的路徑等

源碼如下很簡(jiǎn)單不解釋了

//保存提取文件相關(guān)信息 private static void putStoredApkInfo(Context context, String keyPrefix, long timeStamp, long crc, List<MultiDexExtractor.ExtractedDex> extractedDexes) {SharedPreferences prefs = getMultiDexPreferences(context);Editor edit = prefs.edit();edit.putLong(keyPrefix + "timestamp", timeStamp);edit.putLong(keyPrefix + "crc", crc);edit.putInt(keyPrefix + "dex.number", extractedDexes.size() + 1);int extractedDexId = 2;for(Iterator var10 = extractedDexes.iterator(); var10.hasNext(); ++extractedDexId) {MultiDexExtractor.ExtractedDex dex = (MultiDexExtractor.ExtractedDex)var10.next();edit.putLong(keyPrefix + "dex.crc." + extractedDexId, dex.crc);edit.putLong(keyPrefix + "dex.time." + extractedDexId, dex.lastModified());}edit.commit();}//加載提取文件 private static List<MultiDexExtractor.ExtractedDex> loadExistingExtractions(Context context, File sourceApk, File dexDir, String prefsKeyPrefix) throws IOException {Log.i("MultiDex", "loading existing secondary dex files");String extractedFilePrefix = sourceApk.getName() + ".classes";SharedPreferences multiDexPreferences = getMultiDexPreferences(context);int totalDexNumber = multiDexPreferences.getInt(prefsKeyPrefix + "dex.number", 1);List<MultiDexExtractor.ExtractedDex> files = new ArrayList(totalDexNumber - 1);for(int secondaryNumber = 2; secondaryNumber <= totalDexNumber; ++secondaryNumber) {String fileName = extractedFilePrefix + secondaryNumber + ".zip";MultiDexExtractor.ExtractedDex extractedFile = new MultiDexExtractor.ExtractedDex(dexDir, fileName);if(!extractedFile.isFile()) {throw new IOException("Missing extracted secondary dex file '" + extractedFile.getPath() + "'");}extractedFile.crc = getZipCrc(extractedFile);long expectedCrc = multiDexPreferences.getLong(prefsKeyPrefix + "dex.crc." + secondaryNumber, -1L);long expectedModTime = multiDexPreferences.getLong(prefsKeyPrefix + "dex.time." + secondaryNumber, -1L);long lastModified = extractedFile.lastModified();if(expectedModTime != lastModified || expectedCrc != extractedFile.crc) {throw new IOException("Invalid extracted dex: " + extractedFile + " (key \"" + prefsKeyPrefix + "\"), expected modification time: " + expectedModTime + ", modification time: " + lastModified + ", expected crc: " + expectedCrc + ", file crc: " + extractedFile.crc);}files.add(extractedFile);}return files;}

我們?cè)诨剡^(guò)頭來(lái)看看Multidex.doInstallation的最后一大步

修改pathList

修改pathList其實(shí)就是修改BaseDexClassLoader中pathList屬性,我們以V19版本源碼為例進(jìn)行分析(V14、V4代碼基本差不多)

private static void installSecondaryDexes(ClassLoader loader, File dexDir, List<? extends File> files) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, InvocationTargetException, NoSuchMethodException, IOException {if(!files.isEmpty()) {if(VERSION.SDK_INT >= 19) {MultiDex.V19.install(loader, files, dexDir);} else if(VERSION.SDK_INT >= 14) {MultiDex.V14.install(loader, files, dexDir);} else {MultiDex.V4.install(loader, files);}}} private static final class V19 {private V19() {}//修改BaseDexClassLoader中pathList的dexElements、dexElementsSuppressedExceptions數(shù)組private static void install(ClassLoader loader, List<? extends File> additionalClassPathEntries, File optimizedDirectory) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, InvocationTargetException, NoSuchMethodException {Field pathListField = MultiDex.findField(loader, "pathList");//1、通過(guò)反射獲取pathList變量Object dexPathList = pathListField.get(loader);ArrayList<IOException> suppressedExceptions = new ArrayList();//2、修改dexElements數(shù)組//構(gòu)造一個(gè)新數(shù)組將原數(shù)組添加其中,在將所有提取zip追加到新數(shù)組中;//suppressedExceptions則是用來(lái)存在在加載副dex過(guò)程中出現(xiàn)到異常MultiDex.expandFieldArray(dexPathList, "dexElements", makeDexElements(dexPathList, new ArrayList(additionalClassPathEntries), optimizedDirectory, suppressedExceptions));if(suppressedExceptions.size() > 0) {Iterator var6 = suppressedExceptions.iterator();while(var6.hasNext()) {IOException e = (IOException)var6.next();Log.w("MultiDex", "Exception in makeDexElement", e);}Field suppressedExceptionsField = MultiDex.findField(dexPathList, "dexElementsSuppressedExceptions");//反射來(lái)后去DexPathList中dexElementsSuppressedExceptions數(shù)組IOException[] dexElementsSuppressedExceptions = (IOException[])((IOException[])suppressedExceptionsField.get(dexPathList));//判斷dexElementsSuppressedExceptions為空直接將其修改為suppressedExceptionsif(dexElementsSuppressedExceptions == null) {dexElementsSuppressedExceptions = (IOException[])suppressedExceptions.toArray(new IOException[suppressedExceptions.size()]);} else {//如果dexElementsSuppressedExceptions不空則將創(chuàng)建數(shù)組,并先將加載提取文件到異常放到新建數(shù)組前面//在將原有dexElementsSuppressedExceptions數(shù)據(jù)追加其后,并通過(guò)反射將dexElementsSuppressedExceptions設(shè)置為新建數(shù)組IOException[] combined = new IOException[suppressedExceptions.size() + dexElementsSuppressedExceptions.length];suppressedExceptions.toArray(combined);System.arraycopy(dexElementsSuppressedExceptions, 0, combined, suppressedExceptions.size(), dexElementsSuppressedExceptions.length);dexElementsSuppressedExceptions = combined;}suppressedExceptionsField.set(dexPathList, dexElementsSuppressedExceptions);}}//調(diào)用DexPathList類中的makeDexElements方法private static Object[] makeDexElements(Object dexPathList, ArrayList<File> files, File optimizedDirectory, ArrayList<IOException> suppressedExceptions) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {Method makeDexElements = MultiDex.findMethod(dexPathList, "makeDexElements", new Class[]{ArrayList.class, File.class, ArrayList.class});return (Object[])((Object[])makeDexElements.invoke(dexPathList, new Object[]{files, optimizedDirectory, suppressedExceptions}));}}

至此Multidex安裝流程已全部完畢,說(shuō)了這么多,其實(shí)最關(guān)鍵的就二步(提取、修改pathList)大家可以參照下面圖理解

總結(jié)

以上是生活随笔為你收集整理的Android-Multidex安装流程解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

五月天久久久久 | 欧美成人69av | 五月婷婷毛片 | 国产不卡免费视频 | 亚洲精品国产精品国自产观看 | 国产精品久久久久亚洲影视 | 四虎www| 婷婷天天色 | 亚洲欧洲av在线 | 黄色片视频免费 | 中国精品一区二区 | 99热在线国产 | 日韩激情网 | 天天爱天天舔 | 久碰视频在线观看 | 91在线视频在线 | 午夜婷婷在线观看 | www.黄色片网站 | av大全在线看 | 久久在线影院 | 麻豆传媒一区二区 | 亚洲在线高清 | 片网址 | 国产精品久久久久av免费 | 日本狠狠色 | 国产玖玖视频 | 国模吧一区 | 日韩一级电影在线观看 | 欧美一级在线 | 懂色av懂色av粉嫩av分享吧 | 在线亚洲高清视频 | 久草视频观看 | 国产精品久久久久久电影 | 国产精品嫩草影视久久久 | 四虎成人网 | 久久激情网站 | 国产91精品看黄网站 | 国产免费小视频 | 亚洲区视频在线观看 | 亚洲一区欧美精品 | 美女网站一区 | 日韩欧美xx| 91热爆视频 | 欧美日韩另类在线 | 久久国产精品一二三区 | 网站在线观看日韩 | 欧美一区二区在线 | 国产99精品在线观看 | 五月综合色 | 婷婷六月天在线 | 亚洲综合五月天 | 亚洲欧洲精品一区二区精品久久久 | 色99久久| 最近中文字幕久久 | 日本 在线 视频 中文 有码 | 五月婷在线观看 | 国产精品九九九九九九 | 91精品国产99久久久久久久 | 精品久久国产一区 | 亚洲性xxxx| 亚洲精品视频免费在线观看 | www国产一区 | 中文字幕丝袜美腿 | 久草在线视频资源 | 精品国产视频在线 | 欧美日韩中文另类 | 久久久久蜜桃 | 狠狠狠狠狠狠狠狠干 | 国产午夜精品免费一区二区三区视频 | 五月婷久久| 国产手机在线播放 | 欧美午夜激情网 | 黄污视频大全 | 日韩欧美v| 在线观看岛国片 | 久久午夜电影院 | av成人资源 | 精品久久一区二区 | 国产精品久久久久一区二区三区 | 国产一区在线视频播放 | 2023年中文无字幕文字 | www操操操 | 青青河边草免费观看完整版高清 | 国产二区免费视频 | 久久久久激情视频 | 天天天天射| 四虎成人免费观看 | 亚洲国产操 | 欧洲成人av | 日韩av成人在线观看 | 国产成人99久久亚洲综合精品 | 中文字幕网站视频在线 | 美女视频永久黄网站免费观看国产 | 91九色国产 | 久久天天躁 | 欧美精品久久99 | 精品影院 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 免费看污污视频的网站 | 91视频下载| 久久精品欧美一区二区三区麻豆 | 九九激情视频 | 国产视频亚洲 | 激情视频一区二区三区 | 免费色av | 精品久久久久久综合 | 碰超在线97人人 | 九九亚洲精品 | 久久99影院| 成年人电影免费看 | 国产美女免费观看 | 欧美精品一区二区蜜臀亚洲 | 欧美黑人xxxx猛性大交 | 亚洲精品在线观看的 | 欧美日韩视频免费 | 在线亚洲激情 | 在线看国产视频 | ww亚洲ww亚在线观看 | 一区二区电影在线观看 | 91看片成人 | 中文字幕在线播放视频 | 久久综合亚洲鲁鲁五月久久 | 亚洲精品中文字幕在线 | 色橹橹欧美在线观看视频高清 | 曰本三级在线 | 六月丁香综合 | 午夜在线免费观看视频 | 国产高清视频免费在线观看 | 精品亚洲va在线va天堂资源站 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 激情久久伊人 | 精品免费久久久久久 | 国产自偷自拍 | 久久深夜福利免费观看 | 日韩极品在线 | 婷婷精品进入 | 99精品久久久久久久 | 国产精品久久电影观看 | 免费精品在线观看 | 久久婷婷精品 | 中文字幕资源网 | a级国产乱理论片在线观看 特级毛片在线观看 | 午夜在线国产 | 香蕉精品视频在线观看 | 福利片免费看 | 国产精品日韩在线观看 | 91在线免费视频 | 亚洲欧洲中文日韩久久av乱码 | 日本久热 | 亚洲人成人在线 | 国产91精品一区二区麻豆网站 | 精品在线一区二区三区 | 国产成人精品一区二三区 | 91视频啪 | 97视频精品| 日日操天天操狠狠操 | 人人添人人 | 久久少妇免费视频 | 九九综合在线 | 天天插日日插 | 伊人国产女 | 婷婷丁香激情五月 | 91精品欧美 | 91超级碰碰| 国产在线精品一区二区三区 | japanesexxxxfreehd乱熟 | 在线免费观看国产精品 | 人人精品久久 | 少妇搡bbb | 黄色精品网站 | 一区二区三区在线电影 | 成人性生爱a∨ | 久久久久久久久福利 | 国产成人一级电影 | 最新av电影网址 | 九九日韩 | 中文字幕在线视频一区二区 | 99re8这里有精品热视频免费 | 亚洲精品高清视频在线观看 | 91av色| 亚洲精品一区二区在线观看 | 中国成人一区 | 精品久久美女 | 免费看片成人 | 丝袜美腿亚洲 | 国产精品久久久久久久久久久免费看 | 亚洲综合丁香 | 天天激情站 | 992tv成人免费看片 | 1024手机看片国产 | 狠狠的干 | 免费韩国av | 国产亚洲婷婷免费 | 欧美夫妻性生活电影 | 五月婷婷电影网 | 色姑娘综合 | 黄视频网站大全 | 一区二区三区不卡在线 | 久久久网站 | 免费在线成人av | 精品国产精品国产偷麻豆 | 精品欧美在线视频 | 91精品啪啪 | 狠狠夜夜 | 免费视频黄 | 国产精品久久久久久久久久久久 | 天堂va欧美va亚洲va老司机 | 国产免费一区二区三区网站免费 | 婷婷色中文 | 国产精品毛片久久 | 在线а√天堂中文官网 | 国产手机av | 天天草天天爽 | 国产视频午夜 | 99久久久免费视频 | 亚洲精品午夜国产va久久成人 | www.天天成人国产电影 | 午夜影院日本 | 亚洲精品成人 | 日韩超碰在线 | 亚洲免费色| 狠狠躁夜夜躁人人爽超碰97香蕉 | 天天爱天天插 | 九九热只有这里有精品 | 99热免费在线 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 国产午夜精品一区二区三区在线观看 | 国产清纯在线 | 成人一级片在线观看 | 日韩中文字幕免费在线播放 | 97色在线观看免费视频 | 中文字幕在线日亚洲9 | 91麻豆文化传媒在线观看 | 插久久 | 国产99久久精品 | 伊人五月在线 | 久久精品一区二区国产 | www黄色com| 有码中文字幕在线观看 | 中文字幕在线播放视频 | 在线免费观看不卡av | 国产黄色精品在线观看 | 久草免费在线视频 | 亚洲aⅴ免费在线观看 | 久草在线资源视频 | 丝袜网站在线观看 | 欧美一区二区在线刺激视频 | 精品亚洲视频在线观看 | 国产精品中文久久久久久久 | 男女激情免费网站 | 国产在线播放一区二区 | 在线观看色视频 | 中文字幕一区二区三区乱码在线 | 亚洲高清色综合 | 黄色网址a | 成人手机在线视频 | 国产一区二区高清不卡 | 久久午夜影院 | 狠狠色丁香久久婷婷综合丁香 | 国产精品99久久久久 | 免费看黄电影 | 日韩精品一区二区三区电影 | 久久精品这里都是精品 | 黄色软件在线观看 | 免费在线观看av网站 | 国产精品a久久 | 国产小视频在线观看免费 | 精品 激情 | 亚洲激情视频在线观看 | 综合久久久久久 | 在线一区电影 | 99精品在线观看 | 超级碰碰免费视频 | 久久久久久久久久久久久影院 | 日韩欧美专区 | 99久高清在线观看视频99精品热在线观看视频 | 国产四虎在线 | 国产精品成人一区二区 | 免费在线观看av | 免费在线观看亚洲视频 | 国产精品大尺度 | 久99久视频| 欧美一二三在线 | www.色的| 久久好看免费视频 | 免费成人av在线看 | 婷婷色中文 | 国产视频欧美视频 | 国产午夜剧场 | 亚洲国产精品免费 | 五月婷婷国产 | 欧美一区,二区 | 99热精品视 | 欧美男同视频网站 | 国产高清免费在线观看 | 亚洲理论在线观看电影 | www婷婷 | 国产亚洲亚洲 | 国产精品高清在线 | 日韩欧美在线国产 | 欧美另类tv | 欧美日本不卡 | 精品一二三四视频 | 午夜色影院 | 国产高清一 | 久久经典国产视频 | 国产精品h在线观看 | 国内视频在线 | 开心激情婷婷 | 97精品久久| 日韩在线精品一区 | 国产69久久精品成人看 | 国产精品久久久久久久久久三级 | 亚洲精品一区二区三区在线观看 | 激情综合亚洲精品 | 国产精品情侣视频 | 亚洲精品 在线视频 | 国产精品高潮呻吟久久久久 | 18久久久 | 成人免费观看在线视频 | 亚洲国产片 | 亚洲国产精彩中文乱码av | 黄色成人免费电影 | 午夜精品电影一区二区在线 | 久久精品二区 | 日韩手机在线 | 国产一级视屏 | 成年人免费在线观看网站 | 日本动漫做毛片一区二区 | 91在线看 | 欧美日韩电影在线播放 | 国产精品无 | 91视频麻豆视频 | 很黄很黄的网站免费的 | 中文字幕在线观看完整版 | 美女视频国产 | 国内外成人免费在线视频 | 久久一区二区三区国产精品 | 欧美激情精品久久久久久 | 中文字幕国产 | 亚洲午夜精品在线观看 | 69av视频在线观看 | 91中文字幕在线观看 | 久久精品系列 | 91免费观看国产 | 久久精品中文字幕免费mv | 一级理论片在线观看 | 久久免费成人精品视频 | a黄色片 | 成年人视频在线免费播放 | 玖玖在线播放 | 成人高清av在线 | 欧美精品国产综合久久 | 狠狠黄 | 午夜影视剧场 | 毛片99 | 国产在线观看污片 | 亚洲欧美日韩一级 | 69国产盗摄一区二区三区五区 | 欧美成人xxxxxxxx | 亚洲女人天堂成人av在线 | 丁香综合 | 精品一区二区在线播放 | 91av原创| 一区二区三区在线免费观看 | 天天摸夜夜添 | 99国产在线 | 欧美91片 | 欧美国产一区在线 | 午夜男人影院 | 欧美日韩国产一区二区三区在线观看 | 五月婷婷久草 | 色视频在线观看 | 亚欧洲精品视频在线观看 | 亚洲成人一二三 | 国产精品地址 | 亚洲成人精品 | 国产成人精品电影久久久 | 日韩高清av | 在线 日韩 av | 天天操夜夜想 | 99视频免费在线观看 | 国产精品福利在线 | 亚洲日本va中文字幕 | 日日爱999| 人人干97| 日韩av片免费在线观看 | 69国产在线观看 | 欧美巨大 | 91成人欧美| 天天想夜夜操 | 激情影院在线 | 国产视频午夜 | 精品国产aⅴ麻豆 | 日韩欧美99 | 午夜视频99 | 国产99久久久精品 | 日本特黄一级片 | 美女久久久久久久久久 | 免费看成人av | 手机看片1042 | 人人干人人搞 | 久久久99精品免费观看乱色 | 国产精品免费久久久久久 | 精品av网站 | 欧美日在线 | 亚洲午夜精 | 国产小视频在线观看免费 | 成人观看视频 | 国产18精品乱码免费看 | 激情av在线播放 | 久久伊人综合 | 欧美aa在线 | 日韩欧美视频免费在线观看 | 欧美天堂久久 | 天天插综合 | 超碰av在线 | 日本黄区免费视频观看 | 亚洲闷骚少妇在线观看网站 | 日韩一级电影在线观看 | 亚洲一区日韩精品 | 欧美日韩一区二区三区免费视频 | 69久久夜色精品国产69 | 国产精品自拍av | 91丨九色丨蝌蚪丰满 | 久久国产色| 狠狠地操 | 国产精品日韩久久久久 | 日本三级大片 | 国内精品久久久久国产 | www.啪啪.com | 成人免费一区二区三区在线观看 | av五月婷婷 | 欧美性生交大片免网 | 久草免费在线观看 | 成人不用播放器 | av网站免费看 | 超碰97久久 | 国产精品久久久久久一区二区三区 | 成人黄色短片 | 日韩啪视频 | 92av视频| 日本性xxx | 中文字幕在线免费看 | 亚洲专区在线 | 亚洲精品美女久久久 | 97福利社| 亚洲dvd| 91在线看视频免费 | 亚洲精品色 | 99超碰在线播放 | 国产精品成人一区二区三区吃奶 | av免费网 | 久久久免费精品 | 永久免费毛片 | 狠狠色2019综合网 | 免费福利小视频 | 国产精品福利久久久 | 二区三区在线观看 | 欧美精品乱码99久久影院 | 欧美日韩不卡在线观看 | 玖玖精品在线 | 一区二区三区在线免费观看视频 | 亚洲综合欧美精品电影 | 激情综合电影网 | 黄色免费观看网址 | 精品极品在线 | 精品一区二区在线播放 | 天天操天天干天天干 | 国产高清视频在线免费观看 | 国产精品久久久久影院日本 | 久久久久久国产精品999 | 欧美五月婷婷 | 九九热在线视频免费观看 | 中文字幕刺激在线 | 99这里只有精品视频 | 91精品国产92久久久久 | 午夜在线看| 又紧又大又爽精品一区二区 | 91原创在线观看 | 日韩午夜电影院 | 一本一本久久a久久精品综合小说 | 成人a免费看 | 久久精品99国产精品酒店日本 | 日韩精品欧美专区 | 国产小视频你懂的在线 | 美女免费av| 国产日韩视频在线 | 国产一区二区在线播放视频 | av在线h| ,久久福利影视 | 国产97色| 91精品国产91久久久久 | 免费观看第二部31集 | 中文字幕精品三区 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 中文字幕日韩在线播放 | 手机av片 | 日韩在线观看网址 | 99久久精品久久久久久动态片 | 成年人免费观看在线视频 | 日韩中文幕 | 97在线观看视频免费 | 久久av在线播放 | 玖玖999| 亚洲欧美一区二区三区孕妇写真 | 91麻豆精品国产91久久久使用方法 | 日韩在线观看视频中文字幕 | 久久不射电影院 | 欧美一级大片在线观看 | 丝袜一区在线 | 日日操天天操夜夜操 | 9992tv成人免费看片 | 娇妻呻吟一区二区三区 | 久草干| 青春草免费在线视频 | 91视频久久久 | 亚洲aaa级 | 狠狠色狠狠色综合日日92 | 91久久黄色| 久久在线观看 | 国产精品美女999 | 99久久99久国产黄毛片 | 青草草在线 | 国产精品免费久久久久影院仙踪林 | 欧美日韩中文字幕综合视频 | 国产又粗又硬又长又爽的视频 | 综合婷婷丁香 | 色在线免费视频 | 久久国语露脸国产精品电影 | 亚洲无人区小视频 | 国产999精品久久久久久 | 久久国产欧美日韩 | 久久综合色一综合色88 | 中文字幕 在线 一 二 | 日韩精品免费一区二区 | 日韩精品在线看 | 国产视频网站在线观看 | 狠狠的操狠狠的干 | 欧美一区二区三区免费观看 | 久久久国际精品 | 亚洲a色 | 超碰人人国产 | 三级黄色大片在线观看 | av在线免费播放网站 | 国产高清精品在线 | 国产美女在线精品免费观看 | 四虎国产永久在线精品 | 欧洲成人免费 | 国产a国产 | 久久精品视频中文字幕 | 日本三级在线观看中文字 | 超碰人人在线 | 波多野结依在线观看 | 亚洲更新最快 | 美女视频黄免费网站 | 欧美极度另类性三渗透 | 性色在线视频 | 中文字幕在线日本 | 国内精品久久久久久久久久久 | 精品三级av | 亚洲日本精品 | 正在播放 久久 | 人人人爽| 久久久国产影视 | 亚洲激情电影在线 | 欧美精品久久久久久久久久久 | 欧美日韩亚洲第一 | 国产原创av在线 | 免费福利在线视频 | 黄色91在线观看 | 亚洲综合视频在线 | 激情视频久久 | 成人超碰在线 | 国产亚州av | 婷婷伊人网 | 精品视频一区在线 | 亚洲综合狠狠干 | 欧美在线视频一区二区 | 毛片精品免费在线观看 | 五月婷婷视频在线 | 欧美午夜性 | 国产成人一区二区三区久久精品 | 欧美日韩视频在线观看一区二区 | 婷婷久月| 91黄色影视 | 日韩av电影网站在线观看 | 在线观看黄色小视频 | 天天操狠狠操 | 国产亚洲精品久久久久久 | 天天爱天天干天天爽 | 成人在线视频你懂的 | 97超碰色偷偷 | 99色在线观看视频 | 国产一区二区精品久久 | 亚洲精品国产电影 | 毛片在线网 | 国产一区高清在线 | 精品久久久久久久久久国产 | 一级片视频在线 | 国产 字幕 制服 中文 在线 | 99久久久国产精品免费99 | 国产成人99av超碰超爽 | 人人射人人澡 | 天天插日日插 | 中文字幕资源网 国产 | 久久久99久久 | 美女免费电影 | 色网站免费在线观看 | 五月婷婷中文字幕 | 夜夜嗨av色一区二区不卡 | 午夜精品一区二区三区可下载 | 麻豆久久一区二区 | 国产一级久久久 | 日韩a级免费视频 | 成全在线视频免费观看 | 福利一区在线视频 | 久草在线免费播放 | 国产无套精品久久久久久 | 日韩成人黄色av | 国产一区二区在线免费 | 五月婷婷综 | 综合网久久 | av在线色 | 国产精品2区| 国产乱对白刺激视频不卡 | 国产青春久久久国产毛片 | 五月婷婷丁香综合 | 日韩二区三区在线观看 | 久久久高清 | 欧洲一区二区在线观看 | 日韩视频中文字幕 | 精品久久国产一区 | 中文字幕在线观看视频网站 | 在线看成人av | 免费成人短视频 | 少妇性色午夜淫片aaaze | 97日日碰人人模人人澡分享吧 | 成人av免费播放 | 成人免费ⅴa | 高清久久久久久 | 成人99免费视频 | 日本天天色| 日韩av电影国产 | 国产精品第三页 | 成人在线视频在线观看 | 日本久久中文 | 日本久久影视 | 久久久久久久久久久高潮一区二区 | 在线观看91 | 欧美精品一区二区三区一线天视频 | 亚洲一级黄色av | 国产视频在线观看一区二区 | 亚洲精品动漫久久久久 | 91av蜜桃| 久草久| www婷婷| 国产香蕉在线 | 久久精品国产亚洲精品 | 91麻豆高清视频 | 免费欧美精品 | 免费中文字幕在线观看 | 国产亚洲综合性久久久影院 | 99久久99久国产黄毛片 | 成人免费视频视频在线观看 免费 | 国产一区二区手机在线观看 | 97超碰人人模人人人爽人人爱 | 天天射成人 | 狠狠操操 | 国产我不卡 | 黄色三级免费网址 | 欧美人体xx | 国产女人40精品一区毛片视频 | 日韩三级免费观看 | 日本护士三级少妇三级999 | 久久色在线播放 | 99视频精品全国免费 | 精品国产自 | 91精品国产九九九久久久亚洲 | 丰满少妇在线观看 | 欧美日比视频 | 久久在线免费 | 日日躁天天躁 | 在线国产小视频 | 天天综合操 | 免费在线观看亚洲视频 | 99精品国产在热久久下载 | 91麻豆精品国产自产在线游戏 | 国产精品久久99综合免费观看尤物 | 午夜精品中文字幕 | 在线观看亚洲专区 | 免费看的国产视频网站 | 亚洲激情综合网 | 日韩欧美中文 | 日韩成人在线免费观看 | 久久深夜福利免费观看 | 天天拍夜夜拍 | 久草视频一区 | 国产在线不卡一区 | 久久五月精品 | 毛片99| 色妞色视频一区二区三区四区 | www夜夜操com | 久久久久国产一区二区三区 | 国产精品黄色 | 99综合电影在线视频 | 亚洲精品一区二区三区四区高清 | 国产人成一区二区三区影院 | 免费在线观看成人av | 激情网在线视频 | 天天噜天天色 | 69精品视频在线观看 | 国产精品久久影院 | 国产夫妻av在线 | 国产精品系列在线观看 | 精品欧美小视频在线观看 | 午夜影院日本 | 久久九九国产视频 | 五月天天在线 | 最近高清中文字幕在线国语5 | 91香蕉视频 | 久久国产网 | 国产日产av | 久草免费在线观看 | 香蕉影院在线观看 | 国产一区av在线 | 欧美一级日韩三级 | 丁香婷婷色综合亚洲电影 | 久草免费在线观看视频 | 91精品伦理| 国产91精品一区二区麻豆亚洲 | 9999精品免费视频 | 99久久精品免费 | 国产精品成人一区二区三区吃奶 | 精品一二三四视频 | 一区二区三区四区五区在线 | 成人国产网站 | 色吧久久 | 黄色网大全| 国产中文欧美日韩在线 | 精品一二三四在线 | 国产精品女人久久久久久 | 亚洲精品午夜国产va久久成人 | 欧美性另类 | 日韩精品中文字幕久久臀 | 啪啪免费试看 | 亚洲成人精品久久久 | 久久99亚洲精品久久久久 | 最新av免费 | 在线观看视频在线观看 | 麻豆视频在线播放 | 日韩精品无码一区二区三区 | 婷香五月 | 免费色视频网站 | 久久99热这里只有精品国产 | 亚洲免费永久精品国产 | 欧美日韩亚洲在线观看 | 久久久久国产精品免费 | av福利在线免费观看 | 天天操伊人 | 欧美久草视频 | 中文字幕一二 | 手机看片 | 久草视频免费在线播放 | 香蕉视频亚洲 | 国产成人一区二区在线观看 | 久久久久久久久久久高潮一区二区 | 91在线免费观看网站 | 国产精品久久久久久久久久 | 欧美xxxx性xxxxx高清 | 欧美另类色图 | 四虎亚洲精品 | 99热国产在线中文 | 免费看成人 | 91av综合| 天天操天天操天天操 | 在线免费试看 | 97av色| 欧美日韩另类在线观看 | 国产小视频免费观看 | 久久国产精品一二三区 | 日韩免费中文字幕 | 视频在线日韩 | 午夜电影久久久 | av片在线观看 | 月丁香婷婷 | 国产视频精品久久 | 久久国产精品免费 | 97夜夜澡人人爽人人免费 | 欧美一性一交一乱 | 五月天婷婷在线观看视频 | 久久久久久久久网站 | 成年人黄色免费看 | 五月激情综合婷婷 | 亚洲视频高清 | 中文字幕永久在线 | 在线一级片| av片在线看 | 欧美淫aaa免费观看 日韩激情免费视频 | 国产中的精品av小宝探花 | 久久视频这里只有精品 | 粉嫩av一区二区三区四区在线观看 | 91精品国产自产老师啪 | 337p日本欧洲亚洲大胆裸体艺术 | www.久久久久 | 久久狠狠干 | av最新资源| 色婷婷 亚洲| 香蕉视频91 | 日韩一区二区三区免费视频 | 久久久麻豆精品一区二区 | 久久综合免费视频影院 | aa一级片 | 视频一区在线免费观看 | 日韩亚洲欧美中文字幕 | av网站免费在线 | 国产特级毛片aaaaaa | 黄色三级视频片 | 黄色av一级| 最新国产中文字幕 | 亚洲国产中文字幕在线视频综合 | 91九色蝌蚪国产 | 亚洲精品高清一区二区三区四区 | 99视频久 | 天天综合网 天天综合色 | a在线免费观看视频 | 国产探花在线看 | 成人在线免费观看网站 | 精品国产乱码久久久久久久 | 亚洲成年人免费网站 | 成人毛片一区二区三区 | 成人午夜免费剧场 | 在线视频日韩欧美 | 欧美精品一区二区性色 | 久久久久久高潮国产精品视 | 国产91丝袜在线播放动漫 | 天天干天天拍 | 蜜桃传媒一区二区 | 国产免费小视频 | 少妇性bbb搡bbb爽爽爽欧美 | 91亚色视频在线观看 | 在线日本看片免费人成视久网 | 欧美另类xxx | 91九色视频 | 狠狠色丁香久久婷婷综合丁香 | 亚洲最大成人网4388xx | 欧美大jb| 狠色狠色综合久久 | 国产福利在线不卡 | 欧美va天堂va视频va在线 | 久久国产精品99久久人人澡 | 国产精品免费观看久久 | www久久99 | 国产精品18久久久久久首页狼 | 五月婷婷丁香 | 日本精品一二区 | 91精品999 | 99精品免费久久久久久久久日本 | 国产成人综合精品 | 久草网在线 | 婷婷色网 | 色综合天天综合网国产成人网 | 综合天天 | 日韩一区二区免费播放 | 日韩精品2区 | 不卡视频一区二区三区 | 婷婷久月| 精品国产免费看 | 久久久这里有精品 | 波多野结衣在线中文字幕 | 久久久麻豆视频 | 久久亚洲综合国产精品99麻豆的功能介绍 | 国产黄av | 91久久丝袜国产露脸动漫 | 国产成人精品一区二区 | 欧美日韩不卡一区 | 美女网站在线 | 亚洲国产剧情 | 毛片a级片 | 亚洲精品播放 | 国产成人精品在线观看 | 久久免费视频7 | 欧美不卡在线 | 久草精品在线播放 | 国产精品一区二区三区四区在线观看 | 亚洲伦理一区 | www.av免费| 性色va | 黄色电影在线免费观看 | 九九综合九九综合 | 免费视频黄色 | 国产精品九九久久99视频 | 国产精品免费视频久久久 | 国产123区在线观看 国产精品麻豆91 | 亚洲成人第一区 | 久草在线视频新 | 9999激情 | 免费在线一区二区 | av福利在线导航 | 中文字幕在线网 | 园产精品久久久久久久7电影 | 精品在线视频播放 | 国产精品福利在线 | 黄色国产在线 | 91一区二区三区久久久久国产乱 | 国产精品短视频 | 中文字幕资源在线观看 | 欧美一区二区三区在线视频观看 | 青春草视频 | 色窝资源 | 九九免费在线观看 | 色福利网站 | 亚洲视频久久久久 | 成人超碰在线 | 国产福利精品视频 | 色老板在线 | 天天操操 | 人人超碰免费 | 国产精品久久久久久久久久直播 | 免费在线成人 | 特黄特色特刺激视频免费播放 | 国产免费午夜 | 国产精品综合在线 | 午夜精品视频一区二区三区在线看 | 日韩免费看视频 | 亚洲精品小视频 | 97福利| 欧美一区二区三区在线 | 国产精品久久精品 | 国产精彩视频一区二区 | 国产精品区二区三区日本 | 在线成人免费av | 日本最新高清不卡中文字幕 | 在线观看视频一区二区三区 | 国产群p视频 | 色综合中文字幕 | 人人爽人人做 | 国产人成免费视频 | 中文字幕在线久一本久 | 一区二区精品在线 | 亚洲情感电影大片 | 久久这里只有精品视频99 | 麻豆国产视频下载 | 国产精品亚洲片夜色在线 | 国内少妇自拍视频一区 | www亚洲一区 | 成人午夜电影免费在线观看 | 国产欧美精品一区二区三区四区 | 亚洲精品在线国产 | 欧美特一级 | 在线免费观看亚洲视频 | av丝袜在线| 综合久久久久 | 日韩激情片在线观看 | 人人爽人人爽人人爽学生一级 | 亚洲美女免费精品视频在线观看 | www国产亚洲精品 | 久久a热6 | 91精品视频免费看 | 国产亲近乱来精品 | 国产第一页福利影院 | 亚洲欧美日韩在线一区二区 | 黄色大全免费网站 | 在线 欧美 日韩 | 免费网站看av片 | 久久a级片 | 国产精品久久久久久影院 | 久久伦理影院 | 色av色av色av| 亚洲精品国产精品乱码在线观看 | 亚洲一区精品二人人爽久久 | 美女久久久 | 一区二区三区在线观看免费视频 | 99精品影视 | 国产一区高清在线观看 | 国产午夜麻豆影院在线观看 | 456成人精品影院 | 91日韩精品 | 一区二区三区日韩视频在线观看 | 久精品视频在线观看 | 97成人精品区在线播放 | 九九九九九国产 | 91资源在线视频 | 免费成人在线电影 | 99热这里精品 | 在线国产专区 | 亚洲激情综合 | 91黄色小网站 | 日韩免费福利 | 中文字幕一区二区在线播放 | 天天干天天操天天 | 欧美日韩国产亚洲乱码字幕 | 成人午夜精品福利免费 | 日韩免费在线观看视频 | 中文字幕精品在线 | 青草草在线| 国产精品 美女 | 日韩二区在线观看 |