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

Android高手進階:性能調優hugo中全面分析AOP切面編程使用詳解

移動開發 Android
AOP 能夠實現將日志紀錄,性能統計,埋點統計,安全控制,異常處理等代碼從具體的業務邏輯代碼中抽取出來,放到統一的地方進行處理。

[[411233]]

前言

Android 性能調優中,通常存在需要對方法的執行時間進行統計的需求,這樣就可以看出哪些方法耗時多,是系統的瓶頸。最容易想到的方案是在每個方法的開頭處獲取系統時間,在方法的結尾處再次獲取系統時間,前后兩個時間戳的差值就是這個方法執行所消耗的總時間;

Hugo項目是一個調試函數調用耗時的工具,通過對方法或者類添加@DebugLog注解,在運行時會將函數的耗時打印在控制臺中,通常用于排查函數耗時,或者用于卡頓檢測;

hugo 這個框架麻雀雖小但五臟俱全,它使用了很多 Android 開發中流行的技術,例如注解,AOP,AspectJ,Gradle 插件;

一、hugo插件詳解

1、hugo使用

hugo 以 gradle 插件的形式供開發者集成和使用,分為兩步:

  • 在項目全局添加對 hugo 插件的依賴
  • 在需要使用 hugo 的 module 中應用 hugo 插件
  1. buildscript { 
  2.   repositories { 
  3.     mavenCentral() 
  4.   } 
  5.   dependencies { 
  6.     classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1' // 添加 Hugo 的 Gradle 插件依賴 
  7.   } 
  1. apply plugin: 'com.jakewharton.hugo' // 應用 Hugo 插件 

2、hugo源碼分析

①aspectjrt.jar:aspectJ 運行時的依賴庫,想要使用 aspectJ 的功能都需要引入這個庫;

hugo-annotations:hugo 的注解庫,定義了 DebugLog 這個注解;

  1. @Target({TYPE, METHOD, CONSTRUCTOR}) @Retention(CLASS) 
  2. public @interface DebugLog { 

②hugo-runtime:hugo 的運行時庫,是實現 hugo 日志功能的核心庫;

③hugo-plugin:hugo 的插件庫,主要實現了aop的插件;

  1. class HugoPlugin implements Plugin<Project> { 
  2.   @Override void apply(Project project) { 
  3.     def hasApp = project.plugins.withType(AppPlugin) 
  4.     def hasLib = project.plugins.withType(LibraryPlugin) 
  5.     if (!hasApp && !hasLib) { 
  6.       throw new IllegalStateException("'android' or 'android-library' plugin required."
  7.     } 
  8.     final def log = project.logger 
  9.     final def variants 
  10.     if (hasApp) { 
  11.       variants = project.android.applicationVariants 
  12.     } else { 
  13.       variants = project.android.libraryVariants 
  14.     } 
  15.     project.dependencies { 
  16.       debugCompile 'com.jakewharton.hugo:hugo-runtime:1.2.2-SNAPSHOT' 
  17.       // TODO this should come transitively 
  18.       debugCompile 'org.aspectj:aspectjrt:1.8.6' 
  19.       compile 'com.jakewharton.hugo:hugo-annotations:1.2.2-SNAPSHOT' 
  20.     } 
  21.     project.extensions.create('hugo', HugoExtension) 
  22.     variants.all { variant -> 
  23.       if (!variant.buildType.isDebuggable()) { 
  24.         log.debug("Skipping non-debuggable build type '${variant.buildType.name}'."
  25.         return
  26.       } else if (!project.hugo.enabled) { 
  27.         log.debug("Hugo is not disabled."
  28.         return
  29.       } 
  30.       JavaCompile javaCompile = variant.javaCompile 
  31.       javaCompile.doLast { 
  32.         String[] args = [ 
  33.             "-showWeaveInfo"
  34.             "-1.5"
  35.             "-inpath", javaCompile.destinationDir.toString(), 
  36.             "-aspectpath", javaCompile.classpath.asPath, 
  37.             "-d", javaCompile.destinationDir.toString(), 
  38.             "-classpath", javaCompile.classpath.asPath, 
  39.             "-bootclasspath", project.android.bootClasspath.join(File.pathSeparator) 
  40.         ] 
  41.         log.debug "ajc args: " + Arrays.toString(args) 
  42.         MessageHandler handler = new MessageHandler(true); 
  43.         new Main().run(args, handler); 
  44.         for (IMessage message : handler.getMessages(nulltrue)) { 
  45.           switch (message.getKind()) { 
  46.             case IMessage.ABORT: 
  47.             case IMessage.ERROR: 
  48.             case IMessage.FAIL: 
  49.               log.error message.message, message.thrown 
  50.               break; 
  51.             case IMessage.WARNING: 
  52.               log.warn message.message, message.thrown 
  53.               break; 
  54.             case IMessage.INFO: 
  55.               log.info message.message, message.thrown 
  56.               break; 
  57.             case IMessage.DEBUG: 
  58.               log.debug message.message, message.thrown 
  59.               break; 
  60.           } 
  61.         } 
  62.       } 
  63.     } 
  64.   } 

3、代碼實操

需要進行日志記錄的類名或者方法名處使用 @DebugLog 注解標記即可;

  1. @Override 
  2. protected void onCreate(Bundle savedInstanceState) { 
  3.     super.onCreate(savedInstanceState); 
  4.     setContentView(R.layout.activity_main); 
  5. @DebugLog 
  6. private void test(String... tests) { 
  7.     for (String arg : tests) { 
  8.         Log.i("Args", arg); 
  9.     } 

二、AOP詳解

 1、什么是aop

AOP,全稱為 Aspect Oriented Programming,即面向切面編程;AOP 是軟件開發中的一個編程范式,通過預編譯方式或者運行期動態代理等實現程序功能的統一維護的一種技術,它是 OOP(面向對象編程)的延續,利用 AOP 開發者可以實現對業務邏輯中的不同部分進行隔離,從而進一步降低耦合,提高程序的可復用性,進而提高開發的效率;

aop涉及到的關鍵知識點:

  • 橫切關注點(Cross-cutting concerns):在面向對象編程中,經常需要在不同的模塊代碼中添加一些類似的代碼,例如在函數入口處打印日志,在 View 的點擊處添加點擊事件的埋點統計,在 AOP 中把軟件系統分成兩個部分:核心關注點和橫切關注點,核心關注點就是業務邏輯處理的主要流程,而橫切關注點就是上面所說的經常發生在核心關注點的多個地方,且基本相似的日志紀錄,埋點統計等等;
  • 連接點(Joint point):在核心關注點中可能會存在橫切關注點的地方,例如方法調用的入口,View 的點擊處理等地方,在 AOP 中習慣稱為連接點;
  • 增強(Advice):特定連接點處所執行的動作,也就是 AOP 織入的代碼,目的是對原有代碼進行功能的增強;
  • before:在目標方法執行之前的動作;
  • around:在目標方法之前前后的動作;
  • after:在目標方法執行之后的動作;
  • 切入點(Pointcut):連接點的集合,這些連接點可以確定什么時機會觸發一個通知;
  • 切面(Aspect):切入點和通知可以組合成一個切面;
  • 織入(Weaving):將通知注入到連接點的過程;

AOP 中代碼的織入根據類型的不同,主要可以分為三類:

  • 編譯時織入:在 Java 類文件編譯的時候進行織入,這需要通過特定的編譯器來實現,例如使用 AspectJ 的織入編譯器;
  • 類加載時織入:通過自定義類加載器 ClassLoader 的方式在目標類被加載到虛擬機之前進行類的字節代碼的增強;
  • 運行時織入:切面在運行的某個時刻被動態織入,基本原理是使用 Java 的動態代理技術;

2、Android中aop實現:用aspectj實現aop

2.1、什么是AspectJ

①AspectJ實際上是對AOP編程思想的一個實踐,AOP雖然是一種思想,但就好像OOP中的Java一樣,一些先行者也開發了一套語言來支持AOP;

基礎知識點:

  • Aspect 切面:切面是切入點和通知的集合;
  • PointCut 切入點:切入點是指那些通過使用一些特定的表達式過濾出來的想要切入Advice的連接點;
  • Advice 通知:通知是向切點中注入的代碼實現方法;
  • Joint Point 連接點:所有的目標方法都是連接點;
  • Weaving 編織:主要是在編譯期使用AJC將切面的代碼注入到目標中, 并生成出代碼混合過的.class的過程;

涉及到的注解:

  • @Aspect:聲明切面,標記類
  • @Pointcut(切點表達式):定義切點,標記方法
  • @Before(切點表達式):前置通知,切點之前執行
  • @Around(切點表達式):環繞通知,切點前后執行
  • @After(切點表達式):后置通知,切點之后執行
  • @AfterReturning(切點表達式):返回通知,切點方法返回結果之后執行
  • @AfterThrowing(切點表達式):異常通知,切點拋出異常時執行

2.2、實現一個網絡狀態檢測的AOP

①aspectj配置

項目的gradle中配置build.gradle(project)

  1. buildscript { 
  2.   repositories { 
  3.     google() 
  4.     mavenCentral() 
  5.     jcenter() 
  6.   } 
  7.   dependencies { 
  8.     classpath 'com.android.tools.build:gradle:4.1.1' 
  9.     classpath 'org.aspectj:aspectjtools:1.8.6' 
  10.   } 
  11. ...... 
  12. ...... 

主app中build.gradle(app)

  1. dependencies { 
  2.   compile 'org.aspectj:aspectjrt:1.8.6' 
  3. android.libraryVariants.all { variant -> 
  4.   JavaCompile javaCompile = variant.javaCompile 
  5.   javaCompile.doLast { 
  6.     String[] args = [ 
  7.         "-showWeaveInfo"
  8.         "-1.5"
  9.         "-inpath", javaCompile.destinationDir.toString(), 
  10.         "-aspectpath", javaCompile.classpath.asPath, 
  11.         "-d", javaCompile.destinationDir.toString(), 
  12.         "-classpath", javaCompile.classpath.asPath, 
  13.         "-bootclasspath", android.bootClasspath.join(File.pathSeparator) 
  14.     ] 
  15.     MessageHandler handler = new MessageHandler(true); 
  16.     new Main().run(args, handler) 
  17.     def log = project.logger 
  18.     for (IMessage message : handler.getMessages(nulltrue)) { 
  19.       switch (message.getKind()) { 
  20.         case IMessage.ABORT: 
  21.         case IMessage.ERROR: 
  22.         case IMessage.FAIL: 
  23.           log.error message.message, message.thrown 
  24.           break; 
  25.         case IMessage.WARNING: 
  26.         case IMessage.INFO: 
  27.           log.info message.message, message.thrown 
  28.           break; 
  29.         case IMessage.DEBUG: 
  30.           log.debug message.message, message.thrown 
  31.           break; 
  32.       } 
  33.     } 
  34.   } 

②aop實現

定義annotation:

  1. @Target(ElementType.METHOD) 
  2. @Retention(RetentionPolicy.RUNTIME) 
  3. public @interface CheckNetwork { 

代碼注解:

  1. @CheckNetwork() 
  2.     private void checkNetwork() { 
  3.         LogUtil.i("AnnotationFragment""檢測完畢"); 
  4.     } 

關鍵處理切入點:

  1. @Aspect 
  2. public class CheckNetworkAspect { 
  3.     private static final String TAG = CheckNetworkAspect.class.getSimpleName(); 
  4.     /** 
  5.      * 找到處理的切點 
  6.      *   * *(..)  “**”表示是任意包名   “..”表示任意類型任意多個參數 
  7.      */ 
  8.     @Pointcut("execution(@la.xiong.androidquick.demo.features.function.annotation.aspect.CheckNetwork  * *(..))"
  9.     public void executionCheckNetwork() { 
  10.     } 
  11.     /** 
  12.      * 處理切面 
  13.      * 
  14.      * @param joinPoint 
  15.      * @return 
  16.      */ 
  17.     @Around("executionCheckNetwork()"
  18.     public Object checkPermission(ProceedingJoinPoint joinPoint) throws Throwable { 
  19.         MethodSignature signature = (MethodSignature) joinPoint.getSignature(); 
  20.         CheckNetwork annotation = signature.getMethod().getAnnotation(CheckNetwork.class); 
  21.         if (annotation != null) { 
  22.             Context context = AspectUtils.getContext(joinPoint.getThis()); 
  23.             if (NetworkUtils.isConnected()) { 
  24.                 Toast.makeText(context, "當前網絡正常", Toast.LENGTH_SHORT).show(); 
  25.             } else { 
  26.                 Toast.makeText(context, "此時沒有網絡連接", Toast.LENGTH_SHORT).show(); 
  27.             } 
  28.             return joinPoint.proceed(); 
  29.         } 
  30.         return null
  31.     } 

總結:

AOP 能夠實現將日志紀錄,性能統計,埋點統計,安全控制,異常處理等代碼從具體的業務邏輯代碼中抽取出來,放到統一的地方進行處理;

利用 AOP 開發者可以實現對業務邏輯中的不同部分進行隔離,從而進一步降低耦合,提高程序的可復用性,進而提高開發的效率;

可以自定義屬于你的功能比如:日志記錄,性能統計,安全控制,事務處理,異常處理等等。

本文轉載自微信公眾號「Android開發編程」,可以通過以下二維碼關注。轉載本文請聯系Android開發編程公眾號。

 

責任編輯:姜華 來源: Android開發編程
相關推薦

2024-05-21 09:55:43

AspectOrientedAOP

2019-11-01 08:49:07

JVM監控性能

2012-02-10 10:32:33

JavaSpring

2023-11-07 16:00:25

面向切面編程開發

2015-07-28 17:11:00

編程技術提升

2009-08-24 09:46:40

面向切面編程AOP

2011-04-26 09:33:04

SpringAOP

2013-03-20 17:18:07

Linux系統性能調優

2013-09-17 10:37:03

AOPAOP教程理解AOP

2009-04-01 11:17:52

內存分配調優Oracle

2017-07-21 08:55:13

TomcatJVM容器

2012-06-20 11:05:47

性能調優攻略

2021-03-04 08:39:21

SparkRDD調優

2018-11-12 14:53:09

Redis性能調優數據庫

2023-11-30 18:03:55

IDEA工具

2013-03-21 11:20:00

性能測試性能調優測試

2011-03-10 14:40:54

LAMPMysql

2011-05-20 15:02:01

Oracle性能調優

2011-11-14 10:28:23

2020-11-30 11:40:35

NginxLinux性能調優
點贊
收藏

51CTO技術棧公眾號

国产视频在线观看视频| 亚洲精品色午夜无码专区日韩| 国产福利电影在线| 麻豆freexxxx性91精品| 综合网中文字幕| 91国内在线播放| ririsao久久精品一区| 久久综合九色综合欧美亚洲| 国产精品一区二区3区| 草视频在线观看| 欧美亚视频在线中文字幕免费| 91福利视频在线| 天天综合五月天| 日韩精品系列| 国内精品国产成人| 91豆花精品一区| 日韩亚洲欧美中文字幕| 久久久久影视| 91精品国产欧美一区二区成人| 精品久久一二三| 日本在线免费网| 久久综合丝袜日本网| 国产精品视频xxx| 麻豆视频在线观看| 精品久久不卡| 亚洲电影免费观看高清完整版在线观看 | 国产成人精品无码高潮| 免费国产自线拍一欧美视频| 精品国产欧美成人夜夜嗨| 添女人荫蒂视频| 欧美高清hd| 欧美日韩国产一区| av无码精品一区二区三区| 色婷婷视频在线观看| 国产精品久久久久永久免费观看 | 亚洲视频在线观看一区| 欧美精品v日韩精品v国产精品| 国产成年妇视频| 麻豆传媒一区二区三区| 国产成人精品久久二区二区91| 久久精品国产亚洲AV无码男同| 欧美hd在线| 一本大道亚洲视频| 美女爆乳18禁www久久久久久| 黄色美女久久久| 精品毛片乱码1区2区3区| 免费成年人高清视频| 粉嫩av一区二区三区四区五区| 一本大道久久a久久综合| 成年丰满熟妇午夜免费视频| 麻豆网在线观看| 国产精品国产精品国产专区不蜜 | 欧美久久综合| 久久综合伊人77777蜜臀| 国产亚洲精品久久久久久久| 亚洲欧美日韩色| 国产精品xnxxcom| 51精品秘密在线观看| 午夜免费看视频| 啪啪av大全导航福利综合导航| 在线精品亚洲一区二区不卡| 日本在线视频www| 韩国美女久久| 欧美亚一区二区| 欧美大尺度做爰床戏| 狠狠久久综合| 91精品在线免费观看| 在线视频观看91| 国产精品久久久久久av公交车| 欧美一区二区网站| 自拍偷拍激情视频| swag国产精品一区二区| 亚洲国产天堂久久国产91| 国产网站无遮挡| 欧美人与牛zoz0性行为| 中文字幕亚洲欧美一区二区三区| 老司机福利在线观看| 激情高潮到大叫狂喷水| 国产区精品视频在线观看豆花| 精品久久久网站| chinese麻豆新拍video| 伊人久久大香线蕉| 中文字幕欧美视频在线| 夫妻性生活毛片| 激情婷婷亚洲| 日韩av手机在线看| 91亚洲国产成人久久精品麻豆| 国产另类ts人妖一区二区| 99在线视频播放| 亚洲欧美丝袜中文综合| 国产欧美日韩另类视频免费观看| 一区二区视频在线播放| 久久青青色综合| 欧美午夜性色大片在线观看| 成人日韩在线视频| 懂色av一区二区| 尤物九九久久国产精品的分类| 杨钰莹一级淫片aaaaaa播放| 亚洲深夜福利| 91欧美日韩一区| 午夜视频www| 国产精品国产精品国产专区不蜜| 成人av在线不卡| 欧美电影免费观看| 日韩一区二区三区免费看 | 国产精品自拍片| 欧洲成人一区| 亚洲黄色av女优在线观看| 色欲AV无码精品一区二区久久 | 久久婷婷国产麻豆91天堂| 日本少妇吞精囗交| 久久99热这里只有精品| 国严精品久久久久久亚洲影视| 四虎久久免费| 色婷婷av一区二区三区大白胸| 日日夜夜精品视频免费观看| 少妇精品久久久一区二区| 色综合久久天天综线观看| 无码人妻黑人中文字幕| 成人不卡免费av| 老司机av福利| 电影亚洲一区| 亚洲精品久久久久中文字幕二区| 91传媒免费观看| 久久精品123| 国产精品视频免费观看| 免费a级在线播放| 在线视频一区二区免费| 精品少妇人妻av一区二区三区| 亚洲视频电影在线| 国产伊人精品在线| 东热在线免费视频| 日韩欧美有码在线| 污污内射在线观看一区二区少妇| 亚洲天天综合| 成人两性免费视频| av在线免费观看网站| 一本色道亚洲精品aⅴ| 影音先锋黄色资源| 亚洲精品1区| 国产经品一区二区| 色在线视频网| 日韩欧美电影一二三| 国产美女久久久久久| 久久99最新地址| 亚洲图色在线| 欧美jizz18| 色综久久综合桃花网| 中文字幕男人天堂| 国产精品传媒在线| 日韩在线不卡一区| 久久久久国产| 97中文在线观看| 中文字幕伦理免费在线视频| 欧美一级理论性理论a| 中文字幕人妻一区二| 国产乱码精品1区2区3区| 自拍亚洲欧美老师丝袜| 91麻豆精品国产91久久久更新资源速度超快| 在线精品播放av| 在线视频欧美亚洲| 亚洲人成精品久久久久久 | 日韩国产在线不卡视频| 久久伊人精品天天| 国产a级免费视频| 亚洲一区av在线| 亚洲综合自拍网| 久久精品一区二区三区中文字幕| 日韩精品最新在线观看| 精品美女一区| 欧美床上激情在线观看| 成人午夜免费在线观看| 欧美日韩精品在线观看| 国产aⅴ激情无码久久久无码| 日本不卡123| 在线看视频不卡| 136福利精品导航| 欧美亚洲第一页| 自拍视频在线网| 欧美一区二区三区喷汁尤物| 欧美三根一起进三p| 国产激情精品久久久第一区二区| www.国产在线视频| 国产精品三级| 91久久偷偷做嫩草影院| 深夜福利视频一区二区| 亚洲天堂av综合网| 国产偷拍一区二区| 午夜电影久久久| 黄大色黄女片18免费| 国产99久久久久久免费看农村| 久久这里只有精品23| 精品国产一区二区三区久久久蜜臀 | 美女视频一区二区| 久久亚洲a v| 国产精选一区| 99在线视频播放| av免费在线一区| 国产综合在线视频| 不卡在线视频| 亚洲第一国产精品| 91中文字幕在线播放| 午夜精品123| 91香蕉视频污在线观看| 91毛片在线观看| 日韩av福利在线观看| 美女日韩在线中文字幕| 第九区2中文字幕| 精品国产乱码久久久久久1区2匹| 国产精品二区三区四区| 亚洲欧美一级| 日韩av片永久免费网站| gogo高清午夜人体在线| 日韩小视频在线| 邻家有女韩剧在线观看国语| 日韩欧美中文字幕一区| 一级做a爱片性色毛片| 高潮白浆女日韩av免费看| 黄色在线观看免费| 国产精品不卡在线观看| 欧美偷拍一区二区三区| 成人精品一区二区三区四区| 天堂av在线8| 免费日韩一区二区| 人体内射精一区二区三区| 日韩黄色大片网站| 日韩精品av一区二区三区| 蜜桃久久久久| 国产成人女人毛片视频在线| 国产精久久久| 91久久国产婷婷一区二区| 成人黄色毛片| 国产精品日日摸夜夜添夜夜av| 在线看的毛片| 欧美在线国产精品| 国产传媒在线观看| 久久久视频免费观看| 日本在线视频网址| 九色精品免费永久在线| 二区在线播放| 欧美成年人视频| 国产精品刘玥久久一区| 久久天天躁狠狠躁夜夜爽蜜月| 在线观看免费高清完整| 在线观看国产精品淫| 懂色一区二区三区| 最近2019中文字幕大全第二页| av在线免费观看网站| 中文字幕少妇一区二区三区| 国产福利在线视频| 色婷婷综合久久久久| 老司机精品影院| 欧美www在线| 日本欧美电影在线观看| 欧美激情精品久久久久久蜜臀| 少女频道在线观看免费播放电视剧| 欧美精品在线极品| 七七久久电影网| 久久露脸国产精品| 黄在线观看免费网站ktv| 欧美亚洲激情视频| 少妇一区视频| 国产日韩欧美91| 国产一区一区| 国产精品.com| 亚洲区小说区| 先锋影音一区二区三区| 久久久久国产精品| 无码人妻精品一区二区蜜桃网站| 一本色道久久综合一区| 精品免费国产一区二区| 免费的成人av| 国产精品熟女一区二区不卡| 成人福利视频在线| av黄色免费网站| 中文字幕一区二区三区蜜月| 中文字幕人妻一区二| 天天影视色香欲综合网老头| 在线永久看片免费的视频 | 亚洲第一成人av| 亚洲精品美女久久久久| 成人av一区| 九九热这里只有精品6| 僵尸再翻生在线观看免费国语| 国产成人精品久久二区二区91 | 任你操精品视频| 亚洲一区精品在线| 国产精品成人无码| 日韩欧美国产午夜精品| 飘雪影视在线观看免费观看 | 欧美一级二级在线观看| 亚洲色图另类小说| 日韩最新在线视频| 成年人黄色大片在线| 国产精品成人一区二区| 视频精品一区| 日本一区二区在线视频| 国产伊人精品| 艹b视频在线观看| av高清久久久| 亚洲xxxx3d动漫| 日韩欧美国产骚| 国产91久久久| 色爱av美腿丝袜综合粉嫩av | 国产一区二区在线播放| 日本国产精品| 老司机午夜网站| 秋霞午夜鲁丝一区二区老狼| 无码国产精品一区二区免费式直播| 中文字幕av在线一区二区三区| 国产第一页在线播放| 9191精品国产综合久久久久久| 欧美一区二区视频| 久久久久亚洲精品| 成人av在线播放| 视频一区国产精品| 国产精品久久久久久久免费软件| 一级黄色免费毛片| 中文字幕一区免费在线观看 | 91精品啪在线观看国产60岁| 裸体xxxx视频在线| 91国产精品视频在线| 欧美日韩黄网站| 中文字幕一区二区中文字幕| 三级欧美韩日大片在线看| 插我舔内射18免费视频| 亚洲精品中文在线| 国产精品高潮呻吟AV无码| 亚洲欧美日韩国产中文| 韩国成人二区| 国产亚洲精品自在久久| 国产精品v欧美精品v日本精品动漫| 一级黄色在线播放| 中文字幕一区二区在线观看| 在线观看视频二区| 一区二区亚洲欧洲国产日韩| 美女18一级毛片一品久道久久综合| 国产区一区二区| 在线精品观看| 影音先锋黄色资源| 无吗不卡中文字幕| 日日夜夜精品免费| 高清欧美性猛交xxxx| 精品视频自拍| 9久久9毛片又大又硬又粗| 97精品久久久久中文字幕| 亚洲免费激情视频| 亚洲精品美女在线| 欧美xxx视频| 日本婷婷久久久久久久久一区二区| 国产九九精品| 亚洲国产日韩一区无码精品久久久| 色婷婷激情综合| fc2在线中文字幕| 国产日韩av在线播放| 久久精品欧美一区| 一级黄色免费毛片| 午夜视频在线观看一区| 无码国产伦一区二区三区视频| 欧美亚洲一级片| 成人高清电影网站| 第一区免费在线观看| 亚洲精品久久7777| 人妻夜夜爽天天爽| 欧美中在线观看| 国产剧情在线观看一区| 天天影视色综合| 一区二区三区中文字幕在线观看| 亚洲免费成人在线| 奇米影视亚洲狠狠色| 日韩www.| 亚洲熟女一区二区三区| 红桃av永久久久| 3p在线观看| 成人国产一区二区| 免费精品视频| 国精产品一区一区二区三区mba| 日韩一区二区三| 一区二区三区四区日本视频| 亚洲精品国产一区| 国产大陆精品国产| 人人爽人人爽人人片av| xvideos国产精品| 欧美日韩夜夜| 国产高清视频网站| 亚洲国产视频网站| 98在线视频| 国产伦精品一区二区三区高清| 老司机久久99久久精品播放免费| 久久国产波多野结衣| 日韩久久精品成人| 九九九九九九精品任你躁| 免费在线观看亚洲视频 | 日韩电影免费观看中文字幕| 国产精品黄色片| 中文字幕无码精品亚洲资源网久久| 国产精品美女视频| 香蕉视频黄色片| 91在线观看免费高清| 亚洲综合国产|