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

vivo官網App模塊化開發方案-ModularDevTool

移動開發
本文主要講述了Android客戶端模塊化開發的痛點及解決方案,詳細講解了方案的實現思路和具體實現方法。

說明:本工具基于vivo互聯網客戶端團隊內部開源的編譯管理工具開發。

一、背景

現在客戶端的業務越來越多,大部分客戶端工程都采用模塊化的開發模式,也就是根據業務分成多個模塊進行開發,提高團隊效率。例如我們vivo官網現在的整體架構如下圖,分為13個模塊,每個模塊是一個獨立代碼倉。

(注:為什么這么分,可以參考之前的一篇文章《??Android模塊化開發實踐???》)


圖片


二、痛點

完全隔離的代碼倉,使每個模塊更獨立,更易于代碼管理,但也帶來了一些問題

圖片

1、開發階段,子倉開發以及集成開發調試,操作麻煩、易出錯、難跟蹤回溯

1.1、當開發時涉及的模塊較多時,需要手動一個一個拉代碼,多個子倉的代碼操作非常麻煩,并且需要打開多個AndroidStudio進行開發;

1.2、子倉集成到主倉開發調試,有兩種方式,但是都有比較大的缺點:

(1)方式1,子倉通過maven依賴,這種方式需要不斷的發布子倉的snapshot,主倉再更新snapshot,效率較低;

(2)方式2,子倉通過代碼依賴,也就是需要在主倉的settings.gradle中,手動include拉到本地的子倉代碼,然后在build.gradle中配置dependencies,配置繁瑣,容易出錯;

1.3、主倉對子倉的依賴,如果是部分maven依賴、部分代碼依賴,容易出現代碼沖突;

1.4、apk集成的子模塊aar和代碼,沒有對應關系,排查問題時很難回溯。

2、版本發布階段,流程繁瑣,過多重復勞動,流程如下:

2.1、逐個修改子倉的版本,指定snapshot或release;

2.2、每個子倉需要提交修改版本號的代碼到git;

2.3、每個子倉都要手動觸發發布maven倉;

2.4、更新主倉對子倉依賴的版本;

2.5、構建Apk;

2.6、如果用持續集成系統CI,則每個子倉都需要配置一個項目,再逐個啟動子倉的編譯,等子倉全部編譯完再啟動主倉編譯。

三、方案

針對上述問題,我們優化的思路也很明確了,就是以自動化的方式解決繁瑣和重復的操作。最終開發了ModularDevTool,實現以下功能:

圖片

1、開發階段

1.1、在主倉中,管理所有子倉代碼(拉代碼、切分支及其他git操作),管理子倉相關信息(代碼倉路徑、分支、版本等);

1.2、只需要打開一個AS工程,即可進行所有倉的代碼開發;

1.3、對子倉的兩種依賴方式(代碼依賴和maven依賴)一鍵切換,支持混合依賴(即部分倉代碼依賴,部分倉maven依賴);

1.4、編譯時輸出子模塊的版本及對應commitid,便于回溯跟蹤代碼。

2、版本發布階段

2.1、只需要在主倉修改子倉版本號,子倉無需修改,省去子倉代碼修改和提交代碼過程;

2.2、CI上只要配一個主倉項目,實現一鍵編譯,包括子倉編譯aar(按依賴關系順序編譯)、上傳maven、編apk;

2.3、CI上支持3種編譯模式:

  • OnlyApp:即只編譯主倉代碼生成apk(前提是子模塊已發布maven);
  • publishSnapshot:即子倉編譯上傳snapshot版本,然后編譯主倉生成apk;
  • publishRelease:即子倉編譯上傳release版本,然后編譯主倉生成apk。

四、ModularDevTool概覽

工具采用了shell腳本+gradle插件的方式實現的。

首先看下工程目錄概覽


圖片


1、submodules目錄是用來存放子倉代碼的,子倉代碼就是正常的工程結構,submodules目錄如下圖:

圖片

2、repositories.xml文件是用來配置子倉信息的,包括模塊名、代碼倉、分支、版本等,具體內容如下:

<?xml versinotallow="1.0" encoding="utf-8" ?>
<repositories>
<!-- 一個repository表示一個倉庫,一個倉庫下可能會有多個module -->
<repository>
<!-- 倉庫名稱,可以隨意定義,主要用于本地快速識別 -->
<name>lib模塊</name>
<!-- 上傳至maven時的groupid -->
<group>com.vivo.space.lib</group>
<!-- 配置倉庫中的所有子模塊,如果多個module就添加多個module標簽 -->
<modules>
<module>
<!-- 上傳至maven時的artifactid -->
<artifactid>vivospace_lib</artifactid>
<!-- 上傳至maven時的版本號 -->
<version>5.9.8.0-SNAPSHOT</version>
<!-- 編譯順序優先級,越小優先級越高 -->
<priority>0</priority>
</module>
</modules>
<!-- 注意倉庫地址中的個人ssh名稱要使用$user占位符代替 -->
<repo>ssh://$user@smartgit:xxxx/VivoCode/xxxx_lib</repo>
<!-- 開發分支,腳本用來自動切換到該分支 -->
<devbranch>feature_5.9.0.0_xxx_dev</devbranch>
<!-- 打release包時必須強制指定commitId,保證取到指定代碼 -->
<commitid>cbd4xxxxxx69d1</commitid>
</repository>
<!-- 多個倉庫就添加多個repository -->
...
</repositories>

3、vsub.sh腳本是工具各種功能的入口,比如:

  • ./vsub.sh sync:拉取所有子模塊代碼,代碼存放在主工程下的submodules目錄中
  • ./vsub.sh publish:一鍵編譯所有子倉,并發布aar到maven

4、subbuild目錄用來輸出子倉的git提交記錄,subError目錄用來輸出子倉編譯異常時的log。

五、關鍵功能實現

ModularDevTool主要功能分為兩類,一類是代碼管理,用于批量處理git操作;第二類是項目構建,實現了動態配置子模塊依賴、子模塊發布等功能。

5.1 代碼管理

vsub.sh腳本中封裝了常用的git命令,用于批量處理子倉的git操作,實現邏輯相對簡單,利用shell腳本將git命令封裝起來。

圖片

比如 ./vsub.sh -pull的實現邏輯,首先是cd進入submodules目錄(submodules目錄存放了所有子倉代碼),然后遍歷進入子倉目錄執行git pull --rebase命令,從而實現一個命令完成對所有子倉的相同git操作,實現邏輯如下:

<!-- ./vsub.sh -pull代碼邏輯 -->
cd submodules
path=$currPath
files=$(ls $path)
for fileName in $files
do
if [ ! -d $fileName ]
then
continue
fi
cd $fileName
echo -e "\033[33mEntering $fileName\033[0m"
git pull --rebase
cd ..
done

5.2 項目構建

(1)Sync 功能

通過執行./vsub.sh sync命令將所有子模塊的代碼拉取到主工程的submodules目錄中。

Sync命令有3個功能:

1)如果子倉代碼未拉取,則拉取代碼,并切換到repositories.xml中配置的devbranch;

2)如果子倉代碼已拉取,則切換到repositories.xml中配置的devbranch;

3)考慮到在一些場景(比如jenkins構建),使用分支檢出代碼可能會存在異常,在sync命令后面加 -c 參數,則會使用repositories.xml中配置的commitid檢出指定分支代碼。

Sync流程如下:


圖片



(2)子模塊依賴處理

在之前我們依賴不同子倉的代碼時,需要手動修改settings.gradle導入子模塊,然后修改build.gradle中的dependencies,如下圖。

<!-- settings.gradle -->
include ':app',':module_name_1',':module_name_2',':module_name_3'...

project(':module_name_1').projectDir = new File('E:/AndroidCode/module_name_1/code/')
project(':module_name_2').projectDir = new File('E:/AndroidCode/module_name_2/code/')
project(':module_name_3').projectDir = new File('E:/AndroidCode/module_name_3/code/')
...
<!-- build.gradle -->
dependencies {
api fileTree(dir: 'libs', include: ['*.jar'])
// 業務子模塊 begin
api project (':module_name_1')
api project (':module_name_2')
api project (':module_name_3')
// 業務子模塊 end
}
...

團隊中每個人代碼的存放位置不同,在新版本拉完代碼后都需要手動配置一番,比較繁瑣。

基于sync功能已經把所有的子倉代碼都拉到了submodules目錄中,現在我們項目在構建時只需簡單配置local.properties即可(local.properties配置如下圖),確定哪些子模塊是代碼依賴,哪些子模塊是maven依賴。

