精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

少妇久久久久久久久久| 奇米777四色影视在线看| 中文字幕+乱码+中文| 97精品国产| 精品国产制服丝袜高跟| 欧美日韩亚洲一二三| 4438x成人网全国最大| 91蜜桃在线免费视频| 国产精品亚洲视频在线观看| 久久精品一区二区三| 欧美中文一区二区| 精品国产一区二区三区av性色 | 中文在线日韩| 日韩国产精品视频| 三级网站免费看| 裤袜国产欧美精品一区| 亚洲一卡二卡三卡四卡五卡| 三区精品视频| 五月婷婷开心中文字幕| 国产在线看一区| 国产精品大片wwwwww| 国产精品变态另类虐交| 色综合咪咪久久网| 亚洲三级 欧美三级| 稀缺小u女呦精品呦| 国产精品视频一区二区三区| 欧美在线播放高清精品| 成人免费观看cn| 99热国产在线中文| 国产精品午夜电影| 久久免费99精品久久久久久| 亚洲av无码国产精品永久一区 | 精品久久久久久亚洲精品| 天天综合中文字幕| 成年人在线免费观看| 97久久超碰国产精品| 粉嫩高清一区二区三区精品视频| 国产又黄又大又爽| 奇米影视7777精品一区二区| 热久久99这里有精品| 国产高潮久久久| 亚洲经典在线| 高清一区二区三区日本久| 欧美黄色一级网站| 欧美xxx在线观看| 久久精品夜夜夜夜夜久久| 18精品爽国产三级网站| 欧美日韩精品在线一区| 在线日韩av观看| 亚洲色成人网站www永久四虎| 日韩丝袜视频| 日韩精品视频中文在线观看| a级片在线观看视频| 豆花视频一区二区| 精品国产乱码久久久久久夜甘婷婷 | 羞羞视频在线免费国产| 亚洲精品欧美二区三区中文字幕| 色乱码一区二区三在线看| 成人高清免费在线播放| 国产精品丝袜一区| 黄色高清视频网站| av网站网址在线观看| 亚洲综合免费观看高清在线观看| 国产成人一二三区| av资源中文在线| 色偷偷成人一区二区三区91| 男人天堂成人在线| 色成人综合网| 日韩欧美国产一区二区在线播放| 国产精品嫩草69影院| 精品国内亚洲2022精品成人| 日韩激情av在线免费观看| 成人在线一级片| 欧美独立站高清久久| 久热国产精品视频| 日韩av电影网| 日韩国产精品久久| 成人天堂噜噜噜| 欧洲成人一区二区三区| 久久综合九色综合欧美98| 天堂资源在线亚洲资源| 在线免费观看的av| 欧美日韩午夜激情| www午夜视频| 国产精品白浆| 亚洲欧美日韩久久久久久 | 欧美自拍偷拍一区二区| 久久美女高清视频| 伊人婷婷久久| 极品美鲍一区| 欧美日韩精品一区二区天天拍小说| 在线观看视频你懂得| 偷拍自拍亚洲色图| 久久在线免费观看视频| 天天爽夜夜爽夜夜爽精品| 麻豆91在线观看| 精品日本一区二区三区| 秋霞a级毛片在线看| 午夜日韩在线观看| 婷婷免费在线观看| 乱中年女人伦av一区二区| 少妇久久久久久| 日韩黄色在线视频| 极品美女销魂一区二区三区| 精品中文字幕一区| www免费在线观看| 欧美网站在线观看| 久久国产免费视频| 欧美成人自拍| 国产成人精品在线| 无码国产精品一区二区色情男同| 中文字幕日韩欧美一区二区三区| 国产97在线 | 亚洲| 国产精品白丝久久av网站| 亚洲色图50p| 日本一级淫片色费放| 狠狠色狠狠色综合| 色99中文字幕| 88xx成人永久免费观看| 亚洲福利在线播放| 私库av在线播放| 激情都市一区二区| 日韩欧美一区二区三区久久婷婷| www欧美xxxx| 欧美一级二级三级蜜桃| 男人天堂资源网| 日韩高清在线不卡| 国产精品一区二区三区观看| 国产黄色小视频在线| 欧美日韩一区二区在线观看视频 | 日韩www.| 国产欧美精品一区二区三区介绍 | 久久精品国产亚洲一区二区| 黄色av网站免费观看| 91视频观看免费| 人妻无码久久一区二区三区免费| 日本精品在线播放| 久久婷婷国产麻豆91天堂| 亚洲性生活大片| 日本一区二区三区久久久久久久久不 | 色女孩综合网| 青青热久免费精品视频在线18| 亚洲精品一区中文| 国产又大又黄又粗| 久久老女人爱爱| 岳毛多又紧做起爽| 美女少妇全过程你懂的久久 | 色综合视频一区二区三区日韩 | 美女黄毛**国产精品啪啪| 涩涩涩视频在线观看| 精品偷拍一区二区三区在线看| 中文字幕精品三级久久久| 97精品国产97久久久久久久久久久久| 欧美一级视频免费看| 欧美做受69| 日韩av电影在线播放| 国产一区精品| 欧美喷潮久久久xxxxx| 人与动物性xxxx| 国产一区二区在线观看视频| 青青草综合在线| 一区中文字幕| 97久久久免费福利网址| 三级视频在线播放| 欧美日韩精品久久久| 男人的天堂久久久| www.66久久| 日本va中文字幕| 欧美黄色录像片| 97免费资源站| 刘亦菲一区二区三区免费看| 在线电影欧美日韩一区二区私密| 国产视频手机在线观看| 亚洲一卡二卡三卡四卡| 波多野结衣办公室33分钟| 免费观看成人av| 男人天堂新网址| 欧美巨大xxxx| 国产精品最新在线观看| 在线观看电影av| 亚洲另类图片色| 91高潮大合集爽到抽搐| 亚洲一区二区三区影院| 成人免费网站黄| 精品一区二区三区久久久| 日本a视频在线观看| 欧美色婷婷久久99精品红桃| 97操在线视频| 怡红院成人在线| 久久成人这里只有精品| 四虎精品在线| 91麻豆精品国产91久久久资源速度 | 欧美一级小视频| 国内外激情在线| 韩国精品一区二区| 日韩久久久久久久久久久久| 国产精品久久久久av蜜臀| 日本a级片电影一区二区| 免费av不卡| 亚洲国产婷婷香蕉久久久久久| 在线观看国产小视频| 亚洲午夜激情网页| 二区三区四区视频| 99re热视频精品| 亚洲热在线视频| 久久综合九色| 久久人人爽人人爽人人av| 欧美电影免费播放| 日本视频精品一区| 国产精品115| 91香蕉亚洲精品| 电影在线观看一区二区| 91高清免费视频| 天堂av在线电影| 日韩最新免费不卡| 天天干天天色天天| 日韩欧美中文一区| 亚洲一卡二卡在线| 欧美性猛交xxxx乱大交3| 一区二区成人免费视频| 国产精品理论片| 最新中文字幕av| 久久在线观看免费| 成人在线电影网站| 国产成人免费视频一区| 视频二区在线播放| 日韩国产欧美在线播放| 日韩欧美国产免费| 亚洲精品极品| 欧美高清中文字幕| 综合久久综合| 欧美一级免费在线观看| 国产精品99在线观看| 丝袜足脚交91精品| 国产va免费精品观看精品视频| 精品视频第一区| 久久精品福利| 黑人巨大精品欧美一区二区小视频| 试看120秒一区二区三区| 成人乱人伦精品视频在线观看| 国产一区二区色噜噜| 国产精品老牛影院在线观看| 在线看片福利| 日韩av日韩在线观看| 涩涩av在线| 日韩av电影院| 99re久久| 成人免费午夜电影| 精品三级久久久| 97人人干人人| 电影一区二区在线观看| 精品国产乱码久久久久| 日韩理论电影中文字幕| 麻豆av一区二区| 国产一区二区三区四区五区传媒| 日韩国产精品一区二区三区| 欧美电影免费| 日本a级片在线播放| 在线播放精品| 毛片av免费在线观看| 日韩av在线播放中文字幕| www.精品在线| 国产福利一区二区三区视频在线| 国产在线观看免费播放| 国产91综合一区在线观看| yy1111111| 久久日一线二线三线suv| 一级片久久久久| 亚洲乱码精品一二三四区日韩在线| 久草国产在线视频| 精品久久久国产| 日韩国产亚洲欧美| 日韩一区二区三区四区 | 精品一区二区三区av| 香蕉视频免费网站| 久久久精品黄色| 亚洲色偷偷综合亚洲av伊人| 亚洲国产美国国产综合一区二区| 亚洲精品男人天堂| 欧美欧美午夜aⅴ在线观看| 成人精品在线播放| 亚洲片av在线| h片在线观看网站| 欧洲中文字幕国产精品| 亚洲人体在线| 久久精品国产综合精品| 日韩av免费大片| av在线播放亚洲| 麻豆精品一区二区| 国产精品久久久久久久无码| 国产欧美1区2区3区| 青娱乐在线视频免费观看| 色88888久久久久久影院野外| 国产丝袜视频在线观看| 亚洲毛片一区二区| 午夜影院免费在线| 国产精欧美一区二区三区| 日韩免费精品| 亚洲精品国产精品国自产观看| 国语精品一区| 99re精彩视频| 久久蜜桃香蕉精品一区二区三区| 欧美成人三级在线观看| 精品视频1区2区| 日韩av高清在线| 久久免费视频网| 国产精品国产三级在线观看| 日产中文字幕在线精品一区 | 亚洲女厕所小便bbb| 日韩 国产 欧美| 亚洲成人黄色在线| av免费在线观看网址| 国产欧美日韩丝袜精品一区| 亚洲精品播放| 国产69精品久久久久999小说| 国产在线看一区| 少妇高潮惨叫久久久久| 一本大道久久a久久精二百| 狠狠人妻久久久久久综合麻豆| 色99之美女主播在线视频| 中文字幕在线看片| 国产精品免费在线| 韩国一区二区三区在线观看| 九九九九九伊人| 国产精品人人做人人爽人人添| 成人免费毛片男人用品| 亚洲福利精品在线| av第一福利在线导航| 91社区国产高清| 亚洲国产不卡| 亚洲网中文字幕| 亚洲视频资源在线| 一级α片免费看刺激高潮视频| 亚洲色图13p| 国精产品一区一区三区四川| 秋霞在线观看一区二区三区| 亚洲欧美日本国产专区一区| 国产精品麻豆入口| 亚洲午夜精品网| 免费国产羞羞网站视频| 色综合久久久久久中文网| 亚洲精品18| 日本大片免费看| 北条麻妃国产九九精品视频| 一区二区三区视频免费看| 亚洲缚视频在线观看| 韩国成人二区| 欧美1o一11sex性hdhd| 视频一区国产视频| 国精品人伦一区二区三区蜜桃| 欧美日韩和欧美的一区二区| 欧美性天天影视| 91精品国产99久久久久久红楼 | 99这里有精品视频| 欧美不卡视频一区发布| 综合激情久久| av动漫在线看| 国产视频在线观看一区二区三区| 波多野结衣理论片| 日韩中文字幕免费视频| 视频精品一区| www.爱色av.com| 亚洲国产精品精华液2区45| 国产又粗又猛又爽又黄的视频一| 精品国模在线视频| 在这里有精品| 成人av一级片| 国产精品网曝门| 亚洲成人精品女人久久久| 午夜精品免费视频| 精品久久影院| 色婷婷狠狠18禁久久| 狠狠久久亚洲欧美专区| 日本视频在线| 精品国产乱码久久久久久郑州公司| 水蜜桃久久夜色精品一区的特点 | 视频在线不卡免费观看| 五月激情五月婷婷| 午夜精品一区二区三区电影天堂| 你懂得网站在线| 成人在线激情视频| 99成人在线| 2017亚洲天堂| 精品久久久久久无| jizz久久久久久| 被灌满精子的波多野结衣| 日本一二三不卡| 天天色综合久久| 成人午夜黄色影院| 香蕉久久夜色精品| 青青草在线观看视频| 伊人久久久久久久久久久久久| 日韩第一区第二区| 国产裸体舞一区二区三区| 亚洲最大成人网4388xx| 黄网在线观看| 精品免费一区二区三区蜜桃| 久久国产综合精品| 日韩手机在线观看| 欧美成人激情视频|