日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > 綜合技術(shù) > Android開發(fā)基礎(chǔ)規(guī)范(一)

Android開發(fā)基礎(chǔ)規(guī)范(一)

來源:程序員人生   發(fā)布時間:2016-10-22 13:05:58 閱讀次數(shù):2895次

轉(zhuǎn)載請把頭部出處鏈接和尾部2維碼1起轉(zhuǎn)載,本文出自逆流的魚yuiop:http://blog.csdn.net/hejjunlin/article/details/52602487

前言:Android中1些開發(fā)規(guī)范,避免給自己和他人少留坑。

1、工程相干

  • 1.1 工程結(jié)構(gòu)
    當(dāng)進(jìn)行提交代碼的工作時,工程應(yīng)當(dāng)保持以下的目錄結(jié)構(gòu):
//create by 逆流的魚yuiop on 2016/9/21 //blog地址:http://blog.csdn.net/hejjunlin - src/androidTest - src/test - src/commonTest - src/main - androidTest - 功能測試目錄 - test - 單元測試目錄 - commonTest - 為AndroidTest & Test 提供的同享測試代碼的目錄 - main - 利用代碼目錄

當(dāng)你修改或增加新功能的時候,工程結(jié)構(gòu)仍然應(yīng)當(dāng)保持如上的模樣。
使用如上的工程結(jié)構(gòu)可讓我們的利用代碼從相干的測試代碼中分離出來。
CommonTest目錄使得我們的功能測試和單元測試可以同享部份代碼,比如mock model creation and dagger test configuration classes.

  • 1.2 文件命名
    • 1.2.1 類文件
      任何定義的類都應(yīng)當(dāng)使用駝峰命名格式,比如:
//create by 逆流的魚yuiop on 2016/9/21 //blog地址:http://blog.csdn.net/hejjunlin AndroidActivity, NetworkHelper, UserFragment, PerActivity

任何繼承自android組件的類都應(yīng)當(dāng)使用組件名稱來結(jié)尾,比如:

//create by 逆流的魚yuiop on 2016/9/21 //blog地址:http://blog.csdn.net/hejjunlin UserFragment, SignUpActivity, RateAppDialog, PushNotificationServer, NumberView
  • 使用駝峰格式命名易于瀏覽。
  • 用android組件名稱結(jié)尾的繼承類能夠清楚的標(biāo)識出類的用處,比如,如果要去查找修改RegistrationDialog時,那末這個命名使得定位這個類文件非常方便。

    • 1.2.2 資源文件
      • 當(dāng)命名資源文件時,應(yīng)當(dāng)只使用小寫字母和下劃線替換空格,例如:
        activity_main, fragment_user, item_post
        在你查找布局文件時,這樣命名一樣使得定位文件很方便。
      • 在使用android studio中,布局的package中的文件是按字母順序排列的,這樣意味activity,fragment和其他的layout是按組分類放置的,所以你知道從哪里去開始找1個文件了。
      • 不但如此,用組件名稱開頭的布局文件可以很清晰的表示這個布局文件是被那類組件使用。
  • 1.2.2.1 Drawable 文件

    • Drawable資源文件應(yīng)當(dāng)使用“ic_”前綴后跟上尺寸和資源的色彩信息
      For example, white accept icon sized at 24dp would be named:
      比如,白色的24dp大小的用于接受動作的圖標(biāo)應(yīng)當(dāng)命名以下:
      ic_accept_24dp_white
      黑色用于取消動作的48dp大小的圖標(biāo)命名:
      ic_cancel_48dp_black
      我們使用這樣的命名約定方便使用命名來組織drawable資源文件
    • 如果命名中沒有色彩和尺寸信息,那末開發(fā)者還需要打開drawable文件去查看這些信息。所以這樣可以節(jié)儉我們時間.其他的drawable文件應(yīng)當(dāng)使用對應(yīng)的前綴,以下:

//create by 逆流的魚yuiop on 2016/9/21
//blog地址:http://blog.csdn.net/hejjunlin

Type Prefix Example
Selector selector_ selector_button_cancel
Background bg_ bg_rounded_button
Circle circle_ circle_white
Progress progress_ progress_circle_purple
Divider divider_ divider_grey

