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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android自定义Lint实践

發布時間:2024/7/5 Android 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android自定义Lint实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android Lint是Google提供給Android開發者的靜態代碼檢查工具。使用Lint對Android工程代碼進行掃描和檢查,可以發現代碼潛在的問題,提醒程序員及早修正。

為保證代碼質量,美團在開發流程中加入了代碼檢查,如果代碼檢測到問題,則無法合并到正式分支中,這些檢查中就包括Lint。

我們在實際使用Lint中遇到了以下問題:
- 原生Lint無法滿足我們團隊特有的需求,例如:編碼規范。 - 原生Lint存在一些檢測缺陷或者缺少一些我們認為有必要的檢測。

基于上面的考慮,我們開始調研并開發自定義Lint。

在介紹美團的實踐之前,先用一個小例子,來看看如何進行自定義Lint。

示例介紹

開發中我們希望開發者使用RoboGuice的Ln替代Log/System.out.println。

Ln相比于Log有以下優勢:

  • 對于正式發布包來說,debug和verbose的日志會自動不顯示。
  • 擁有更多的有用信息,包括應用程序名字、日志的文件和行信息、時間戳、線程等。
  • 由于使用了可變參數,禁用后日志的性能比Log高。因為最冗長的日志往往都是debug或verbose日志,這可以稍微提高一些性能。
  • 可以覆蓋日志的寫入位置和格式。

這里我們以此為例,讓Lint檢查代碼中Log/System.out.println的調用,提醒開發者使用Ln。

創建Java工程,配置Gradle

apply plugin: 'java'dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])compile 'com.android.tools.lint:lint-api:24.5.0'compile 'com.android.tools.lint:lint-checks:24.5.0' }

注:
- lint-api: 官方給出的API,API并不是最終版,官方提醒隨時有可能會更改API接口。 - lint-checks:已有的檢查。

創建Detector

Detector負責掃描代碼,發現問題并報告。