<!-- 其中key module_name_x表示子模塊名,value 0表示maven依賴,1表示代碼依賴,默認是maven依賴,也就是,如果不配置某些子模塊則默認maven依賴 -->
module_name_1=0
module_name_2=0
module_name_3=1
module_name_4=1
module_name_5=1
module_name_6=1

子模塊依賴處理的流程如下:


圖片


(3)publish功能

通過執行./vsub.sh publish命令實現一鍵編譯所有子模塊aar并上傳maven。

publish命令主要有4個功能:

1)如果子倉代碼未拉取,則自動拉取子倉代碼;

2)如果是發布snapshot版本,則切換到devbranch分支最新代碼,version中包含snapshot字符串的子模塊,編譯生成aar并上傳maven;否則,則直接跳過,不會編譯;

3)如果是發布release版本(即指定-a參數),則切換到commitid對應的代碼,編譯生成release版本的aar,并上傳maven;

4)子倉的編譯上傳順序根據配置的priority優先級來執行。

注:上述的devbranch、version、commitid、priority等都是repositories.xml中的配置項。

publish發布子模塊的流程如下:


圖片


六、ModularDevTool接入

接入本方案的前提是項目采用多代碼倉的方式進行模塊化開發。具體接入步驟也比較簡單。

第一步,主倉依賴gradle插件modular_dev_plugin;

(該插件包含settings、tools、base、publish四個子插件,其中settings、tools和base插件配合實現子倉代碼管理、動態依賴處理,publish插件實現子倉的aar發布)

第二步,主倉的settings.gradle應用settings插件,主倉的app build.gradle中應用tools和base插件;

第三步,主倉根目錄添加repositories.xml配置文件和vsub腳本;

第四步,子倉依賴modular_dev_plugin,并應用publish插件;

第五步,中間層的子倉(比如App→Shop→Lib,那Shop就是中間層子倉)對下一層子倉的依賴版本號改成占位符,項目構建時會自動替換成repositories.xml中的版本號。如下圖:

dependencies {
// 對lib倉的依賴,原來是依賴具體的版本號,現在改成“unified”占位符,項目構建時會自動替換成repositories.xml中的版本號
api "com.vivo.space.lib:vivospace_lib:unified"
}

至此,ModularDevTool就接入完成了。

七、現在的開發流程

基于這個工具,現在我們官網的開發流程如下:

第一步是clone主App倉代碼,checkout對應開發分支,并在AndroidStudio打開工程;

第二步是修改repositories.xml配置,需要進行開發的子倉,修改devbranch為對應開發分支,修改version為對應版本號;

圖片


第三步,通過./vsub.sh sync命令,檢出所有子模塊代碼;

第四步,修改local.properties中子倉依賴的模式(maven依賴or代碼依賴),修改完成后點擊Sync一下,然后就可以正常進行代碼開發了,開發體驗與單工程多module模式完全一樣。

八、總結

這個工具已經很成熟,在vivo錢包、vivo官網等項目已經使用多年,通過該工具,開發階段,實現多業務模塊集成式開發,解決代碼倉分散管理和手動配置依賴等繁瑣操作,發布階段,實現多種編譯模式以及一鍵編包能力,對于團隊的開發效率有很大提升,支撐官網app項目3+業務線并行迭代,并且代碼沖突降低50%以上。

責任編輯:龐桂玉 來源: vivo互聯網技術
相關推薦

2022-07-14 10:02:00

vivoUI適配開發人員

2013-03-11 10:10:03

2013-03-11 10:00:13

前端模塊化

2013-08-20 16:33:52

前端模塊化

2014-04-22 10:19:40

objection模塊化開發iOS

2010-08-02 09:21:48

Flex模塊化

2025-05-22 09:18:14

2017-05-12 14:00:07

大數據前端模塊化開發

2023-11-08 13:55:27

2019-08-28 16:18:39

JavaScriptJS前端

2022-03-18 08:46:08

vivo官網APP首頁改版

2023-10-17 09:19:34

開發Java

2010-10-29 10:45:02

GrailsGroovy

2020-11-09 10:46:35

CommonJS

2017-07-11 11:02:03

APP模塊化架構

2013-08-20 16:45:22

重構Web App模塊化

2010-08-02 09:10:36