在Android Studio中這個命名約定仍然可以幫助我們將類似的組織到1起
并清晰的標(biāo)識出這1文件用作甚么
比如, 命令1個資源為“button_cancel”不能標(biāo)識任何信息
這是1個selector資源呢還是1個圓角按鈕背景呢?
正確的命名可以去除所有的引發(fā)的模糊不清.
在創(chuàng)建selector不同狀態(tài)資源時,也應(yīng)當(dāng)使用對應(yīng)的命名下標(biāo):

//create by 逆流的魚yuiop on 2016/9/21
//blog地址:http://blog.csdn.net/hejjunlin

State Suffix Example
Normal _normal btn_accept_normal
Pressed _pressed btn_accept_pressed
Focused _focused btn_accept_focused
Disabled _disabled btn_accept_disabled
Selected _selected btn_accept_selected

使用如上清晰的下標(biāo)絕對明顯的標(biāo)識出了selector狀態(tài)資源的作用。
為有色彩和其他標(biāo)識的資源文件增加下標(biāo),使得開發(fā)者在打開selector文件時就能夠知道不同的selector資源的狀態(tài)是甚么

1.2.2.2 Layout 文件
在命名布局文件時,應(yīng)當(dāng)用android組件的名稱作為文件名的前綴,比如:

//create by 逆流的魚yuiop on 2016/9/21
//blog地址:http://blog.csdn.net/hejjunlin

Component Class Name Layout Name
Activity MainActivity activity_main
Fragment MainFragment fragment_main
Dialog RateDialog dialog_rate
Widget UserProfileView view_user_profile
AdapterView Item N/A item_follower

注意:如果要創(chuàng)建的布局文件是有多個不同組件使用的,那末應(yīng)當(dāng)使用”layout_”前綴
這樣不但在層級目錄中可以很方便的找到文件,
這樣也能夠幫助我們定義相應(yīng)的這個layout布局文件歸屬的類。


1.2.2.3 Menu Files
菜單文件不需要使用“menu_”前綴。
在資源目錄下已有菜單包了,所以這是沒必要要的。


1.2.2.4 Values Files
所有的資源文件名必須是復(fù)數(shù)的,比如:
attrs.xml, strings.xml, styles.xml, colors.xml, dimens.xml


2、代碼相干

  • 2.1 Java語句規(guī)則
    • 2.1.1 絕不要疏忽exceptions
      正確的方式是避免沒有處理的異常,以下:
//create by 逆流的魚yuiop on 2016/9/21 //blog地址:http://blog.csdn.net/hejjunlin public void setUserId(String id) { try { mUserId = Integer.parseInt(id); } catch (NumberFormatException e) { } }

如果這里出現(xiàn)問題,這里不會打印出任何信息,而且也很難debug,只能讓人迷惑。
當(dāng)catch1個異常時,我們總是需要輸出error日志到控制臺,用于調(diào)試,如果必要的話,需要正告用戶這個異常。比如:

//create by 逆流的魚yuiop on 2016/9/21 //blog地址:http://blog.csdn.net/hejjunlin public void setCount(String count) { try { count = Integer.parseInt(id); } catch (NumberFormatException e) { count = 0; Log.e(TAG, "There was an error parsing the count " + e); DialogFactory.showErrorMessage(R.string.error_message_parsing_count); } }

這里我們有以下的方式處理出錯:

  • 顯示1個信息給用戶,提示他們這里出錯了
  • 設(shè)置了1個可能的默許值
  • 拋出了1個適合的異常

2.1.2 不要catch最大的異常(Exception):

//create by 逆流的魚yuiop on 2016/9/21 //blog地址:http://blog.csdn.net/hejjunlin public void openCustomTab(Context context, Uri uri) { Intent intent = buildIntent(context, uri); try { context.startActivity(intent); } catch (Exception e) { Log.e(TAG, "There was an error opening the custom tab " + e); } }

為何不這樣做呢?
在大部份情況下,catch這個大的Exception或Throwable都是不適合的。(特別是Throwable由于它包括Error的異常。)
這樣意味著你沒有期望到的終究要捕獲的異常(包括RuntimeExceptions像CLassCastException)都被捕獲并在利用層進(jìn)行error處理,這樣是很危險的。
如果有人在你調(diào)用的代碼里添加了1個新的類型的異常,編譯器不會幫你認(rèn)識到你需要處理這個不同的毛病類型。這是你代碼里很難發(fā)現(xiàn)的毛病處理方式。
大多數(shù)情況下,你不應(yīng)當(dāng)用相同的處理方式來處理不同的exception.
以下,catch期望的異常并正確的處理:

//create by 逆流的魚yuiop on 2016/9/21 //blog地址:http://blog.csdn.net/hejjunlin public void openCustomTab(Context context, Uri uri) { Intent intent = buildIntent(context, uri); try { context.startActivity(intent); } catch (ActivityNotFoundException e) { Log.e(TAG, "There was an error opening the custom tab " + e); } }

2.1.3 組織 exceptions
在異常運(yùn)行相同的代碼的地方,他們應(yīng)當(dāng)增加可讀性和避免代碼復(fù)制。比如,你可能會像以下這樣處理異常:

//create by 逆流的魚yuiop on 2016/9/21 //blog地址:http://blog.csdn.net/hejjunlin public void openCustomTab(Context context, @Nullable Uri uri) { Intent intent = buildIntent(context, uri); try { context.startActivity(intent); } catch (ActivityNotFoundException e) { Log.e(TAG, "There was an error opening the custom tab " + e); } catch (NullPointerException e) { Log.e(TAG, "There was an error opening the custom tab " + e); } catch (SomeOtherException e) { // Show some dialog } }

你可以這樣做:

//create by 逆流的魚yuiop on 2016/9/21 //blog地址:http://blog.csdn.net/hejjunlin public void openCustomTab(Context context, @Nullable Uri uri) { Intent intent = buildIntent(context, uri); try { context.startActivity(intent); } catch (ActivityNotFoundException e | NullPointerException e) { Log.e(TAG, "There was an error opening the custom tab " + e); } catch (SomeOtherException e) { // Show some dialog } }

2.1.4 Using try-catch over throw exception
在exception出現(xiàn)的地方使用try-catch塊增加代碼可讀性
在代碼中error產(chǎn)生的地方就處理,這樣不論是debug還是更改error處理都很容易。


2.1.5 不要使用垃圾回收器

  • 不能保證甚么時候垃圾回收器會被調(diào)用,也不能保證垃圾回收器將在甚么時候調(diào)用.
  • 大部份情況下,在有規(guī)范的異常處理的情況下,你可以做你需要做的。
    如果你實(shí)在需要,定義1個close()方法(或類似的)并在方法調(diào)用時,提示記得close
  • 以InputStreamfor作為example.
  • 在這類情況下是可以的,但是不需要從垃圾回收器中輸出少許日志信息,也不需要輸出大量日志.

2.1.6 完全限制方式導(dǎo)包

  • 導(dǎo)包時,使用全包格式,例如:
  • 不要這樣導(dǎo)包:
    import android.support.v7.widget.*;
  • 而是要這樣:
    import android.support.v7.widget.RecyclerView;

2.1.7 去掉無用的包引入

  • 通常從1個類中移除代碼意味著1些之前引入的包也已不需要。
    這類情況下,不需要導(dǎo)入的包應(yīng)當(dāng)和代碼1起移除掉。

2.2 Java樣式規(guī)則

2.2.1 屬性定義和命名

  • 所有的字段都應(yīng)當(dāng)在文件頂部定義,遵守以下規(guī)則:
    private, non-static 字段應(yīng)當(dāng)用“m”做前綴,像以下的例子是正確的:
    mUserSignedIn, mUserNameText, mAcceptButton

  • 所有其他的字段都用小寫字母開頭:
    int numOfChildren; String username;
    static final 字段(靜態(tài)的)全部大寫
    private static final int PAGE_COUNT = 0;

  • 類屬性命名沒有顯示任何信息的不應(yīng)當(dāng)適用,比如:
    int e; //number of elements in the list
  • 為何1開始不給屬性1個成心義的名字,而給1段comment呢?
    int numberOfElements;

2.2.1.2 View屬性名稱

當(dāng)為1個界面控件定義1個類屬性時,view應(yīng)當(dāng)作為這個屬性的后綴,比如:

//create by 逆流的魚yuiop on 2016/9/21
//blog地址:http://blog.csdn.net/hejjunlin

View Name
TextView mUserNameView
Button mAcceptLoginButton
ImageView mProfileAvatarView
RelativeLayout mProfileLayout
  • 我們這樣命名view以便我們可以知道這個類屬性和甚么資源關(guān)聯(lián).
  • 比如, 給定像這樣的類屬性命名:
    mUserNameView,mUserAvatarView或mUserProfieLayout
  • 這些命名很清晰的表明其對應(yīng)的資源
  • 之前,控件屬性的命名通經(jīng)常使用控件類型來結(jié)尾(比如acceptLoginButton),但是控件常常改變而且很容易忘記到j(luò)ava類中去更新變量的名稱.