/*** 避免使用Log / System.out.println ,提醒使用Ln** RoboGuice's Ln logger is similar to Log, but has the following advantages:* - Debug and verbose logging are automatically disabled for release builds.* - Your app name, file and line of the log message, time stamp, thread, and other useful information is automatically logged for you. (Some of this information is disabled for release builds to improve performance).* - Performance of disabled logging is faster than Log due to the use of the varargs. Since your most expensive logging will often be debug or verbose logging, this can lead to a minor performance win.* - You can override where the logs are written to and the format of the logging.* * https://github.com/roboguice/roboguice/wiki/Logging-via-Ln** Created by chentong on 18/9/15.*/ public class LogDetector extends Detector implements Detector.JavaScanner{public static final Issue ISSUE = Issue.create("LogUse","避免使用Log/System.out.println","使用Ln,防止在正式包打印log",Category.SECURITY, 5, Severity.ERROR,new Implementation(LogDetector.class, Scope.JAVA_FILE_SCOPE));@Overridepublic List<Class<? extends Node>> getApplicableNodeTypes() {return Collections.<Class<? extends Node>>singletonList(MethodInvocation.class);}@Overridepublic AstVisitor createJavaVisitor(final JavaContext context) {return new ForwardingAstVisitor() {@Overridepublic boolean visitMethodInvocation(MethodInvocation node) {if (node.toString().startsWith("System.out.println")) {context.report(ISSUE, node, context.getLocation(node),"請使用Ln,避免使用System.out.println");return true;}JavaParser.ResolvedNode resolve = context.resolve(node);if (resolve instanceof JavaParser.ResolvedMethod) {JavaParser.ResolvedMethod method = (JavaParser.ResolvedMethod) resolve;// 方法所在的類校驗JavaParser.ResolvedClass containingClass = method.getContainingClass();if (containingClass.matches("android.util.Log")) {context.report(ISSUE, node, context.getLocation(node),"請使用Ln,避免使用Log");return true;}}return super.visitMethodInvocation(node);}};} }

可以看到這個Detector繼承Detector類,然后實現Scanner接口。
自定義Detector可以實現一個或多個Scanner接口,選擇實現哪種接口取決于你想要的掃描范圍
- Detector.XmlScanner - Detector.JavaScanner - Detector.ClassScanner - Detector.BinaryResourceScanner - Detector.ResourceFolderScanner - Detector.GradleScanner - Detector.OtherFileScanner

這里因為我們是要針對Java代碼掃描,所以選擇使用JavaScanner。

代碼中getApplicableNodeTypes方法決定了什么樣的類型能夠被檢測到。這里我們想看Log以及println的方法調用,選取MethodInvocation。對應的,我們在createJavaVisitor創建一個ForwardingAstVisitor通過visitMethodInvocation方法來接收被檢測到的Node。
可以看到getApplicableNodeTypes返回值是一個List,也就是說可以同時檢測多種類型的節點來幫助精確定位到代碼,對應的ForwardingAstVisitor接受返回值進行邏輯判斷就可以了。

可以看到JavaScanner中還有其他很多方法,getApplicableMethodNames(指定方法名)、visitMethod(接收檢測到的方法),這種對于直接找尋方法名的場景會更方便。當然這種場景我們用最基礎的方式也可以完成,只是比較繁瑣。

那么其他Scanner如何去寫呢?
可以去查看各接口中的方法去實現,一般都是有這兩種對應:什么樣的類型需要返回、接收發現的類型。

這里插一句,Lint是如何實現Java掃描分析的呢?Lint使用了Lombok做抽象語法樹的分析。所以在我們告訴它需要什么類型后,它就會把相應的Node返回給我們。

回到示例,當接收到返回的Node之后需要進行判斷,如果調用方法是System.out.println或者屬于android.util.Log類,則調用context.report上報。

context.report(ISSUE, node, context.getLocation(node), "請使用Ln,避免使用Log");

第一個參數是Issue,這個之后會講到; 第二個參數是當前節點; 第三個參數location會返回當前的位置信息,便于在報告中顯示定位;
最后的字符串用來為警告添加解釋。對應報告中的位置如下圖:

這里還需要說明report會自動處理被suppress(suppressLint)/ignore(tools:ignore)的警告。所以發現問題直接調用report就可以,不用擔心其他問題。

Issue

Issue由Detector發現并報告,是Android程序代碼可能存在的bug。

public static final Issue ISSUE = Issue.create("LogUse","避免使用Log/System.out.println","使用Ln,防止在正式包打印log",Category.SECURITY, 5, Severity.ERROR,new Implementation(LogDetector.class, Scope.JAVA_FILE_SCOPE));

聲明為final class,由靜態工廠方法創建。對應參數解釋如下:

  • id : 唯一值,應該能簡短描述當前問題。利用Java注解或者XML屬性進行屏蔽時,使用的就是這個id。
  • summary : 簡短的總結,通常5-6個字符,描述問題而不是修復措施。
  • explanation : 完整的問題解釋和修復建議。
  • category : 問題類別。詳見下文詳述部分。
  • priority : 優先級。1-10的數字,10為最重要/最嚴重。
  • severity : 嚴重級別:Fatal, Error, Warning, Informational, Ignore。
  • Implementation : 為Issue和Detector提供映射關系,Detector就是當前Detector。聲明掃描檢測的范圍Scope,Scope用來描述Detector需要分析時需要考慮的文件集,包括:Resource文件或目錄、Java文件、Class文件。

與Lint HTML報告對應關系

Category詳述

系統現在已有的類別如下:

  • Lint
  • Correctness (incl. Messages)
  • Security
  • Performance
  • Usability (incl. Icons, Typography)
  • Accessibility
  • Internationalization
  • Bi-directional text

自定義Category

public class MTCategory {public static final Category NAMING_CONVENTION = Category.create("命名規范", 101); }

使用

public static final Issue ISSUE = Issue.create("IntentExtraKey","intent extra key 命名不規范","請在接受此參數中的Activity中定義一個按照EXTRA_<name>格式命名的常量",MTCategory.NAMING_CONVENTION , 5, Severity.ERROR,new Implementation(IntentExtraKeyDetector.class, Scope.JAVA_FILE_SCOPE));

IssueRegistry

提供需要被檢測的Issue列表

public class MTIssueRegistry extends IssueRegistry {@Overridepublic synchronized List<Issue> getIssues() {System.out.println("==== MT lint start ====");return Arrays.asList(DuplicatedActivityIntentFilterDetector.ISSUE,//IntentExtraKeyDetector.ISSUE,//FragmentArgumentsKeyDetector.ISSUE,LogDetector.ISSUE,PrivateModeDetector.ISSUE,WebViewSafeDetector.ON_RECEIVED_SSL_ERROR,WebViewSafeDetector.SET_SAVE_PASSWORD,WebViewSafeDetector.SET_ALLOW_FILE_ACCESS,WebViewSafeDetector.WEB_VIEW_USE,HashMapForJDK7Detector.ISSUE);} }

在getIssues()方法中返回需要被檢測的Issue List。

在build.grade中聲明Lint-Registry屬性

jar {manifest {attributes("Lint-Registry": "com.meituan.android.lint.core.MTIssueRegistry")} }

至此,自定義Lint的編碼部分就完成了。
之前提到自定義Lint是一個Java工程,那么打出的jar包如何使用呢?

jar包使用

Google方案

將jar拷貝到~/.android/lint中

$ mkdir ~/.android/lint/ $ cp customrule.jar ~/.android/lint/

缺點:針對所有工程,會影響同一臺機器其他工程的Lint檢查。即便觸發工程時拷貝過去,執行完刪除,但其他進程或線程使用./gradlew lint仍可能會受到影響。

LinkedIn方案

LinkedIn提供了另一種思路 : 將jar放到一個aar中。這樣我們就可以針對工程進行自定義Lint,lint.jar只對當前工程有效。
詳細介紹請看LinkedIn博客: Writing Custom Lint Checks with Gradle。

我們對此方案進行調研,得出以下結論:

可行性

AAR Format 中寫明可以有lint.jar。
從Google Groups adt-dev論壇討論來看是官方目前的推薦方案,詳見:Specify custom lint JAR outside of lint tools settings directory
測試后發現aar中有lint.jar ,最終APK中并不會引起包體積變化。

缺點

官方plugin偶爾出bug,給人一種不太重視的感覺。

目前plugin的支持情況是:1.1.x正常,1.2.x不支持,1.3.x修復問題,1.5.x正常。
1.2.x Gradle plugin遇到的兩個問題:
- Issue 174808:custom lint in AAR doesn’t work - Issue 178699:lint.jar in AAR doesn’t work sometimes

經過對比,我們最終選擇了LinkedIn的方案。

在確定方案后,我們為Lint增加了很多功能,包括編碼規范和原生Lint增強。這里以HashMap檢測為例,介紹一下美團Lint。

增強HashMap檢測

Lint檢測中有一項是Java性能檢測,常見的就是:HashMap can be replaced with SparseArray。

public static void testHashMap() {HashMap<Integer, String> map1 = new HashMap<Integer, String>();map1.put(1, "name");HashMap<Integer, String> map2 = new HashMap<>();map2.put(1, "name");Map<Integer, String> map3 = new HashMap<>();map3.put(1, "name"); }

對于上述代碼,原生Lint只能檢測第一種情況,JDK 7泛型新寫法還檢測不到。
了解到這點之后,我們決定為HashMap提供增強檢測。
分析源碼后發現,HashMap檢測是根據new HashMap處的泛型來判斷是否符合條件。 于是我們想到,在發現new HashMap后去找前面的泛型,因為本身Java就是靠類型推斷的,我們可以直接根據前面的泛型來確定是否使用SparseArray。當然,是不是HashMap還需要通過后面的new HashMap來判斷,否則容易出現問題。

代碼如下:

@Override public List<Class<? extends Node>> getApplicableNodeTypes() {return Collections.<Class<? extends Node>>singletonList(ConstructorInvocation.class); }private static final String INTEGER = "Integer"; //$NON-NLS-1$ private static final String BOOLEAN = "Boolean"; //$NON-NLS-1$ private static final String BYTE = "Byte"; //$NON-NLS-1$ private static final String LONG = "Long"; //$NON-NLS-1$ private static final String HASH_MAP = "HashMap"; //$NON-NLS-1$@Override public AstVisitor createJavaVisitor(@NonNull JavaContext context) {return new ForwardingAstVisitor() {@Overridepublic boolean visitConstructorInvocation(ConstructorInvocation node) {TypeReference reference = node.astTypeReference();String typeName = reference.astParts().last().astIdentifier().astValue();// TODO: Should we handle factory method constructions of HashMaps as well,// e.g. via Guava? This is a bit trickier since we need to infer the type// arguments from the calling context.if (typeName.equals(HASH_MAP)) {checkHashMap(context, node, reference);}return super.visitConstructorInvocation(node);}}; }/*** Checks whether the given constructor call and type reference refers* to a HashMap constructor call that is eligible for replacement by a* SparseArray call instead*/ private void checkHashMap(JavaContext context, ConstructorInvocation node, TypeReference reference) {StrictListAccessor<TypeReference, TypeReference> types = reference.getTypeArguments();if (types == null || types.size() != 2) {/*JDK 7 新寫法HashMap<Integer, String> map2 = new HashMap<>();map2.put(1, "name");Map<Integer, String> map3 = new HashMap<>();map3.put(1, "name");*/Node variableDefinition = node.getParent().getParent();if (variableDefinition instanceof VariableDefinition) {TypeReference typeReference = ((VariableDefinition) variableDefinition).astTypeReference();checkCore(context, variableDefinition, typeReference);// 此方法即原HashMap檢測邏輯}}// else --> lint本身已經檢測 }

代碼很簡單,總體就是獲取變量定義的地方,將泛型值傳入原先的檢測邏輯。
當然這里的增強也是有局限的,比如這個變量是成員變量,向前的推斷就會有問題,這點我們還在持續的優化中。

總結一下實踐過程中的技巧:

  • 因為沒有好的文檔,我們更多地是要從源碼的檢測中學習,多看lint-checks。
  • 需要的時候使用SdkConstants,充分利用LintUtils,Lint給我們提供了很多方便的工具。

為自定義Lint開發plugin

aar雖然很方便,但是在團隊內部推廣中我們遇到了以下問題:
- 配置繁瑣,不易推廣。每個庫都需要自行配置lint.xml、lintOptions,并且compile aar。 - 不易統一。各庫之間需要使用相同的配置,保證代碼質量。但現在手動來回拷貝規則,且配置文件可以自己修改。

于是我們想到開發一個plugin,統一管理lint.xml和lintOptions,自動添加aar。

統一lint.xml

我們在plugin中內置lint.xml,執行前拷貝過去,執行完成后刪除。

lintTask.doFirst {if (lintFile.exists()) {lintOldFile = project.file("lintOld.xml")lintFile.renameTo(lintOldFile)}def isLintXmlReady = copyLintXml(project, lintFile)if (!isLintXmlReady) {if (lintOldFile != null) {lintOldFile.renameTo(lintFile)}throw new GradleException("lint.xml不存在")}}project.gradle.taskGraph.afterTask { task, TaskState state ->if (task == lintTask) {lintFile.delete()if (lintOldFile != null) {lintOldFile.renameTo(lintFile)}} }

統一lintOptions

Android plugin在1.3以后允許我們替換Lint Task的lintOptions:

def newOptions = new LintOptions() newOptions.lintConfig = lintFile newOptions.warningsAsErrors = true newOptions.abortOnError = true newOptions.htmlReport = true //不放在build下,防止被clean掉 newOptions.htmlOutput = project.file("${project.projectDir}/lint-report/lint-report.html") newOptions.xmlReport = falselintTask.lintOptions = newOptions

自動添加最新aar

這里還涉及一個問題:當我們plugin開發完成提供給團隊使用的時候,假設我們需要修改lint aar,那么團隊的plugin就要統一升級。這點就比較繁瑣。
考慮到plugin只是一個檢查代碼插件,它最需要的應該是實時更新。 我們引入了Gradle Dynamic Versions:

project.dependencies {compile 'com.meituan.android.lint:lint:latest.integration' }project.configurations.all {resolutionStrategy.cacheDynamicVersionsFor 0, 'seconds' }

plugin開發完成,就可以提供給團隊部署了。
當然為了團隊更方便地接入檢查,我們在檢查流程中內置了腳本來自動添加plugin,這樣團隊就可以在不添加任何代碼的情況下,實現自定義Lint檢查。

  • Google. Writing Custom Lint Rules. Android Tools Project Site.
  • Google. Writing a Lint Check. Android Tools Project Site.
  • Prengemann M. The Power of Custom Lint Checks. SpeakerDeck.
  • Diermann A. Custom Lint Rules. GitHub.
  • Diermann A. Android Lint API Reference Guide. GitHub.
  • Google. Android Custom Lint Rules Sample Code. GitHub.
  • Cheng Yang. Writing Custom Lint Checks with Gradle. LinkedIn.

總結

以上是生活随笔為你收集整理的Android自定义Lint实践的全部內容,希望文章能夠幫你解決所遇到的問題。

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

日韩毛片久久久 | 精品久久美女 | 国产成年免费视频 | 久久精品艹| 伊人天天干 | 国内精品久久久久影院优 | 天天射天天做 | 久久在线电影 | 国产成人精品久久久久 | 91 在线视频 | 欧洲视频一区 | 97精品视频在线 | 久草在在线视频 | 一区二区三区四区五区六区 | 国产精品免费观看久久 | 九九久久电影 | 国产午夜视频在线观看 | 成人av教育| 在线观看小视频 | 久久久久综合 | 成年人视频在线免费播放 | 草久久久| 国产男男gay做爰 | 国产精品久久久久久模特 | 在线综合 亚洲 欧美在线视频 | 中文字幕视频免费观看 | 日韩视频专区 | www国产精品com | 五月激情亚洲 | 国产精品久久久久久久久久免费看 | 国产视频1| 国产亚洲视频系列 | 久久99亚洲精品久久 | 国产一区二区免费看 | 久操视频在线免费看 | 久久激情视频免费观看 | aⅴ精品av导航| 一级精品视频在线观看宜春院 | 天天综合网在线观看 | 天天天干天天天操 | a爱爱视频| 88av网站| 91.精品高清在线观看 | 久久久精品国产免费观看一区二区 | 成年人免费av网站 | www天天操 | 色姑娘综合天天 | 亚洲精品777| 黄色不卡av| 欧美精品999 | 日韩精品一区二区在线 | 精品久久国产 | 欧美一级裸体视频 | 99视频精品 | 久久成人一区二区 | 久久官网 | 五月天激情综合 | 九九免费在线观看 | 色瓜| 午夜黄色一级片 | 欧美91av| 中文字幕永久在线 | 天堂在线一区二区 | 182午夜在线观看 | 五月天丁香综合 | 最近中文字幕免费观看 | 色婷婷视频 | 热久久这里只有精品 | 久久久免费看 | 日韩欧美国产视频 | 婷婷丁香狠狠爱 | 在线观看91精品视频 | 高清av网站 | 黄在线免费看 | 日韩极品在线 | 国产一区二区三区四区在线 | 91成人免费看 | 国产精品区二区三区日本 | 婷婷色亚洲| 欧洲一区精品 | 波多野结衣视频在线 | 成人在线免费观看视视频 | 亚洲精选视频免费看 | 99精品久久精品一区二区 | 中文字幕之中文字幕 | 黄色在线观看免费 | 日本中文字幕在线 | 国产精品久久久av久久久 | 婷婷5月色 | 亚洲无线视频 | 国内精品视频久久 | 91超碰免费在线 | 亚洲人片在线观看 | 欧美日韩伦理一区 | 国产在线视频导航 | 国产一区二区在线看 | 99在线观看免费视频精品观看 | 精品国产亚洲日本 | 久久精品久久久久久久 | 色在线中文字幕 | 国产精品三级视频 | av在线播放国产 | 四虎影视成人永久免费观看亚洲欧美 | 国产成人精品一区二区三区在线观看 | 亚洲伦理一区二区 | 2019中文最近的2019中文在线 | 天天婷婷 | 国产69精品久久久久99尤 | 99精品在线播放 | av观看免费在线 | 福利网在线 | 一区二区三区四区五区在线视频 | 美女又爽又黄 | 美女网站视频久久 | 成人久久免费视频 | 国产在线播放不卡 | 91九色在线观看视频 | 激情五月婷婷综合 | 免费在线国产视频 | 亚洲成人免费在线 | 精品字幕在线 | 91久久精品一区 | 精品无人国产偷自产在线 | 久久精品国产久精国产 | 韩日精品视频 | 黄色一级在线视频 | 亚洲视频精品在线 | 日韩欧美精品免费 | 热re99久久精品国产99热 | 国产精品国产三级国产aⅴ无密码 | 国产手机视频在线 | 久久久精品在线观看 | 91在线视频 | 国产一区免费观看 | 久久精品视频在线观看 | 992tv人人网tv亚洲精品 | 欧美日韩精品在线观看视频 | 国产成人精品午夜在线播放 | 91精品免费在线 | 亚洲成av人片在线观看无 | 国产黄网站在线观看 | 久久伊人爱 | 免费在线观看日韩视频 | 国产69精品久久久久久 | 中文字幕精品三区 | 日本久热 | 久久精品国产免费看久久精品 | 国产精品黄色 | 日日夜夜精品视频天天综合网 | 欧美日韩精品区 | 欧美男同视频网站 | 在线 精品 国产 | 中文字幕精品一区 | 日韩xxx视频| 日操操 | 五月天久久精品 | 丁香花在线观看免费完整版视频 | 欧美成人按摩 | 欧美午夜一区二区福利视频 | 天天爽夜夜爽精品视频婷婷 | 欧美极度另类 | av高清在线 | 8x成人免费视频 | 成人国产一区 | 欧美日韩一区二区三区视频 | 欧美性春潮 | 欧产日产国产69 | 久久精品久久久精品美女 | 日韩精品视频一二三 | 久久久久久久久久久久电影 | 婷婷丁香导航 | 国产中文字幕一区二区 | 青春草免费在线视频 | 欧美日韩亚洲在线观看 | 欧美日韩不卡在线视频 | 国产99免费 | 久久久久成人免费 | 久久婷婷色 | 欧美网站黄色 | 免费看的毛片 | 成人av午夜 | 日韩高清三区 | 亚洲天天在线日亚洲洲精 | 亚洲免费在线播放视频 | 亚洲精品麻豆视频 | 99久久精品日本一区二区免费 | 一级电影免费在线观看 | 亚州精品天堂中文字幕 | 久久精品国产免费看久久精品 | 激情视频一区二区 | 成人av在线观 | 黄色91在线 | 日本精品在线视频 | 国产黄色片免费看 | 日韩精品中文字幕在线 | 99视频在线观看免费 | 国产成人三级三级三级97 | 在线免费中文字幕 | 精品久久久久国产免费第一页 | 日韩美女黄色片 | 欧美另类色图 | 久久爱992xxoo | 日日干日日 | 国产伦精品一区二区三区无广告 | 欧美日韩激情网 | 成人一级黄色片 | 久久久婷 | 天天天天天天天天操 | 久热超碰| 成人全视频免费观看在线看 | 免费在线观看av片 | 狠狠色网 | 69精品在线 | av一级在线 | 国产在线专区 | 亚洲精品66 | 91免费视频网站在线观看 | 国产999在线观看 | 日日色综合| 激情片av | 日韩在线观看视频中文字幕 | 日韩高清黄色 | 国产精品国产亚洲精品看不卡 | 探花视频在线观看 | 午夜国产福利在线观看 | 久久精品爱视频 | 精品在线看 | 精品一区精品二区高清 | 午夜精选视频 | 中文字幕在线看视频国产 | 欧美色图视频一区 | 黄色一级在线观看 | 日韩成人免费电影 | 超碰在线98 | 日韩一区二区三区不卡 | 亚洲自拍自偷 | 久久久视频在线 | 久久成人精品 | 人人插人人插 | 日日夜夜免费精品 | 国产精品永久免费 | 91亚洲欧美激情 | 亚洲精品成人av在线 | 91免费在线看片 | 久久精品看片 | 四虎成人免费观看 | 亚洲精品欧美视频 | 国产资源在线免费观看 | 国产一区二区手机在线观看 | 99久久久成人国产精品 | 91高清在线 | 久久99精品国产麻豆婷婷 | 日韩一级片网址 | 日韩黄色在线观看 | 日韩欧美网站 | 手机看片国产日韩 | 在线亚洲播放 | 精品国产资源 | 91麻豆精品国产自产 | 色综合久久综合中文综合网 | 久久国产影视 | 日本在线观看中文字幕无线观看 | 久久久在线观看 | 婷婷六月天天 | 麻豆视频免费入口 | 国产在线高清视频 | 国产日韩欧美在线观看 | 在线国产能看的 | 97在线视频免费看 | 国产精品美女免费视频 | 日批视频在线 | av短片在线观看 | 91av视频导航 | 91天天视频 | 亚洲五月 | 国产理论片在线观看 | 免费久久久久久久 | 国产成人精品一区一区一区 | 18国产精品福利片久久婷 | 色噜噜在线观看 | 亚洲综合情 | 91精品欧美一区二区三区 | 激情丁香久久 | 美女在线免费视频 | 热久久国产精品 | 国产日韩视频在线 | 51久久成人国产精品麻豆 | 狠狠躁日日躁狂躁夜夜躁 | 国产精品成人久久 | 亚洲国产影院 | 欧美少妇xx | 成人黄色大片 | 亚洲国产免费看 | 国产一区二区不卡视频 | 日韩欧美在线观看一区二区 | 美女黄久久 | 成人在线免费观看视视频 | 四虎永久网站 | 在线观看成人福利 | 久久久久综合网 | 黄色在线看网站 | 国产成人久久 | 夜色资源网 | 四虎影视av| 久久高清免费观看 | 又黄又爽又刺激视频 | 成人动图 | 91久久久久久久一区二区 | 亚洲精品在线视频网站 | av一级在线 | 欧美一区二区精美视频 | 久久综合九色综合久99 | 国内视频在线 | 久久五月婷婷综合 | 天天操夜夜操国产精品 | 六月色婷 | 视频在线观看亚洲 | 手机看片国产日韩 | 亚洲国产网站 | 欧美日韩一区二区在线观看 | 中文伊人| 黄色一区三区 | 在线观看激情av | 国产成人精品亚洲日本在线观看 | 成人午夜av电影 | 麻豆久久久久久久 | 日韩在线视频网站 | 成年人免费观看在线视频 | 91av在线免费看 | 日本久久久久久 | 欧美日韩视频在线 | 久久在线精品视频 | 亚洲综合欧美精品电影 | 在线之家免费在线观看电影 | 国产一区二区不卡视频 | 九九视频在线 | 免费在线观看成人av | 久久国内免费视频 | 一区二区三区免费在线观看 | 午夜久久网站 | 欧美一级日韩三级 | 午夜国产福利视频 | 欧美日产在线观看 | 亚洲精品一区二区三区在线观看 | 在线视频手机国产 | 日韩高清在线看 | 干干干操操操 | 在线久热 | 黄色动态图xx| 久久综合九色综合欧美就去吻 | 视频二区| 国产精品影音先锋 | 国产日韩在线观看一区 | 国产成人精品一区一区一区 | 亚洲三区在线 | 精品久久99 | 亚洲美女免费视频 | 激情久久五月天 | 97超碰人人澡人人 | 激情久久伊人 | 欧美做受xxx| 手机在线看永久av片免费 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 91污视频在线观看 | 96亚洲精品久久 | 国产999| av在线com | 久久精品网站免费观看 | 成人夜晚看av | 亚洲h在线播放在线观看h | 国产又粗又猛又爽又黄的视频免费 | 欧美极品在线播放 | 免费观看黄 | 99这里都是精品 | 亚洲精品欧洲精品 | 成人网在线免费视频 | 久久6精品 | 丁香花在线视频观看免费 | 国产色就色 | www.99热精品 | 免费在线a | 国产 日韩 欧美 中文 在线播放 | 中文字幕在线观看一区二区三区 | 久久精品理论 | 久久九九影视 | 又黄又爽又无遮挡的视频 | 超碰人人av | 在线国产不卡 | av在线电影网站 | www.国产在线| 国产成人精品一区二区三区免费 | 天天操夜操| 国产夫妻自拍av | 91精品国产一区二区在线观看 | 草久久久 | 玖玖玖影院 | 黄色三级在线看 | 中文字幕一区三区 | 丁香婷婷基地 | 亚洲精品99 | 久久这里只有精品首页 | 99精品国产99久久久久久福利 | av中文国产| 偷拍福利视频一区二区三区 | 在线观看中文字幕第一页 | 五月婷婷开心中文字幕 | 久草视频在线免费看 | 四虎永久免费在线观看 | 中文字幕亚洲综合久久五月天色无吗'' | 久久久噜噜噜久久久 | 欧美日韩高清在线观看 | 九九九九精品九九九九 | 免费国产在线精品 | 欧美日韩免费视频 | avlulu久久精品 | 香蕉视频色| 久久久久国产精品视频 | 在线国产精品视频 | 啪啪av在线 | 国产高清在线精品 | 五月天久久综合网 | www.天天成人国产电影 | 色香天天 | 521色香蕉网站在线观看 | 久久经典视频 | 91人人在线 | 国产在线a免费观看 | 国模视频一区二区三区 | 超碰人人乐 | 91欧美日韩国产 | 亚洲精品国产精品乱码在线观看 | 中文字幕在线看视频国产中文版 | 九色精品免费永久在线 | 蜜臀av麻豆 | 日韩系列 | 国产在线欧美在线 | 日韩丝袜视频 | 欧美激情视频三区 | 中文字幕在线观看国产 | 欧美日韩首页 | 在线观看中文 | h视频在线看| 日日干,天天干 | 久保带人 | 亚州人成在线播放 | 中文字幕观看视频 | 天天操天天添天天吹 | 天天色天天综合 | 日韩免费观看一区二区三区 | 香蕉在线视频观看 | 99久久婷婷国产 | 在线观看视频日韩 | 伊人五月天 | 国产欧美日韩一区 | 三级黄免费看 | 日女人免费视频 | 黄色av电影一级片 | 九九九免费视频 | 久久最新视频 | 日本精品一区二区三区在线观看 | 久久国产亚洲视频 | 国产精品美女久久久久久网站 | 婷婷中文字幕在线观看 | 91精品在线免费 | 91精品人成在线观看 | 色五月成人 | 精品视频99 | av免费观看网站 | 亚洲精品日韩一区二区电影 | 97在线观看免费视频 | 欧美日韩高清免费 | 精品专区一区二区 | 久久久久人人 | 手机在线视频福利 | 欧美日韩国产精品一区二区亚洲 | 免费污片 | 激情综合色图 | 韩国av不卡 | 久久综合婷婷国产二区高清 | 日韩网站在线播放 | 日韩高清三区 | 久久伦理影院 | 夜夜高潮夜夜爽国产伦精品 | 五月婷网站 | 亚洲精品中文字幕视频 | 国产真实精品久久二三区 | 9久久精品 | 亚洲首页| www五月| 欧美视频在线观看免费网址 | 热久久国产 | 午夜色影院 | 91在线精品秘密一区二区 | 天天做夜夜做 | 久久国产露脸精品国产 | 国产黄a三级三级三级三级三级 | 国产精品国产三级在线专区 | 国产手机免费视频 | 日韩欧美精品一区二区三区经典 | 国产精品手机在线 | 色99久久 | 深爱激情av | 91大神一区二区三区 | 亚洲欧洲av | 91看片看淫黄大片 | 黄a在线 | 欧美一区二区三区激情视频 | 日韩精品中文字幕在线 | 日本视频久久久 | 亚洲网站在线看 | 成人小电影在线看 | 超碰99在线 | 男女精品久久 | 麻豆视频免费看 | 亚洲精品久久激情国产片 | 国产福利一区二区三区在线观看 | 91精品麻豆 | 五月天六月婷 | 国产欧美最新羞羞视频在线观看 | 欧美日韩成人 | 久久99国产精品久久99 | 日本久久不卡视频 | 综合久久久 | 日日噜噜噜噜夜夜爽亚洲精品 | 天天干天天干天天干天天干天天干天天干 | 国产不卡精品视频 | 久久精彩视频 | 99久久精品免费看国产免费软件 | 亚洲在线精品视频 | 久久黄色a级片 | 美女网站免费福利视频 | 国产午夜影院 | 精品国产1区 | 97色综合 | 精品免费一区 | 亚洲精品国产综合99久久夜夜嗨 | av视屏在线播放 | 日韩大片在线免费观看 | а天堂中文最新一区二区三区 | 成人久久久久久久久 | 国产一级特黄毛片在线毛片 | 三上悠亚一区二区在线观看 | 国内毛片毛片 | 黄色电影在线免费观看 | 国内精品久久久久影院一蜜桃 | 国内精品二区 | 免费a级毛片在线看 | 黄色电影网站在线观看 | 在线观看岛国av | 日韩欧美xxxx | 国产专区一 | 久久福利剧场 | 欧美精品在线观看 | 亚洲免费永久精品国产 | www.国产毛片 | 日韩中文字 | 亚洲成人午夜在线 | 黄色软件在线观看免费 | 天天拍夜夜拍 | 亚洲成熟女人毛片在线 | 国产护士av | 国产在线精品一区 | 国产高清日韩欧美 | 欧美一级视频在线观看 | 一级片观看 | 国产亚洲精品无 | 三级av免费| 五月开心六月婷婷 | 精品国产自在精品国产精野外直播 | 国产美女免费 | 西西www4444大胆视频 | 青春草视频 | 五月婷婷六月丁香激情 | 免费在线成人av电影 | 最新高清无码专区 | 最新av网址大全 | 免费在线观看日韩欧美 | 国产成人福利在线观看 | 人人爽人人搞 | 婷婷深爱网 | 亚洲午夜精品电影 | 日韩mv欧美mv国产精品 | 亚洲天堂精品视频在线观看 | 亚洲婷婷丁香 | 欧美精品久久天天躁 | 国产99久久久精品视频 | 亚洲激情一区二区三区 | 99久久精品一区二区成人 | av一区在线播放 | 国产尤物视频在线 | av中文字幕在线观看网站 | 亚洲国产合集 | 97国产精品视频 | 亚洲一一在线 | 国产区精品在线观看 | 国产免费一区二区三区网站免费 | 麻豆国产露脸在线观看 | 国产韩国日本高清视频 | av在线超碰 | 日韩xxxxxxxxx | 蜜臀久久99精品久久久无需会员 | av在线免费观看网站 | 天天天天射 | 亚洲精品网页 | 日韩二区在线 | 香蕉影视| 成人啊 v | 特黄一级毛片 | 色欲综合视频天天天 | 久久99久久久久久 | 黄色三级免费看 | 人人澡人人舔 | 国产精品黄网站在线观看 | 免费黄色a网站 | 天天操夜操 | 99视频免费播放 | 国产精品久久久区三区天天噜 | 涩涩网站在线观看 | 久草在线免费资源 | 中文字幕乱码日本亚洲一区二区 | 不卡精品 | 亚洲在线精品 | 免费在线黄色av | 波多野结衣动态图 | 成人午夜av电影 | 国产黄免费在线观看 | 色婷婷av一区 | 国产高清无av久久 | 天天射天天干天天 | 亚洲五月花| 天天操天天摸天天射 | 99色国产| 久久久黄色av | 久久综合毛片 | 精品国产亚洲日本 | www.五月天激情 | 亚洲人片在线观看 | 天天视频色 | 久久久久久久免费看 | 99久久精品免费视频 | 日韩中文字幕第一页 | 超碰com| 国产美腿白丝袜足在线av | 国产精品国产毛片 | 麻花传媒mv免费观看 | 欧美一区二区精品在线 | 五月激情丁香婷婷 | 91精品国产福利在线观看 | 国产亚洲视频在线免费观看 | 999电影免费在线观看2020 | 人人插人人射 | 国产成人一区二区三区久久精品 | 欧美三人交 | 1区2区视频| 欧美另类亚洲 | 亚洲国产精品影院 | 国产va精品免费观看 | av免费在线看网站 | 亚洲精品在线观看中文字幕 | 亚洲午夜久久久影院 | 中文字幕一区二区在线播放 | av电影免费在线播放 | 91豆麻精品91久久久久久 | 日韩伦理片hd | 99色资源 | 久久精品导航 | 亚洲日本在线视频观看 | 日韩精品久久中文字幕 | 综合中文字幕 | 成人资源站| 啪啪av在线| 超碰在线人人97 | 亚洲精品黄网站 | 免费看十八岁美女 | 国产老熟 | 91九色在线| 丁香色婷 | 91九色在线播放 | 五月婷婷六月丁香激情 | 四虎影院在线观看av | 成人av电影免费观看 | 综合久久精品 | 国产成人久久精品77777 | 欧美人zozo| 国产欧美综合在线观看 | 999久久国精品免费观看网站 | 亚洲网站在线看 | 国产字幕在线播放 | 久久精品亚洲一区二区三区观看模式 | 97偷拍视频 | 国产黄色精品网站 | 国内精品亚洲 | 久久久久免费精品国产小说色大师 | 国产精品久久久久久影院 | 亚洲精品国产成人av在线 | 精品久久久久久久久久久院品网 | 久久老司机精品视频 | 国产亚洲精品久久久久秋 | 玖玖在线观看视频 | 日韩v在线91成人自拍 | 激情五月婷婷丁香 | 狠狠色丁香久久婷婷综合_中 | 91成人网页版 | 久草在线视频免赞 | av在线播放网址 | 色婷婷中文 | 国产精品久久久久久久久久免费看 | 欧美日韩国产在线 | 国产精久久久久久妇女av | 国产午夜在线 | 久久精品国产免费看久久精品 | 亚洲美女在线国产 | 色噜噜色噜噜 | 天天插狠狠干 | 99久久超碰中文字幕伊人 | 国产美女精品人人做人人爽 | 国产亚洲精品久久 | 国产首页| 午夜精品久久久久久久99婷婷 | 精品一区中文字幕 | 精品视频资源站 | 草久久影院| 国产视频精品网 | 精品国产乱子伦一区二区 | 深爱激情站 | 国产精品综合久久久久 | 午夜久久网 | 婷婷激情五月 | 四虎永久免费在线观看 | 在线观看视频免费大全 | 99视频在线看 | 黄色一级在线免费观看 | www.色com | 天天干天天干天天干天天干天天干天天干 | 涩五月婷婷 | 日韩在线不卡 | 亚洲精品视频国产 | 国产一区在线视频观看 | 日韩激情片在线观看 | 99久久精品国产亚洲 | 黄色一级影院 | 视频 国产区| 娇妻呻吟一区二区三区 | 国产护士在线 | 日韩一区二区久久 | 中文字幕日本在线观看 | 激情综合交 | 日韩精品一区二区三区高清免费 | 日韩av快播电影网 | 91亚色视频在线观看 | 亚洲专区 国产精品 | 中文国产在线观看 | 久久久网址 | 久久精品第一页 | 91成人在线免费观看 | 五月婷久久 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 91桃色在线观看视频 | 超碰人人乐| 三级大片网站 | 伊人网综合在线观看 | 色综合久久综合中文综合网 | 国产麻豆精品免费视频 | 人人爽人人澡人人添人人人人 | 天天综合网 天天综合色 | 97av视频在线观看 | 少妇性aaaaaaaaa视频 | 免费在线黄网 | 久久综合九色综合欧美就去吻 | 91视频在线观看免费 | 色九九影院 | 黄污网站在线 | 国产美女视频网站 | 亚洲精品三级 | 亚洲伊人成综合网 | 亚洲在线综合 | 日本精品视频在线 | 国产精品久久久毛片 | 中文字幕在线一区二区三区 | 国产精品99久久久久久宅男 | 亚洲欧美日韩一区二区三区在线观看 | 国产精品久久久久久欧美 | 手机在线免费av | 一区精品久久 | 国产天天爽 | 天天干天天拍 | 国产一卡二卡在线 | 亚洲电影第一页av | 最近日韩免费视频 | 人人爽网站 | 成人免费一区二区三区在线观看 | 菠萝菠萝在线精品视频 | 菠萝菠萝蜜在线播放 | 在线观看国产麻豆 | 国产日本亚洲 | 狠狠色免费 | 国产中文视 | 久久综合九色综合久久久精品综合 | 欧美男男激情videos | 国产在线观看国语版免费 | 激情片av| 久久综合婷婷国产二区高清 | 丁香花中文字幕 | 91精品免费视频 | 正在播放亚洲精品 | 久久人人添人人爽添人人88v | 狠狠的操你 | 91亚洲精品久久久蜜桃网站 | 国产中文字幕在线看 | 成人黄色大片网站 | 免费99| 狠狠操天天操 | 久久精品免费看 | 亚色视频在线观看 | 超碰人在线 | 国产一级片免费观看 | 成人啪啪18免费游戏链接 | 射射色 | 手机在线看永久av片免费 | 亚洲综合射 | 久草在线手机视频 | 国产成人久久久77777 | 亚洲欧洲精品一区二区精品久久久 | 国产做a爱一级久久 | 精品福利片 | 久久久精品国产免费观看同学 | 97视频入口免费观看 | 亚洲激情小视频 | 人人射人人爱 | 国产精品精品久久久久久 | 六月婷婷久香在线视频 | 天天草天天草 | 亚洲天堂毛片 | 日韩av影视 | 国产欧美精品xxxx另类 | 99视频精品 | 91在线中文字幕 | 69视频在线 | 免费精品视频 | 日韩成片 | 在线观看中文字幕亚洲 | 亚洲成av人电影 | 伊人色综合久久天天网 | 国产无限资源在线观看 | 99精品成人 | 免费日韩视频 | 日韩精品视频在线免费观看 | 91香蕉视频色版 | japanese黑人亚洲人4k | 夜夜干天天操 | 99在线观看视频网站 | 国产视频欧美视频 | 国产精品专区在线观看 | 日韩精品视频久久 | 久久精品福利 | 草久视频在线 | 欧美性一级观看 | 久99久中文字幕在线 | 久久九九影院 | 国产又粗又猛又黄视频 | 日日夜夜操av| 国产毛片在线 | 超碰在线人人97 | 久久免费视频网站 | 久久精品99北条麻妃 | 免费观看一区二区 | 黄色网在线播放 | 97视频在线观看播放 | 91人人揉日日捏人人看 | 狠狠干成人综合网 | 国产成人精品在线播放 | 六月丁香婷婷久久 | 亚洲第一区在线观看 | 五月天免费网站 | 国产精品一区二区免费在线观看 | 欧美日韩在线视频一区 | 久久全国免费视频 | 日韩电影久久久 | 成年人免费电影在线观看 | 日韩理论影院 | 亚洲欧美日韩在线一区二区 | 日日射天天射 | 999久久国精品免费观看网站 | 日韩在线精品 | 免费网站色 | 国产精品毛片一区视频播 | 在线播放亚洲 | 在线视频一二区 | 在线看片中文字幕 | 在线观看亚洲a | 国产一区在线免费 | 国产精品精品视频 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 中文字幕欧美三区 | 欧美日韩精品在线播放 | 久久精品电影院 | 欧美电影在线观看 | 亚洲精品视频在线播放 | 欧美激情第十页 | 久久久久久久国产精品视频 | 亚洲涩涩涩涩涩涩 | 九九爱免费视频在线观看 | 在线观看中文字幕av | 精品久久久久一区二区国产 | 欧美精品免费在线 | 亚洲黄色小说网址 | 欧美一级免费黄色片 | 婷婷丁香色| 国产美女精品人人做人人爽 | 在线播放日韩av | 久久精品4 | 在线免费av播放 | 亚洲一区精品二人人爽久久 | 天天干天天怕 | www.97色.com | 91免费观看视频在线 | 国产精品区免费视频 | 中文在线免费看视频 | 蜜臀av性久久久久av蜜臀三区 | 在线观看黄色免费视频 | 亚洲第一久久久 | 亚洲国产日本 | 国产精品一区在线播放 | 国产精品久久精品国产 | 51精品国自产在线 | 亚洲国产一区在线观看 | 成人h电影在线观看 | av中文字幕在线观看网站 | 在线观看成人国产 | 91av在线免费播放 | 精品国产乱码一区二区三区在线 | 色国产精品 | 一区二区视频在线免费观看 | 国产精品激情在线观看 | 国产偷国产偷亚洲清高 | 中文字幕精品三区 | 久久久黄视频 | 午夜精品av | 国产视频每日更新 | 久久免费精彩视频 | 国产九九九精品视频 | 国产视频中文字幕 | 久久9精品 | 久免费视频 | 久久国产经典视频 | av大片免费看 | 欧美精品午夜 | 黄色三级在线 | 国产麻豆视频免费观看 | 久久久久97国产 | 国产精品网在线观看 | 久久网站av| 日韩av女优视频 | 久久国产成人午夜av影院潦草 | 国产亚洲精品免费 | 亚洲精品久久视频 | 激情五月看片 | 中文在线免费视频 | 91久久久久久久一区二区 | 视频在线国产 | 在线国产视频 | .国产精品成人自产拍在线观看6 | av永久网址 | 九九热免费观看 | 久操中文字幕在线观看 | 日韩欧美高清视频在线观看 | 日韩一区二区三免费高清在线观看 | 深爱婷婷网 | 看毛片的网址 | 欧美性猛片, | 久久国产a | 久久亚洲免费 | 亚洲精品久久久蜜臀下载官网 | 99精品欧美一区二区三区黑人哦 | 日本中文乱码卡一卡二新区 | 久久艹综合 | 91av电影网| 中文字幕黄色网址 | 夜色资源站国产www在线视频 | 欧美视频99 | 久久精品精品电影网 | 久久激情视频网 | 国产伦精品一区二区三区四区视频 | 免费看片色 | 91久久人澡人人添人人爽欧美 | 亚洲人天堂 | 456成人精品影院 | 97碰在线视频 | 深爱开心激情 | 波多野结衣在线观看视频 | 人人射网站 | 在线看黄色的网站 | 五月婷婷丁香在线观看 | 精品久久久久久久久久久久 | 91网站在线视频 | 正在播放 久久 | 婷婷六月在线 | 国产专区精品视频 |