Flex模塊化

2011-01-11 13:40:44

webcssdiv

2021-04-20 20:03:28

Systemjs模塊化前端

2025-06-06 01:00:00

Spring場景范式
點贊
收藏

51CTO技術棧公眾號

中文字幕在线播放| 久久久久久亚洲av无码专区| 亚洲一区二区三区免费| 一区二区三区国产精品| 久久久精彩视频| 伊人精品一区二区三区| 欧美日韩1080p| 亚洲人a成www在线影院| 古装做爰无遮挡三级聊斋艳谭| 成人观看网址| 亚洲欧洲成人精品av97| 精品国产日本| 一级片视频免费| 精品动漫一区| 色偷偷噜噜噜亚洲男人| 人妖粗暴刺激videos呻吟| 福利一区视频| 欧美性生活大片免费观看网址| 伊人色综合影院| 天堂av在线播放| 国产精品综合久久| 国产精品露脸av在线| 亚洲综合一二三| 欧美一区二区三区另类| 亚洲三级av在线| 国模无码视频一区| 欧美黄页在线免费观看| 日韩欧美精品网站| 国产九色porny| 免费黄网在线观看| 久久精品一区二区三区av| 国产精品加勒比| 国产av无码专区亚洲av麻豆| 日日摸夜夜添夜夜添国产精品| 国内精品在线一区| 欧美激情精品久久| 国产国产精品| 色午夜这里只有精品| 高潮毛片无遮挡| 国产精品videossex| 欧美一卡2卡3卡4卡| 国产美女视频免费看| 91另类视频| 91久久国产最好的精华液| 亚洲人精品午夜射精日韩| 日本孕妇大胆孕交无码| 亚洲视频资源在线| 在线观看精品视频| 米奇777四色精品人人爽| 欧美国产国产综合| 日韩精品欧美专区| 国产女主播在线写真| 久久夜色精品一区| 蜜桃麻豆91| 欧美69xxxxx| 久久美女艺术照精彩视频福利播放| 国产女人水真多18毛片18精品| av在线资源观看| 国产成a人无v码亚洲福利| 亚洲精品日产aⅴ| 精品久久久久成人码免费动漫| 国产在线不卡一区| 亚洲最大成人网色| 亚洲av无码一区二区三区dv| 丁香五精品蜜臀久久久久99网站| 操一操视频一区| 四虎永久在线观看| 91片在线免费观看| 亚洲国产精品一区二区第一页 | 懂色av一区二区夜夜嗨| 痴汉一区二区三区| 午夜视频在线免费播放| 久久先锋资源网| 日本一区二区三区视频在线观看| 福利在线视频导航| 成人免费在线播放视频| 国产爆乳无码一区二区麻豆| 免费毛片在线看片免费丝瓜视频 | 国产aⅴ爽av久久久久成人| 国产成人日日夜夜| 不卡一区二区三区视频| 亚洲欧美综合在线观看| 国产欧美日韩另类一区| 国产精品jizz在线观看老狼| 青春草在线视频| 欧美性猛xxx| 在线观看岛国av| 无码国模国产在线观看| 国产视频精品va久久久久久| 国产视频123区| 国产一区日韩欧美| 日韩免费黄色av| 99精品在线视频观看| 9色porny自拍视频一区二区| 日韩电影天堂视频一区二区| caopon在线免费视频| 欧美日韩国产一区中文午夜| 久久久久久三级| 亚洲3区在线| 国产一区二区三区丝袜| 久草免费在线视频观看| 日韩和欧美的一区| 99在线影院| jizz在线观看中文| 亚洲一区二区视频在线| 天堂在线资源视频| 成功精品影院| 日韩性生活视频| 日本高清www免费视频| 美女视频免费一区| 九九九热999| 中文字幕在线播放网址| 在线观看亚洲成人| 天天躁日日躁狠狠躁av麻豆男男| 欧美电影《轻佻寡妇》| 2025国产精品视频| 亚洲老妇色熟女老太| 国产亚洲精品7777| 国产极品在线视频| jizz18欧美18| 久久精品国产亚洲一区二区| 国产伦精品一区二区三区视频我| 国产成人午夜视频| 中文字幕一区二区三区精彩视频| 高清不卡av| 精品视频中文字幕| 精品午夜福利在线观看| 精品亚洲成a人在线观看| 欧美裸体网站| 99riav视频在线观看| 日韩一区二区在线观看视频| 国产三级黄色片| 亚洲免费在线| 精品一区二区久久久久久久网站| 18videosex性欧美麻豆| 欧美日韩电影在线| 国产免费嫩草影院| 日韩国产在线观看一区| 日本免费高清一区二区| 三级中文字幕在线观看| 亚洲国产毛片完整版| 久久精品视频久久| 国产盗摄精品一区二区三区在线| 91制片厂免费观看| 性欧美video另类hd尤物| 亚洲一区二区黄| 亚洲视屏在线观看| 欧美经典三级视频一区二区三区| 成人精品视频一区二区| 久久爱www成人| 热久久视久久精品18亚洲精品| 五十路在线观看| 亚洲成人动漫一区| av网页在线观看| 国产一区成人| 欧美日韩电影一区二区| 日本综合字幕| 在线电影中文日韩| 一级黄色大片免费| 亚洲人成网站影音先锋播放| 欧美日韩一区二区区别是什么 | 牛牛影视一区二区三区免费看| 久久久久久999| 天堂在线观看免费视频| 欧美性极品xxxx娇小| 国产探花视频在线播放| 久国产精品韩国三级视频| 国产手机视频在线观看| 99香蕉久久| 欧美一级片免费在线| 国产在线播放av| 欧美日韩精品二区第二页| 国产在线一卡二卡| 成人黄色大片在线观看 | xxxxxx欧美| 一区二区三区四区视频| 国产又粗又猛又爽又黄的| 亚洲综合一区在线| 好吊日免费视频| 日本aⅴ精品一区二区三区| 中国成人在线视频| 东京久久高清| 国产精品白嫩初高中害羞小美女| 国产原创在线观看| 亚洲国产日韩精品在线| 国产天堂第一区| 一区二区三区欧美在线观看| 超碰男人的天堂| 久久电影网站中文字幕| 欧美视频在线观看视频| 成人av二区| 岛国视频一区免费观看| 韩国成人在线| 国外成人在线视频| 成人性生交大片免费看午夜| 日韩欧美国产综合| 日本三级一区二区三区| 亚洲国产wwwccc36天堂| 欧美成人久久久免费播放| av动漫一区二区| 91看片破解版| 久久亚洲欧洲| 国产a级黄色大片| 精品高清在线| 国产日韩亚洲精品| 国产精品igao视频网网址不卡日韩 | 亚洲自拍欧美色图| 欧美日韩五码| 国内精品模特av私拍在线观看| 午夜精品一区| 亚洲欧美日韩网| 懂色av成人一区二区三区| 欧美专区亚洲专区| 国产综合精品视频| 亚洲一区二区3| www深夜成人a√在线| 国产日产精品1区| 中国一级特黄录像播放| 国产一区二区精品在线观看| 美女一区二区三区视频| 久久av一区二区三区| 久久久天堂国产精品| 99精品美女| 天天久久人人| 校花撩起jk露出白色内裤国产精品| av在线不卡观看| 欧美在线在线| 91久久久精品| 日韩欧美专区| 国产欧美一区二区三区四区| 国产精品极品美女在线观看| 清纯唯美亚洲激情| 都市激情国产精品| 海角国产乱辈乱精品视频| 国内精品不卡| 免费av在线一区| 国产三区在线观看| 伦理中文字幕亚洲| 国产精品扒开做爽爽爽的视频 | 后入内射无码人妻一区| 国产女主播视频一区二区| 国产成人一区二区在线观看| 日本一区二区三区久久久久久久久不| 久久久亚洲av波多野结衣| 91亚洲精品久久久蜜桃网站| 精品无码在线视频| 久久男人中文字幕资源站| 成人黄色免费网址| 亚洲国产精品黑人久久久| 婷婷色一区二区三区| 国产嫩草影院久久久久| 国产免费嫩草影院| 亚洲人午夜精品天堂一二香蕉| 四虎免费在线视频| 一区二区三区在线播放| 国产乡下妇女做爰毛片| 精品久久久久久亚洲国产300| 在线观看国产亚洲| 色偷偷成人一区二区三区91| 天天综合久久综合| 欧美日韩小视频| 99国产精品久久久久久久成人 | 51妺嘿嘿午夜福利| 国产精品热久久久久夜色精品三区| 日本乱子伦xxxx| 最新中文字幕一区二区三区| 黄色一级片在线| 狠狠久久亚洲欧美专区| 亚洲综合成人av| 日韩一区二区中文字幕| 少妇高潮一区二区三区99小说| 亚洲人成电影网| 久久精品视频观看| 欧美激情a在线| 蜜臀国产一区| 91麻豆桃色免费看| 超碰精品在线观看| 日韩成人在线资源| 欧美精品三区| 欧美日韩第二页| 国产一区二区三区香蕉| 亚洲天堂美女视频| 中文字幕一区在线| 日本在线视频免费观看| 精品视频在线免费| 亚洲精品国产精| 亚洲人成毛片在线播放| 成人国产免费电影| 奇米四色中文综合久久| 国产精品亚洲一区二区在线观看 | 少妇又色又爽又黄的视频| 国产一区二区久久精品| h片视频在线观看| 国产精品美女主播在线观看纯欲| 日韩精品一区二区三区中文在线| 免费看国产精品一二区视频| 在线成人激情| 91淫黄看大片| 成人精品电影在线观看| 手机毛片在线观看| 五月婷婷另类国产| 国产女人18毛片18精品| 亚洲天堂av在线免费| 超碰中文在线| 91热福利电影| 国产剧情在线观看一区| 少妇人妻在线视频| 国产最新精品免费| 永久免费毛片在线观看| 狠狠色狠色综合曰曰| 亚洲av少妇一区二区在线观看 | 日本在线免费观看一区| 亚洲精品九九| 日韩高清在线一区二区| 亚洲国产精品二十页| 日韩成人免费在线视频| 91精品国产综合久久精品app| wwwww在线观看免费视频| 国产69久久精品成人| 91夜夜蜜桃臀一区二区三区| 中文字幕乱码一区二区三区| 日韩黄色小视频| 成人影视免费观看| 欧美日韩一区二区免费在线观看| 丁香六月色婷婷| 欧美激情一二区| 综合激情网...| xxxxxx在线观看| 国产美女在线观看一区| 天美传媒免费在线观看| 欧美亚洲动漫精品| 免费国产在线视频| 青青在线视频一区二区三区| 一本色道久久综合狠狠躁的番外| 青青青青草视频| 成人av资源网站| 久久精品性爱视频| 亚洲第一区中文99精品| 波多一区二区| 国内精品久久久久久久果冻传媒| 国内精品福利| 亚洲精品成人无码毛片| 亚洲午夜视频在线| 色一情一乱一乱一区91av| 午夜精品久久久久久久白皮肤 | 韩国三级成人在线| 免费成人深夜夜行网站视频| 国内精品久久久久影院色| 可以直接看的黄色网址| 精品乱人伦一区二区三区| 国内高清免费在线视频| 精品国产一区二区三区麻豆免费观看完整版 | 日韩av卡一卡二| 中文字幕亚洲视频| 国产色在线视频| 欧美黑人一区二区三区| 欧美一性一交| av视屏在线播放| 国产精品乱码妇女bbbb| 国产三级伦理片| 国模精品视频一区二区| 日韩三级视频| 最近中文字幕一区二区| 亚洲丝袜美腿综合| 免费观看黄色av| 日本精品久久久久影院| 日韩黄色大片| 亚洲区 欧美区| 欧美性生交大片免费| 一级日本在线| 国产精品初高中精品久久| 午夜亚洲精品| 亚洲AV成人无码精电影在线| 精品粉嫩aⅴ一区二区三区四区| 小h片在线观看| 伊人久久大香线蕉精品| 成人免费黄色在线| 国产99久久久久久免费看| 久久91精品国产91久久久| 欧美一区 二区| av中文字幕网址| 午夜久久电影网| 日韩精品毛片| 国内不卡一区二区三区| 久久69国产一区二区蜜臀| www..com国产| 久久精品国产一区| 校园春色另类视频| 水野朝阳av一区二区三区| 色综合久久综合| 91社区在线观看播放| 91国产在线播放| 国产一区二区精品| 成人免费视频国产免费观看| 亚洲精品成人免费| 亚洲精品tv| 日本一本二本在线观看| 亚洲精品乱码久久久久久日本蜜臀| 亚洲色图狠狠干| 98国产高清一区|