2.2.2 命名屬性時不要包括容器類型

  • 根據(jù)上1條的規(guī)則,一樣我們應(yīng)當(dāng)避免在創(chuàng)建集合變量時使用集合類型來命名.比如,假設(shè)我們有1個使用arrayList包括userIds的列表:
  • 不要使用:
    List userIds = new ArrayList<>();
  • 使用:
    List userIdList = new ArrayList<>();
  • 容器變量正確的命名應(yīng)當(dāng)包括足夠的變量信息.

2.2.3 避免類似的命名

  • 使用類似的名稱來命名變量,方法或類時,會使其他開發(fā)者在瀏覽您的代碼時迷惑.比如:
    hasUserSelectedSingleProfilePreviously
    hasUserSelectedSignedProfilePreviously
  • 很難第1眼就能夠辨別出上面兩個變量是干甚么的.使用更清晰的方式命名變量可使得其他開發(fā)者更容易通過變量名理解您的代碼.

2.2.4 數(shù)字連續(xù)命名

  • 當(dāng)Android Studio自動為我們產(chǎn)生代碼,這樣很容易給我們留下問題,特別是當(dāng)它產(chǎn)生糟的命名時.比如,這樣就很不好:
    public void doSomething(String s1, String s2, String s3)
  • 不瀏覽代碼的話很難理解如上這個方法中的參數(shù)是做甚么的.
    public void doSomething(String userName, String userEmail, String userId)
    這樣就容易理解很多了.我們可以根據(jù)這個更容易理解的方法參數(shù)去瀏覽代碼了

2.2.5 易讀的命名

在對屬性,方法和類命名時,應(yīng)當(dāng)遵守以下規(guī)則:

  • 可讀:有效的命名意味著我們可以立刻通過名稱就理解,減少譯解名稱的認(rèn)知負(fù)擔(dān).
  • 可拼寫:在您嘗試對命名很糟的名稱發(fā)音時,可拼寫的命名可以免笨拙的對話.
  • 可搜索:沒有比在1個類中搜索1個方法或變量時發(fā)現(xiàn)名稱拼寫毛病或命名很糟.當(dāng)我們想找到1個關(guān)于查找用戶的方法時,直接搜索字符串 ‘search’ 就應(yīng)當(dāng)保護(hù)這個方法的結(jié)果.
  • 不要使用匈牙利標(biāo)記法:匈牙利標(biāo)記法和上面3條沖突,不要使用.

2.2.6 將帶縮寫詞(那些將所有字母都大寫的詞)作為單詞使用

在任意類名,變量名中使用的縮寫詞都應(yīng)當(dāng)作為單詞使用.比如:

//create by 逆流的魚yuiop on 2016/9/21
//blog地址:http://blog.csdn.net/hejjunlin

Do Don’t
setUserId setUserID
String uri String URI
int id int ID
parseHtml parseHTML
generateXmlFile generateXMLFile

2.2.7 避免對齊變量聲明

任何變量的聲明都不應(yīng)當(dāng)使用特殊的對齊格式,比如:
這樣就很好:

//create by 逆流的魚yuiop on 2016/9/21 //blog地址:http://blog.csdn.net/hejjunlin private int userId = 8; private int count = 0; private String username = "hitherejoe";

不要這樣做:

//create by 逆流的魚yuiop on 2016/9/21 //blog地址:http://blog.csdn.net/hejjunlin private String username = "hitherejoe"; private int userId = 8; private int count = 0;

這樣產(chǎn)生了很多空白,讓代碼難于瀏覽.

2.2.8 使用空格符進(jìn)行縮進(jìn)

  • 對語句塊,應(yīng)當(dāng)使用4個空格符縮進(jìn):

    if (userSignedIn) {
    count = 1;
    }
    在自動換行時,應(yīng)當(dāng)使用8個空格符縮進(jìn):

//create by 逆流的魚yuiop on 2016/9/21 //blog地址:http://blog.csdn.net/hejjunlin String userAboutText = "This is some text about the user and it is pretty long, can you see!"

2.2.9 If-Statement語句

  • 2.2.9.1 使用標(biāo)準(zhǔn)的大括號樣式
    大括號應(yīng)當(dāng)與其前面的代碼放置在同1行。例如,避免下面這樣的代碼出現(xiàn):
//create by 逆流的魚yuiop on 2016/9/21 //blog地址:http://blog.csdn.net/hejjunlin class SomeClass { private void someFunction() { if (isSomething) { } else if (!isSomethingElse) { } else { } } }

取而代之應(yīng)當(dāng)這樣:

//create by 逆流的魚yuiop on 2016/9/21 //blog地址:http://blog.csdn.net/hejjunlin class SomeClass { private void someFunction() { if (isSomething) { } else if (!isSomethingElse) { } else { } } }

這不但是沒有必要增加額外的1行,而它還會讓讀取代碼變得更加容易

  • 2.2.9.2 Inline if-clauses 內(nèi)聯(lián)if從句

    • 有時使用單行if語句是成心義的。例如:
      if (user == null) return false;
    • 但是,它僅適用于簡單的操作。像下面這樣的代碼會更合適使用大括號:
      if (user == null) throw new IllegalArgumentExeption(“Oops, user object is required.”);
  • 2.2.9.3 Nested if-conditions 嵌套的if條件語句
    在可能的情況下,if語句的條件應(yīng)當(dāng)合并,避免過于復(fù)雜的嵌套,例如:
    推薦:

if (userSignedIn && userId != null) { }

避免像下面這樣:

if (userSignedIn) { if (userId != null) { } }

這會使得代碼更加容易瀏覽,并且從嵌套語句中移除沒必要要的行數(shù)。

  • 2.2.9.4 Ternary Operators 雙目運(yùn)算符
    • 在適當(dāng)?shù)那闆r下,雙目運(yùn)算符能夠用來簡化操作。
      例如,下面的代碼很容易瀏覽:
userStatusImage = signedIn ? R.drawable.ic_tick : R.drawable.ic_cross;

它比下面的代碼占用更少的行數(shù):

//create by 逆流的魚yuiop on 2016/9/21 //blog地址:http://blog.csdn.net/hejjunlin if (signedIn) { userStatusImage = R.drawable.ic_tick; } else { userStatusImage = R.drawable.ic_cross; }

注意:在有些情況下雙目運(yùn)算符不應(yīng)當(dāng)使用。如果if語句的邏輯過于復(fù)雜或包括了大量的字符,這時候應(yīng)當(dāng)使用標(biāo)準(zhǔn)的大括號樣式。

2.2.10 Annotations 注解

2.2.10.1 Annotation practices 注解用法
從《Android code style guidelines》中得悉:

  • @Override: @Override注解必須使用在當(dāng)重寫方法時候的聲明或?qū)崿F(xiàn)父類時。例如,如果你使用 @inheritdocs文檔標(biāo)簽,并且派生1個類(而不是1個接口),對重寫的父類方法你也必須使用 @Override注解。
  • @SuppressWarnings: @SuppressWarnings注解應(yīng)當(dāng)僅使用在不可能清除正告的情況下,如果1個正告通過了“不可能消除”測試, @SuppressWarnings注解必須使用,以便在代碼中確保所有的正告反應(yīng)實(shí)際問題。
    有關(guān)注解指引的更多信息可以在這里找到。
  • 注解應(yīng)當(dāng)使用在可能需要的地方。例如,可以使用@Nullable注解已免出現(xiàn)屬性為空的情況。例如:
@Nullable TextView userNameText; private void getName(@Nullable String name) { }

2.2.10.2 Annotation style 注解樣式
利用在方法或類的注解應(yīng)當(dāng)總是在聲明中定義,并且每項(xiàng)只能1行:

//create by 逆流的魚yuiop on 2016/9/21 //blog地址:http://blog.csdn.net/hejjunlin @Annotation @AnotherAnnotation public class SomeClass { @SomeAnotation public String getMeAString() { } }

當(dāng)在屬性上使用注解時,應(yīng)確保注解與屬性在同1行,例如:

@Bind(R.id.layout_coordinator) CoordinatorLayout mCoordinatorLayout; @Inject MainPresenter mMainPresenter;

它會使得聲明瀏覽起來更加容易。例如,在聲明 ‘@Inject SomeComponent mSomeName’ 可讀為’inject this component with this name’(利用這個名字注入組件)。

2.2.11 Limit variable scope 限制變量的作用域

  • 局部變量的作用域應(yīng)保持在最低限度(《Effective Java》第29條建議)。這樣做的話,將會提高代碼的可讀性和可保護(hù)性,同時減少出錯的可能性。
  • 所有要使用的每個變量都應(yīng)當(dāng)在語句塊中聲明。
    局部變量應(yīng)當(dāng)在其第1次使用途聲明。幾近每個局部變量的聲明都應(yīng)當(dāng)包括1個初始化。如果你還沒有足夠的信息來公道地初始化變量,你應(yīng)當(dāng)推延聲明直到你需要的時候。

2.2.12 Unused elements 無用的元素

  • 所有沒有用的屬性、導(dǎo)入、方法和類應(yīng)當(dāng)從代碼中移除,除非有特殊的用處保存這些。

2.2.13 Order Import Statements 導(dǎo)入聲明
由于我們使用的是Android Studio,因此導(dǎo)入都是自動的按序?qū)?。但是,?些情況下并不是如此,因此應(yīng)依照下面的順序?qū)耄?/p>

  • 1.Android imports
  • 2.Imports from third parties
  • 3.java and javax imports
  • 4.Imports from the current Project

注意:
- 1.每一個組的導(dǎo)入應(yīng)依照字母的順序排列,大寫字母排在小寫字母之前(Z排在a之前)
- 2.在各個組之間應(yīng)當(dāng)空1行(android, com, JUnit, net, org, java, javax)
2.2.14 Logging 日志
日志通常在開發(fā)進(jìn)程中用于記錄有用的毛病消息或其他可能有用的信息。

//create by 逆流的魚yuiop on 2016/9/21
//blog地址:http://blog.csdn.net/hejjunlin

Log Reason
Log.v(String tag, String message) verbose (詳細(xì))
Log.d(String tag, String message) debug(調(diào)試)
Log.i(String tag, String message) information(普通info)
Log.w(String tag, String message) warning(正告)
Log.e(String tag, String message) error (毛?。?/td>

我們做日志記錄時可以設(shè)置1個標(biāo)示,這個TAG是1個靜態(tài)的final屬性,放置在類的頂部,例如:
private static final String TAG = MyActivity.class.getName();
所有的調(diào)試日志不應(yīng)當(dāng)出現(xiàn)在發(fā)布的版本中,另外一方面,信息、正告和毛病日志只有在需要的時候保持開啟。

//create by 逆流的魚yuiop on 2016/9/21 //blog地址:http://blog.csdn.net/hejjunlin if (BuildConfig.DEBUG) { Log.d(TAG, "Here's a log message"); }

第1時間取得博客更新提示,和更多android干貨,源碼分析,歡迎關(guān)注我的微信公眾號,掃1掃下方2維碼或長按辨認(rèn)2維碼,便可關(guān)注。

這里寫圖片描述

如果你覺得好,隨手點(diǎn)贊,也是對筆者的肯定,也能夠分享此公眾號給你更多的人,原創(chuàng)不容易

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 成人在线视频网站 | 亚洲午夜av久久乱码 | 人人澡人人澡人人澡 | 日韩综合久久 | 日韩亚洲视频 | 一级毛片视频在线 | 精品一区久久 | 91新网址| 麻豆视频在线 | 久久aⅴ乱码一区二区三区 青青草国产成人av片免费 | www.日韩av | 国产激情在线 | 91精品国产99久久久久久 | 91精品成人 | 欧美人妖网站 | 欧美性猛交xxxx乱大交退制版 | 亚洲一区二区免费电影 | 国产精品久久免费视频 | 国产精品一区三区 | 在线日韩视频 | 久久午夜影院 | 精品成人av一区二区在线播放 | 免费观看18视频网站 | 99在线视频免费观看 | 欧美国产在线观看 | 日韩三级电影在线观看 | 亚洲激情欧美激情 | 亚洲精品九九 | 欧美日韩一 | 亚洲国产高清在线 | 欧产日产国产精品一二 | 成人影视免费 | www.日韩av.com | 日韩天堂 | 高潮白浆女日韩av免费看 | 波多野结衣av中文字幕 | 中文字幕一区二区三区在线观看 | 九九在线 | 日韩视频 中文字幕 视频一区 | 婷婷成人精品视频在线观看 | 黄瓜视频在线免费欧美日韩在线看 |