• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于代碼片段復(fù)用的安卓應(yīng)用組裝技術(shù)研究

    2016-12-26 08:14:42朱亞迪吳毅堅趙文耘
    計算機應(yīng)用與軟件 2016年11期
    關(guān)鍵詞:配置文件開發(fā)人員安卓

    朱亞迪 吳毅堅 趙文耘

    (復(fù)旦大學(xué)軟件學(xué)院 上海 201203)(上海市數(shù)據(jù)科學(xué)重點實驗室(復(fù)旦大學(xué)) 上海 200437)

    ?

    基于代碼片段復(fù)用的安卓應(yīng)用組裝技術(shù)研究

    朱亞迪 吳毅堅 趙文耘

    (復(fù)旦大學(xué)軟件學(xué)院 上海 201203)(上海市數(shù)據(jù)科學(xué)重點實驗室(復(fù)旦大學(xué)) 上海 200437)

    安卓系統(tǒng)的開放性和安卓應(yīng)用開發(fā)的較低的技術(shù)門檻,吸引了大量開發(fā)者加入到安卓應(yīng)用開發(fā)陣營中來。在編碼過程中,開發(fā)者需要兼顧界面設(shè)計和業(yè)務(wù)邏輯,并手工維護他們的一致性;相似的界面、類似的邏輯也需要開發(fā)者手工進行“復(fù)制-粘貼”式的開發(fā)。提出安卓應(yīng)用界面和業(yè)務(wù)邏輯的結(jié)構(gòu)模型,以統(tǒng)一的方式描述安卓應(yīng)用的界面元素、業(yè)務(wù)邏輯以及兩者的關(guān)聯(lián),支持將安卓應(yīng)用的界面代碼和業(yè)務(wù)邏輯代碼對應(yīng)起來。提出可配置的安卓應(yīng)用結(jié)構(gòu)化描述和組裝方法,使得開發(fā)人員可以以書寫配置文件的方式從業(yè)務(wù)層面描述應(yīng)用,并支持界面和業(yè)務(wù)邏輯代碼片段的組裝,從而快速構(gòu)建符合需求的安卓應(yīng)用。設(shè)計了安卓應(yīng)用開發(fā)實驗來驗證所提方法及技術(shù)的有效性。

    安卓應(yīng)用 結(jié)構(gòu)模型 代碼片段 復(fù)用

    0 引 言

    安卓系統(tǒng)的開放性和安卓應(yīng)用開發(fā)的較低的技術(shù)門檻,吸引了大量開發(fā)者加入到安卓應(yīng)用開發(fā)陣營中來。隨著安卓應(yīng)用開發(fā)者數(shù)量的不斷增加,各類安卓應(yīng)用市場中不斷涌現(xiàn)出大量的移動應(yīng)用,覆蓋了人們?nèi)粘I钪械母鱾€領(lǐng)域。然而,在安卓應(yīng)用不斷豐富、開發(fā)者陣營不斷擴張的環(huán)境下,安卓應(yīng)用開發(fā)的過程和方法卻仍然以“從頭開發(fā)”或者代碼的“復(fù)制-粘貼”為主。在編碼過程中,開發(fā)者需要兼顧界面設(shè)計和業(yè)務(wù)邏輯,并手工維護他們的一致性;一些相似的界面、類似的邏輯也需要開發(fā)者手工進行“復(fù)制-粘貼”式的開發(fā)。這種看上去自由、簡單的開發(fā)方式,導(dǎo)致開發(fā)者需要花大量的精力處理開發(fā)技術(shù)細節(jié),而不能專注于業(yè)務(wù)本身。如何提升安卓開發(fā)人員編碼工作的標準化程度,促進領(lǐng)域業(yè)務(wù)代碼的復(fù)用,對提升安卓應(yīng)用開發(fā)效率和產(chǎn)品質(zhì)量有著重要的意義。

    安卓應(yīng)用多運行于移動設(shè)備上,移動設(shè)備(特別是手機)的顯示區(qū)域有限,因此大量的應(yīng)用實際上是遵循一定的設(shè)計模式,并且移動應(yīng)用軟件規(guī)模小[19],其復(fù)雜性比傳統(tǒng)的Web應(yīng)用和桌面應(yīng)用大大降低。這就給安卓應(yīng)用的標準化開發(fā)和基于復(fù)用的開發(fā)提供了可能。

    本文提出安卓應(yīng)用界面和業(yè)務(wù)邏輯的結(jié)構(gòu)模型,以統(tǒng)一的方式描述安卓應(yīng)用的界面元素、業(yè)務(wù)邏輯以及兩者的關(guān)聯(lián)關(guān)系,從而支持將安卓應(yīng)用開發(fā)過程中的界面代碼和業(yè)務(wù)邏輯代碼對應(yīng)起來,降低開發(fā)人員人工維護的難度。提出可配置的安卓應(yīng)用結(jié)構(gòu)化描述和組裝方法,使得開發(fā)人員可以以書寫配置文件的方式從業(yè)務(wù)層面描述應(yīng)用,并支持界面和業(yè)務(wù)邏輯代碼片段的自動組裝,從而快速構(gòu)建符合需求的安卓應(yīng)用?;谠摲椒?,實現(xiàn)了一個代碼組裝工具,輔助開發(fā)者快速創(chuàng)建安卓應(yīng)用項目。

    為了驗證所提方法及技術(shù)的有效性,設(shè)計了一套安卓應(yīng)用開發(fā)實驗。實驗結(jié)果表明,和傳統(tǒng)開發(fā)方式相比,本文的方法和相應(yīng)的工具對提高安卓應(yīng)用開發(fā)效率是有幫助的。

    1 基于代碼片段復(fù)用的安卓應(yīng)用組裝技術(shù)

    1.1 方法概述

    安卓應(yīng)用由于受到顯示區(qū)域大小的限制,特定模塊的界面和業(yè)務(wù)功能相對簡單。因此,我們提出安卓應(yīng)用界面和業(yè)務(wù)邏輯的結(jié)構(gòu)模型,以統(tǒng)一的方式描述安卓應(yīng)用的界面元素、業(yè)務(wù)邏輯以及兩者的關(guān)聯(lián)關(guān)系。將界面元素和業(yè)務(wù)邏輯的實現(xiàn)代碼以代碼片段的形式提取出來,并保存在代碼庫中。開發(fā)人員依據(jù)結(jié)構(gòu)模型編寫配置文件對應(yīng)用模塊的界面和業(yè)務(wù)邏輯進行描述,然后使用代碼組裝工具對代碼片段進行組裝,生成安卓應(yīng)用框架代碼。開發(fā)人員在此基礎(chǔ)上完善核心代碼,最終得到可運行的安卓應(yīng)用。

    需要注意的是本文方法關(guān)注于安卓應(yīng)用中的特定模塊,即單個Activity所包含的界面和業(yè)務(wù)邏輯。并且生成的是應(yīng)用模塊的框架代碼,具體的業(yè)務(wù)邏輯還需要開發(fā)人員手工實現(xiàn)。

    1.2 安卓應(yīng)用結(jié)構(gòu)模型

    安卓應(yīng)用結(jié)構(gòu)模型如圖1所示。

    圖1 安卓應(yīng)用結(jié)構(gòu)模型

    圖1中的安卓應(yīng)用結(jié)構(gòu)模型描述了應(yīng)用模塊中可能包含的界面元素和業(yè)務(wù)邏輯,以及兩者之間的關(guān)系。下面對結(jié)構(gòu)模型中的關(guān)鍵元素進行介紹:

    UI:界面元素的總稱。用name來唯一表示該元素,并且有一組屬性attrs集合用于對界面元素進行描述,map中第一個string表示屬性名,第二個string表示屬性值。界面元素又可以分為可見的界面元素和不可見的界面元素。

    Invisible Component:不可見的界面元素,是界面元素的容器,構(gòu)成模塊界面的框架。不可見的界面元素主要有Container。

    Visible Component: 可見的界面元素。是界面中與用戶進行交互的基本單位??梢姷慕缑嬖匾度氩豢梢姷慕缑嬖刂胁拍苷故境鰜?,這符合安卓應(yīng)用開發(fā)的習(xí)慣??梢姷慕缑嬖匕˙utton(按鈕)、Input(輸入框)、List(列表)、GesturePassword(手勢密碼)、EncryptInput(加密輸入框)、PhoneCode(手機驗證碼輸入框)、PicCode(圖片驗證碼輸入框)等。

    BusinessLogic:業(yè)務(wù)邏輯。負責(zé)處理用戶與界面元素的交互以及相關(guān)的業(yè)務(wù)。有StoreToLocal(存儲到本地)、ValidateInput(對輸入的內(nèi)容進行驗證)和ClickEvent(處理點擊事件)等。

    Dependency:業(yè)務(wù)邏輯的依賴。包括一些安卓應(yīng)用權(quán)限的配置和庫的依賴,在開發(fā)過程中需要在AndroidManifest.xml和build.gradle文件(本文使用的安卓開發(fā)環(huán)境為Android Studio)聲明,比如對文件進行存儲時需要添加WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE權(quán)限。

    CodeSnippet:代碼片段。是界面元素和業(yè)務(wù)邏輯的具體實現(xiàn)代碼,分別為視圖代碼片段和業(yè)務(wù)代碼片段。代碼片段是應(yīng)用開發(fā)者在開發(fā)過程中編寫的一些設(shè)計良好的代碼,對視圖代碼片段進行組合能夠形成布局文件,即應(yīng)用的界面;而業(yè)務(wù)代碼片段可能只是業(yè)務(wù)邏輯的框架代碼,需要開發(fā)者再此基礎(chǔ)上實現(xiàn)具體的業(yè)務(wù)邏輯。

    CodeRepository:代碼庫。用于對代碼片段進行存儲、管理。

    Module:安卓應(yīng)用中的模塊。一個模塊包含若干界面元素和業(yè)務(wù)邏輯,并用name來唯一表示,description對模塊實現(xiàn)的功能進行描述。

    Constraint:約束條件。對模塊中界面元素的組合嵌套規(guī)則進行描述,比如最基本的規(guī)則是可見的界面元素要嵌入容器中才能展示出來,具體的規(guī)則還要根據(jù)模塊所要實現(xiàn)功能的業(yè)務(wù)約束來制定。

    Configuration:配置文件。表示某一個模塊的具體實現(xiàn),反映出模塊的實現(xiàn)包含了哪些界面元素和業(yè)務(wù)邏輯,以及界面元素和業(yè)務(wù)邏輯之間的關(guān)聯(lián)。配置文件中activity和layout分別是需要生成的Activity和布局文件名稱,description是相關(guān)描述信息。

    1.3 代碼組裝流程

    基于代碼片段復(fù)用的安卓應(yīng)用組裝流程示意如圖2所示。其中視圖代碼片段、業(yè)務(wù)代碼片段、代碼庫、配置文件分別對應(yīng)于安卓應(yīng)用結(jié)構(gòu)模型中的相應(yīng)元素。

    圖2 代碼組裝流程示意圖

    視圖代碼片段和業(yè)務(wù)代碼片段分別是結(jié)構(gòu)模型中視圖元素和業(yè)務(wù)邏輯的實現(xiàn)代碼。配置文件由結(jié)構(gòu)模型中的界面元素和業(yè)務(wù)邏輯組成,并建立起結(jié)構(gòu)模型與代碼片段之間的對應(yīng)關(guān)系。代碼組裝工具根據(jù)配置文件對代碼片段進行組裝,生成安卓應(yīng)用代碼。需要注意的是組裝工具生成的是應(yīng)用的框架代碼,需要開發(fā)人員在此基礎(chǔ)上完善代碼,最終得到可運行的應(yīng)用。

    1) 代碼片段和代碼庫

    代碼片段是應(yīng)用開發(fā)過程中由開發(fā)人員編寫的滿足某一功能需求的代碼。代碼片段分為兩種:來自布局文件的視圖代碼片段和來自Activity的業(yè)務(wù)代碼片段。視圖代碼片段可能是設(shè)計良好的輸入框、按鈕等,可能對應(yīng)于單個界面元素也可能對應(yīng)于多個界面元素;業(yè)務(wù)代碼片段可能是對輸入的內(nèi)容進行校驗的代碼、處理用戶點擊事件的代碼等。

    代碼庫負責(zé)對代碼片段進行存儲、管理。初始時代碼庫為空,在應(yīng)用開發(fā)過程中,會產(chǎn)生一些設(shè)計良好的代碼,開發(fā)人員將這些代碼提取為代碼片段,加入代碼庫中,便于以后復(fù)用。

    2) 配置文件

    配置文件是由開發(fā)者根據(jù)需求和安卓應(yīng)用結(jié)構(gòu)模型來編寫的,對應(yīng)用的界面和功能進行描述。需求最終要實現(xiàn)為應(yīng)用代碼,而配置文件則介于需求和應(yīng)用代碼之間,比需求更形式化而又比代碼更簡單,具有簡潔、直觀、便于修改的特點。配置文件以XML的格式存在,其內(nèi)容構(gòu)成一棵文檔樹,樹中的節(jié)點對應(yīng)于結(jié)構(gòu)模型中的界面元素或業(yè)務(wù)邏輯元素。通過編寫配置文件來滿足可變性需求,由代碼組裝工具根據(jù)配置文件對代碼片段進行組裝生成應(yīng)用代碼,達到代碼復(fù)用的目標。

    3) 模板

    模板是一個包含了占位符的Activity。Activity有多個生命周期[14],應(yīng)用的業(yè)務(wù)邏輯需要在特定的生命周期實現(xiàn),即業(yè)務(wù)代碼片段要插入到相應(yīng)的生命周期的相應(yīng)位置處,因此需要在Acitivity模板中不同生命周期的不同位置預(yù)留占位符。下面代碼預(yù)留了$ActivityName、$Activity、$View和$onCreate 四個占位符:

    public class $ActivityName extends Activity {

    $Activity

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.$View);

    ButterKnife.bind(this);

    $onCreate

    }

    }

    4) 代碼組裝工具

    代碼組裝工具根據(jù)配置文件對代碼塊進行組裝生成應(yīng)用代碼,組裝過程就是完成對配置文件中文檔樹的遍歷,根據(jù)配置文件中的節(jié)點類型進行如下操作:

    (1) 對于配置文件文檔樹中的Configuration節(jié)點,根據(jù)節(jié)點的layout和activity屬性值生成空白的布局文件和Activity模板文件。

    (2) 對于配置文件文檔樹中的界面元素,根據(jù)元素的name屬性值在代碼庫中進行檢索,得到匹配的視圖代碼片段,依照配置文件文檔樹的結(jié)構(gòu),對代碼片段進行組裝,形成模塊對應(yīng)的布局文件。

    (3) 對于配置文件文檔樹中的業(yè)務(wù)邏輯元素,根據(jù)元素的name屬性值在代碼庫中進行檢索,得到匹配的業(yè)務(wù)代碼片段,按照該業(yè)務(wù)代碼片段中position的值將其插入到Activity模板中相應(yīng)位置處。

    上述操作中一個主要過程是根據(jù)配置文件文檔樹T1構(gòu)建布局文件文檔樹T2。最終T2與T1有相同的結(jié)構(gòu),對于T1中某一界面元素E1,在T2中對應(yīng)位置節(jié)點為E2,E2是代碼庫中與E1對應(yīng)的視圖代碼片段。根據(jù)T1構(gòu)建T2的過程中用到兩個隊列:Queue1和Queue2。Queue1中隊首E1為T1中當前待處理的布局文件中的節(jié)點,Queue2中隊首元素E1'為與E1對應(yīng)的E2的父節(jié)點。代碼生成工具根據(jù)E1從代碼庫中檢索,得到與E1相匹配的代碼片段E2,將E2作為E1'的子節(jié)點插入到T2中。整個過程的偽代碼如下:

    read configure file and generate layout and activity file

    root = configure.getSubElement()

    //獲取配置文件中Configuration節(jié)點的子節(jié)點

    Queue1.enqueue(root)

    //使用隊列來對配置文件分層遍歷

    Queue2.enqueue(templateRoot)

    //模板根節(jié)點入隊

    while Queue1 is not empty{

    node1 = Queue1.dequeue()

    node2 = Queue2.dequeue()

    if node1 is a view {

    code = findView(node1)

    //在代碼庫中檢索匹配對應(yīng)的視圖代碼片段

    if code is null{

    //如果找不到代碼則生成注釋

    generate comment

    }else{

    node2.append(code)

    //將實現(xiàn)代碼片段插入生成的布局文件

    //如果該節(jié)點是容器界面元素,需要將其包含的子節(jié)點加入隊列

    if node1 is a container{

    for each subelement of node1{

    Queue1.enqueue(subelement)

    Queue2.eneuque(code)

    }

    }

    }

    }else if node1 is a logic {

    code = findLogic(node1)

    //查找對應(yīng)的業(yè)務(wù)代碼片段

    if code is null{

    generate comment

    }else{

    insert code into activity by position

    //將業(yè)務(wù)代碼片段插入生成的activity文件

    }

    }

    }

    上述代碼中findView()和findLogic()通過配置文件中界面元素和業(yè)務(wù)邏輯元素的name屬性值與代碼庫中代碼片段的name屬性值進行匹配,如圖3所示。

    圖3 配置文件與結(jié)構(gòu)模型和代碼片段之間對應(yīng)關(guān)系

    2 實 驗

    2.1 工具實現(xiàn)

    我們使用Swing技術(shù)實現(xiàn)了一個基于代碼片段復(fù)用的代碼組裝工具。開發(fā)人員依據(jù)業(yè)務(wù)需求編寫配置文件,代碼組裝工具依據(jù)配置文件對代碼庫中的代碼片段進行組裝,得到應(yīng)用的框架代碼。開發(fā)人員在此基礎(chǔ)上完善代碼,最終得到可運行的應(yīng)用代碼。

    2.2 實驗和評價

    為了驗證所提方法和所開發(fā)工具的有效性,我們設(shè)計了一套安卓應(yīng)用開發(fā)實驗。實驗中我們選取了兩名計算機軟件專業(yè)的研究生,他們安卓應(yīng)用開發(fā)水平相當,分別作為實驗組和對照組。他們被要求依次完成7個安卓應(yīng)用登錄功能的實現(xiàn)。在開發(fā)的過程中,實驗組使用本文給出的代碼組裝工具,可以將開發(fā)過程中的代碼片段保存入代碼庫中,并在后續(xù)開發(fā)任務(wù)中編寫配置文件。然后使用工具對代碼片段進行組裝,生成框架代碼,在此基礎(chǔ)上完善代碼。對照組不使用工具,可以使用手工進行“復(fù)制-粘貼”的方式開發(fā)。

    實驗組和對照組使用的開發(fā)環(huán)境都為安卓官方集成開發(fā)環(huán)境Android Studio,版本為1.5.0.0。實驗中一共有7個開發(fā)任務(wù),開發(fā)者每次新建一個空白安卓項目,Android Studio將自動生成項目的相關(guān)文件,然后將該項目加入Git并提交代碼。開發(fā)者完成每個開發(fā)任務(wù)后再次提交代碼,Git將統(tǒng)計出開發(fā)者為了完成開發(fā)任務(wù)而編寫的代碼行數(shù)(包括實驗組配置文件代碼行數(shù))。實驗結(jié)果如圖4所示。

    圖4 代碼行數(shù)統(tǒng)計圖

    從圖4中可以看出,采用本文提出的方法和工具能夠有效地減少開發(fā)者的代碼量。本文方法和工具對于應(yīng)用開發(fā)者的幫助體現(xiàn)在以下幾點:

    (1) 可行性。在實驗中,實驗組使用配置文件對開發(fā)需求進行描述,然后使用代碼組裝工具對代碼片段進行組裝生成代碼框架,最后開發(fā)者對代碼框架進行代碼填充,最終實現(xiàn)為一個可運行的應(yīng)用。

    (2) 提高代碼質(zhì)量。可復(fù)用的代碼片段具有結(jié)構(gòu)化程度高,易于理解的特點。將可復(fù)用的代碼片段提取出來并復(fù)用到應(yīng)用開發(fā)中有助于提高代碼質(zhì)量。

    然而,上述實驗有一定的局限性。首先,參與實驗的開發(fā)人員數(shù)量太少;其次,收集的實驗數(shù)據(jù)太少。

    3 相關(guān)工作

    為了提高安卓應(yīng)用開發(fā)的效率,很多組織和研究人員致力于通過代碼生成技術(shù)生成安卓應(yīng)用代碼。

    Android Bootstrap[1]是一個集成了大量模板(包括UI、網(wǎng)絡(luò)請求庫、賬戶管理等)的安卓應(yīng)用在線生成工具。使用者只需要輸入應(yīng)用的包名,Android Bootstrap就能生成一個完整的項目,該項目中包含了安卓應(yīng)用開發(fā)中一些常用的模塊如登錄、滾動的圖片、網(wǎng)絡(luò)請求、Json數(shù)據(jù)解析以及一些預(yù)定義的主題和UI元素(按鈕和輸入框等)等。然而,Android Bootstrap的整個輸入只有一個包名,不支持根據(jù)應(yīng)用的需求進行定制,應(yīng)用的界面和業(yè)務(wù)邏輯還需要開發(fā)者手工完成。

    App Inventor[2]是MIT研發(fā)的旨在為所有人,特別是年輕人,展示軟件開發(fā)的魅力,讓他們從軟件消費者轉(zhuǎn)變?yōu)檐浖?chuàng)造者的開源項目。App Inventor提供一個在線開發(fā)工具,以圖形化的控件來對應(yīng)用的組件和行為進行表示。使用者通過拖拽控件,像搭積木一樣拼湊出一個安卓應(yīng)用。然而,使用App Inventor開發(fā)出的應(yīng)用與實際應(yīng)用相比仍有很大差距。

    Markus Aleksy[3]從用戶界面和功能兩方面對應(yīng)用建立原型,然后復(fù)用現(xiàn)有應(yīng)用的組件來快速開發(fā)安卓應(yīng)用。然而并沒有給出如何獲取現(xiàn)有應(yīng)用組件的方法,缺乏對應(yīng)用組件的管理和維護。

    Khambati等[4]創(chuàng)造了一種可視化模型語言[13],使用可視化的模型語言編寫配置文件對應(yīng)用進行描述,并開發(fā)出了一個安卓應(yīng)用生成工具,該工具以配置文件作為輸入,生成與醫(yī)療保健計劃相關(guān)的安卓應(yīng)用。然而該可視化模型語言是針對醫(yī)療保健專家而設(shè)計的,不是針對安卓應(yīng)用開發(fā)者。另外,使用該工具生成的是安卓應(yīng)用的安裝文件,開發(fā)者無法對應(yīng)用進行修改。

    Nguyen等[5]開發(fā)出一個能夠生成主從模式安卓應(yīng)用的工具。Li等[6]提出了一種搜索平臺,該平臺能夠搜索安卓應(yīng)用的界面元素,幫助開發(fā)者識別應(yīng)用中的界面元素,但他們沒有給出有效地復(fù)用這些界面元素的方法或技術(shù)。

    Lachgar等[7]采用模型驅(qū)動架構(gòu)的方法設(shè)計出一種領(lǐng)域特定語言,在此基礎(chǔ)上開發(fā)出一個工具,該工具能夠生成安卓應(yīng)用的用戶界面。Sabraoui等[8,9]也采用模型驅(qū)動架構(gòu)的方法,設(shè)計出基于UML的應(yīng)用界面生成工具,該工具能夠針對不同移動操作系統(tǒng)(iOS、Android、Windows Phone、BlackBerry)生成相應(yīng)的應(yīng)用界面。然而上述研究工作生成的應(yīng)用界面非常簡單,并沒有考慮到實際應(yīng)用開發(fā)中應(yīng)用界面的復(fù)雜性,不能真正地幫助應(yīng)用開發(fā)者進行快速開發(fā),并且缺乏對應(yīng)用業(yè)務(wù)邏輯的支持。

    Mojica等[10]借鑒軟件產(chǎn)品線和特征模型[11]技術(shù),對安卓系統(tǒng)中的組件進行建模,如Service是運行在后臺并且沒有用戶界面的組件,Activity是一個擁有用戶界面并能與用戶進行交互的組件。通過定義領(lǐng)域特定語言來對安卓應(yīng)用的組件和組件之間的關(guān)系進行描述,其語法類似Java語言中類的定義,然后開發(fā)出代碼生成工具AndroidModeler來生成安卓應(yīng)用的框架代碼。然而他們并未對應(yīng)用的界面進行考慮,并且其定義的領(lǐng)域特定語言語法過于簡單,描述能力非常有限,無法對組件的具體功能進行詳細的描述。

    Barnett等[12]借鑒模型驅(qū)動技術(shù)能夠提高軟件開發(fā)效率降低成本的特點,開發(fā)出一個工具RAPPT,使用領(lǐng)域特定語言來描述安卓應(yīng)用,進而生成安卓應(yīng)用工程的框架代碼。使用RAPPT生成的工程能夠直接導(dǎo)入安卓官方集成開發(fā)環(huán)境Android Studio。然而開發(fā)人員還需要進一步調(diào)整生成應(yīng)用的界面代碼,并且RAPPT不支持對應(yīng)用界面和功能的靈活配置,只能生成與模板應(yīng)用類似的應(yīng)用。

    一些研究人員對安卓應(yīng)用的相似性進行了研究。王浩宇等[15]基于代碼克隆檢測技術(shù)對安卓應(yīng)用進行特征提取,分析應(yīng)用之間的相似度。閆晉佩等[16]對第三方應(yīng)用市場中的安卓應(yīng)用二進制文件中類和方法的相似性進行計算,以此來識別應(yīng)用重打包。張希遠等[17]使用CCFinder工具對應(yīng)用市場中應(yīng)用模塊代碼的相似度進行了研究。焦四輩等[18]提出一種能夠識別經(jīng)過代碼混淆后安卓應(yīng)用相似性的方法。

    4 結(jié) 語

    本文針對安卓應(yīng)用的特點,提出安卓應(yīng)用結(jié)構(gòu)模型來對應(yīng)用模塊的界面元素和業(yè)務(wù)邏輯進行建模。在此基礎(chǔ)上,使用配置文件對安卓應(yīng)用模塊的界面和功能進行描述,通過代碼組裝工具對代碼片段進行組裝,生成安卓應(yīng)用框架代碼,輔助開發(fā)者進行快速開發(fā)。

    然而,本文提出的安卓應(yīng)用結(jié)構(gòu)模型還不夠完備,不足以描述安卓應(yīng)用的全貌。采用了XML格式的配置文件來對安卓應(yīng)用進行描述,而XML中有太多與語義無關(guān)的符號如尖括號和引號等。配置文件需要開發(fā)人員手工編寫,不夠方便。在今后的研究中應(yīng)該提出其他形式的領(lǐng)域特定語言來對安卓應(yīng)用進行描述。另外,本文的實現(xiàn)工具仍處于原型階段,在實際應(yīng)用中還有很多局限性,需要進一步完善,最終開發(fā)出能夠滿足實際安卓應(yīng)用開發(fā)需求的工具。

    [1] Android Bootstrap[EB/OL].[2016-1-1].http://www.androidbootstrap.com/.

    [2] App Inventor[EB/OL].[2016-3-20].http://appinventor.mit.edu/explore/get-started.html.

    [3] Aleksy M.An Approach to Rapid Prototyping of Mobile Applications[C]//Proceedings of the 27th IEEE International Conference on Advanced Information Networking and Applications (AINA),2013:1072-1077.

    [4] Khambati A,Grundy J,Warren J,et al.Model-Driven Development of Mobile Personal Health Care Applications[C]//Proceedings of the 23rd IEEE/ACM International Conference on Automated Software Engineering,2008:467-470.

    [5] Nguyen T,Vanderdonckt J.User Interface Master Detail Pattern on Android[C]//Proceedings of the 4th ACM SIGCHI Symposium on Engineering Interactive Computing Systems,2012:299-304.

    [6] Li Kaiyuan,Xu Zhensheng,Chan Xiangping.A Platform for Searching UI Component of Android Application[C]//Proceedings of 5th International Conference on Digital Home (ICDH),2014:205-210.

    [7] Lachgar M,Abdali A.Generating Android graphical user interfaces using an MDA approach[C]//Proceedings of the 2014 Third IEEE International Colloquium in Information Science and Technology (CIST),2014:80-85.

    [8] Sabraoui A,Koutbi M E,Khriss I.GUI code generation for Android applications using a MDA approach[C]//International Conference on Complex Systems (ICCS),2012:1-6.

    [9] Sabraoui A,Koutbi M E,Khriss I.A MDA-Based Model-Driven Approach to Generate GUI for Mobile Applications[J].International Review on Computers & Software,2013,8(3):844-852.

    [10] Mojica I J,Adams B,Nagappan M,et al.A Large-Scale Empirical Study on Software Reuse in Mobile Apps[J].IEEE Software,2014,31(2):78-86.

    [11] Ruiz I J M,Nagappan M,Adams B,et al.Understanding reuse in the Android Market[C]//Proceedings of the 20th International Conference on Program Comprehension (ICPC),2012:113-122.

    [12] Barnett S,Vasa R,Grundy J.Bootstrapping Mobile App Development[C]//Proceedings of the 37th IEEE International Conference on Software Engineering (ICSE),2015:657-660.

    [13] Moody D L.The “Physics” of Notations: A Scientific Approach to Designing Visual Notations in Software Engineering[C]//Proceedings of the 32Nd ACM/IEEE International Conference on Software Engineering-Volume 2,2010:485-486.

    [14] Liu Jianye,Yu Jiankun.Research on Development of Android Applications[C]//Proceedings of the 2011 4th International Conference on Intelligent Networks and Intelligent Systems (ICINIS),2011:69-72.

    [15] 王浩宇,王仲禹,郭耀,等.基于代碼克隆檢測技術(shù)的Android應(yīng)用重打包檢測[J].中國科學(xué):信息科學(xué),2014,44(1):142-157.

    [16] 閆晉佩,何暉,安文歡,等.國內(nèi)第三方Android應(yīng)用市場安全性的檢測[J].計算機科學(xué),2015,42(12):143-147.

    [17] 張希遠,張剛,沈立煒,等.多維度的安卓應(yīng)用相似度分析[J].計算機科學(xué),2016,43(3):199-205.

    [18] 焦四輩,應(yīng)凌云,楊軼,等.一種抗混淆的大規(guī)模Android應(yīng)用相似性檢測方法[J].計算機研究與發(fā)展,2014,51(7):1446-1457.

    [19] 朱洪軍,陳灝,華保健,等.移動應(yīng)用代碼保護現(xiàn)狀與技術(shù)研究[J].計算機應(yīng)用與軟件,2016,33(3):314-319,333.

    ANDROID APPLICATION ASSEMBLY TECHNOLOGY STUDY BASED ON CODE SNIPPET REUSE

    Zhu Yadi Wu Yijian Zhao Wenyun

    (SchoolofSoftware,FudanUniversity,Shanghai201203,China)(ShanghaiKeyLaboratoryofDataScience,FudanUniversity,Shanghai200437,China)

    The openness of the Android system and low threshold of Android application development attracted a large number of developers to join in the Android application development camp. In the process of coding, developers need to consider the interface design and business logic, and maintain their consistency by hand. Some similar interface and logic also need developers manually "copy-and-paste". This paper puts forward the interface and business logic structure model of Android application, and describes the Android application interface, business logic, and the relationship between them in a uniform way. The model also supports the correspondence between interface code and business logic code in the development of Android application. We propose a configurable structural description and assembly method of Android applications, which allows developers to write configuration file to describe application from the business level. The method supports the assembly of interface and business logic code snippets to help developers quickly build Android applications conforming to the requirements. In order to verify the effectiveness of the method and technology, we design a set of Android application development experiments.

    Android applications Structure model Code snippets Reuse

    2016-05-03。國家自然科學(xué)基金項目(61402113);國家高技術(shù)研究發(fā)展計劃項目(2013AA01A605)。朱亞迪,碩士生,主研領(lǐng)域:軟件復(fù)用,移動應(yīng)用開發(fā)。吳毅堅,副教授。趙文耘,教授。

    TP3

    A

    10.3969/j.issn.1000-386x.2016.11.039

    猜你喜歡
    配置文件開發(fā)人員安卓
    提示用戶配置文件錯誤 這樣解決
    搭建簡單的Kubernetes集群
    互不干涉混用Chromium Edge
    文物表情包
    Semtech發(fā)布LoRa Basics 以加速物聯(lián)網(wǎng)應(yīng)用
    忘記ESXi主機root密碼怎么辦
    一種基于安卓系統(tǒng)的手機側(cè)抓包分析方法
    讓W(xué)indows 10進入開發(fā)者模式
    電腦迷(2015年12期)2015-04-29 23:22:51
    后悔了?教你隱藏開發(fā)人員選項
    電腦愛好者(2015年6期)2015-04-03 01:20:56
    安卓L未至安卓M來了!安卓首泄漏M系統(tǒng)
    色哟哟·www| 日本在线视频免费播放| 99久久无色码亚洲精品果冻| 日本精品一区二区三区蜜桃| 免费看a级黄色片| 国产极品精品免费视频能看的| 少妇高潮的动态图| 91九色精品人成在线观看| 日日摸夜夜添夜夜添av毛片 | 一级毛片久久久久久久久女| 国产欧美日韩一区二区三| 国产高清视频在线播放一区| 免费无遮挡裸体视频| 亚洲中文日韩欧美视频| 国产av一区在线观看免费| 久久久国产成人精品二区| 日本撒尿小便嘘嘘汇集6| 99精品在免费线老司机午夜| 在线十欧美十亚洲十日本专区| 精品一区二区三区视频在线观看免费| 午夜福利高清视频| 亚洲欧美日韩无卡精品| 免费av毛片视频| 国产私拍福利视频在线观看| 国产一区二区激情短视频| 国产一区二区三区在线臀色熟女| 国产av不卡久久| 亚洲av五月六月丁香网| 欧美精品啪啪一区二区三区| 色哟哟哟哟哟哟| 亚洲成人中文字幕在线播放| 五月玫瑰六月丁香| 最近中文字幕高清免费大全6 | 久久香蕉精品热| 一本一本综合久久| 欧美另类亚洲清纯唯美| xxxwww97欧美| 天堂网av新在线| 搞女人的毛片| 国产精品国产高清国产av| 18禁黄网站禁片免费观看直播| 欧美bdsm另类| 亚洲国产欧洲综合997久久,| 日本一本二区三区精品| 窝窝影院91人妻| 国产成+人综合+亚洲专区| 婷婷亚洲欧美| 麻豆久久精品国产亚洲av| 一a级毛片在线观看| 国产黄a三级三级三级人| 欧美在线一区亚洲| 老鸭窝网址在线观看| 久久午夜福利片| 午夜福利免费观看在线| 岛国在线免费视频观看| 男女之事视频高清在线观看| 最后的刺客免费高清国语| 国产成人aa在线观看| 精品午夜福利视频在线观看一区| 99久久成人亚洲精品观看| 国产精品电影一区二区三区| 国产精品一区二区三区四区免费观看 | 韩国av一区二区三区四区| 欧美激情久久久久久爽电影| 成年女人看的毛片在线观看| 国产午夜精品久久久久久一区二区三区 | 三级毛片av免费| 麻豆一二三区av精品| 日本黄色视频三级网站网址| 亚洲国产欧美人成| 国产单亲对白刺激| 变态另类成人亚洲欧美熟女| 亚洲内射少妇av| 好男人在线观看高清免费视频| 又黄又爽又刺激的免费视频.| 波野结衣二区三区在线| 精品乱码久久久久久99久播| 欧美色视频一区免费| 日本三级黄在线观看| 欧美不卡视频在线免费观看| 99久久精品热视频| 亚洲精品久久国产高清桃花| 黄色丝袜av网址大全| 欧美日韩综合久久久久久 | 久久久久久久久大av| 69av精品久久久久久| 久久久国产成人精品二区| 国产精品亚洲美女久久久| 国产真实伦视频高清在线观看 | 欧美色欧美亚洲另类二区| 在线国产一区二区在线| av在线观看视频网站免费| 亚洲av电影在线进入| 亚洲人成电影免费在线| 91狼人影院| 久久国产乱子免费精品| 一边摸一边抽搐一进一小说| 真实男女啪啪啪动态图| 精品一区二区三区人妻视频| 极品教师在线免费播放| 人妻久久中文字幕网| 亚洲va日本ⅴa欧美va伊人久久| 97人妻精品一区二区三区麻豆| 日本a在线网址| 中文字幕免费在线视频6| 久久精品国产亚洲av涩爱 | 亚洲avbb在线观看| 亚洲人成网站在线播放欧美日韩| 变态另类丝袜制服| 精品无人区乱码1区二区| 中文字幕av在线有码专区| 人人妻,人人澡人人爽秒播| 久久久久久久午夜电影| 国产日本99.免费观看| 91狼人影院| 一a级毛片在线观看| 一区二区三区免费毛片| 国内精品久久久久精免费| 久久热精品热| 岛国在线免费视频观看| 中文在线观看免费www的网站| 午夜两性在线视频| 丰满乱子伦码专区| 亚洲人成网站在线播| 精品不卡国产一区二区三区| 精品久久国产蜜桃| 欧美黄色淫秽网站| 亚洲中文字幕日韩| 乱人视频在线观看| 欧美3d第一页| 亚洲av二区三区四区| 欧美黄色片欧美黄色片| 成人性生交大片免费视频hd| 成人永久免费在线观看视频| 91麻豆精品激情在线观看国产| 久久九九热精品免费| 黄色日韩在线| 精品久久国产蜜桃| 午夜精品久久久久久毛片777| 在线国产一区二区在线| 久久久成人免费电影| 国产精品嫩草影院av在线观看 | 欧美激情久久久久久爽电影| 高清日韩中文字幕在线| 成人av在线播放网站| 国产亚洲精品av在线| 色噜噜av男人的天堂激情| 亚洲精华国产精华精| 久久久精品大字幕| 五月伊人婷婷丁香| 最近在线观看免费完整版| 看黄色毛片网站| 亚洲国产精品999在线| 毛片一级片免费看久久久久 | 波多野结衣巨乳人妻| 最好的美女福利视频网| 十八禁人妻一区二区| 可以在线观看毛片的网站| 日本与韩国留学比较| 成人午夜高清在线视频| 国产伦精品一区二区三区四那| 国产野战对白在线观看| 免费观看的影片在线观看| 人人妻人人看人人澡| av国产免费在线观看| 俺也久久电影网| a级一级毛片免费在线观看| 欧美日本亚洲视频在线播放| 国产精华一区二区三区| 欧美绝顶高潮抽搐喷水| 99在线人妻在线中文字幕| 美女高潮的动态| 久久国产精品影院| 黄色视频,在线免费观看| 亚洲精品乱码久久久v下载方式| 精品一区二区三区视频在线观看免费| 日本a在线网址| 男女那种视频在线观看| 亚洲国产精品sss在线观看| 18禁裸乳无遮挡免费网站照片| 日日摸夜夜添夜夜添小说| 日韩成人在线观看一区二区三区| 18美女黄网站色大片免费观看| 国产精品电影一区二区三区| 国产伦精品一区二区三区视频9| 久久性视频一级片| 日日摸夜夜添夜夜添av毛片 | 97热精品久久久久久| 国产欧美日韩精品一区二区| 九九久久精品国产亚洲av麻豆| 国产欧美日韩一区二区精品| 白带黄色成豆腐渣| a级毛片a级免费在线| 91麻豆av在线| 每晚都被弄得嗷嗷叫到高潮| 性插视频无遮挡在线免费观看| 国内精品久久久久精免费| 无遮挡黄片免费观看| 97热精品久久久久久| 赤兔流量卡办理| 精品久久久久久久久亚洲 | 啦啦啦观看免费观看视频高清| 午夜免费成人在线视频| 好男人在线观看高清免费视频| 欧美+日韩+精品| 宅男免费午夜| 亚洲欧美精品综合久久99| 国产午夜福利久久久久久| 极品教师在线免费播放| 一本精品99久久精品77| 自拍偷自拍亚洲精品老妇| 国模一区二区三区四区视频| 9191精品国产免费久久| 欧美黑人欧美精品刺激| 内地一区二区视频在线| 国内少妇人妻偷人精品xxx网站| 国产高清有码在线观看视频| 欧美最黄视频在线播放免费| 久久久成人免费电影| 很黄的视频免费| 欧美最新免费一区二区三区 | 国产精品一区二区免费欧美| 国产高清激情床上av| 一进一出抽搐动态| 国产乱人伦免费视频| 国产精品三级大全| 精品久久久久久成人av| 亚洲精品一区av在线观看| 久久午夜福利片| 国产亚洲精品av在线| 宅男免费午夜| 女人被狂操c到高潮| 亚洲中文字幕一区二区三区有码在线看| 一个人免费在线观看电影| 久久久久久久亚洲中文字幕 | 中文在线观看免费www的网站| 日本五十路高清| 嫁个100分男人电影在线观看| 国产免费男女视频| 露出奶头的视频| 日韩欧美国产在线观看| 国产真实伦视频高清在线观看 | 日本黄色片子视频| 国产精品亚洲一级av第二区| 欧美一区二区亚洲| 亚洲美女搞黄在线观看 | 搞女人的毛片| 亚洲狠狠婷婷综合久久图片| 99精品在免费线老司机午夜| 久久久久久久久久黄片| 亚洲第一电影网av| eeuss影院久久| 欧美日韩福利视频一区二区| 日本黄色视频三级网站网址| 97热精品久久久久久| 国产成+人综合+亚洲专区| 长腿黑丝高跟| 亚洲人成网站在线播| 午夜福利在线在线| 国产人妻一区二区三区在| 亚洲色图av天堂| a级毛片a级免费在线| 最近最新中文字幕大全电影3| 丁香欧美五月| 亚洲人与动物交配视频| 国产高潮美女av| 成人无遮挡网站| 国产成+人综合+亚洲专区| 99在线人妻在线中文字幕| 国产精品永久免费网站| 2021天堂中文幕一二区在线观| 一本一本综合久久| 国产老妇女一区| 制服丝袜大香蕉在线| 丁香六月欧美| 免费高清视频大片| 婷婷丁香在线五月| 日韩成人在线观看一区二区三区| 久久久久性生活片| 精品人妻偷拍中文字幕| 别揉我奶头~嗯~啊~动态视频| 在线a可以看的网站| 黄色视频,在线免费观看| 国产aⅴ精品一区二区三区波| av福利片在线观看| www.999成人在线观看| 成人三级黄色视频| 乱人视频在线观看| 国产成人欧美在线观看| 日本熟妇午夜| 亚洲片人在线观看| 欧美成狂野欧美在线观看| 久久久精品大字幕| 午夜福利视频1000在线观看| 美女被艹到高潮喷水动态| 成人国产一区最新在线观看| 超碰av人人做人人爽久久| xxxwww97欧美| 少妇熟女aⅴ在线视频| www.色视频.com| 日韩亚洲欧美综合| 91在线观看av| 久久精品夜夜夜夜夜久久蜜豆| 国产精华一区二区三区| 91在线观看av| 国产高清激情床上av| 欧美成狂野欧美在线观看| 免费av观看视频| av欧美777| 一本一本综合久久| 日日摸夜夜添夜夜添av毛片 | 久久草成人影院| 在线天堂最新版资源| 国产亚洲欧美在线一区二区| 午夜久久久久精精品| 最新中文字幕久久久久| 成人亚洲精品av一区二区| 大型黄色视频在线免费观看| 亚洲成人久久爱视频| 亚洲中文字幕一区二区三区有码在线看| 色精品久久人妻99蜜桃| 亚洲色图av天堂| 搡老妇女老女人老熟妇| 欧美激情国产日韩精品一区| 在线观看美女被高潮喷水网站 | 色吧在线观看| 真实男女啪啪啪动态图| 99热只有精品国产| 最近最新中文字幕大全电影3| 亚洲片人在线观看| 日本三级黄在线观看| 欧美bdsm另类| 内地一区二区视频在线| 久久精品国产亚洲av香蕉五月| 两人在一起打扑克的视频| 国产高清视频在线播放一区| 国产美女午夜福利| 男人舔奶头视频| 熟女人妻精品中文字幕| 国产乱人视频| 午夜激情欧美在线| 婷婷精品国产亚洲av在线| 青草久久国产| 午夜福利在线观看免费完整高清在 | 精品久久久久久久人妻蜜臀av| 国产欧美日韩精品亚洲av| 久久久久久久亚洲中文字幕 | 国产亚洲精品综合一区在线观看| 九九热线精品视视频播放| 美女被艹到高潮喷水动态| 一二三四社区在线视频社区8| 国内久久婷婷六月综合欲色啪| avwww免费| 老司机福利观看| 成人国产一区最新在线观看| 老司机午夜十八禁免费视频| 亚洲乱码一区二区免费版| 美女 人体艺术 gogo| 国产一级毛片七仙女欲春2| 国产精华一区二区三区| 精品一区二区三区人妻视频| 成人性生交大片免费视频hd| 国产三级中文精品| 99热这里只有是精品在线观看 | 直男gayav资源| 久久精品久久久久久噜噜老黄 | 日本熟妇午夜| 免费人成视频x8x8入口观看| 婷婷亚洲欧美| 中国美女看黄片| 麻豆成人av在线观看| 毛片一级片免费看久久久久 | 两个人的视频大全免费| 久99久视频精品免费| 1000部很黄的大片| 精品人妻熟女av久视频| 人人妻,人人澡人人爽秒播| 国产成人aa在线观看| 大型黄色视频在线免费观看| 99热这里只有是精品在线观看 | 国产在视频线在精品| 国产欧美日韩一区二区三| 天堂影院成人在线观看| 精品午夜福利在线看| 淫妇啪啪啪对白视频| 97超视频在线观看视频| 亚洲人成网站高清观看| 国产一区二区在线av高清观看| 亚洲av成人精品一区久久| 亚洲国产欧洲综合997久久,| 免费一级毛片在线播放高清视频| 国产精品自产拍在线观看55亚洲| 色5月婷婷丁香| 国产伦人伦偷精品视频| 国产白丝娇喘喷水9色精品| 亚洲精品影视一区二区三区av| 亚洲经典国产精华液单 | 日本免费一区二区三区高清不卡| 一级黄片播放器| 此物有八面人人有两片| 两人在一起打扑克的视频| 日本与韩国留学比较| 老司机午夜福利在线观看视频| 日本与韩国留学比较| 真人一进一出gif抽搐免费| 国产精品1区2区在线观看.| 午夜老司机福利剧场| 午夜两性在线视频| 成人性生交大片免费视频hd| 亚洲av成人不卡在线观看播放网| 老司机午夜十八禁免费视频| www日本黄色视频网| 亚洲不卡免费看| 国产私拍福利视频在线观看| 99热精品在线国产| 中文字幕熟女人妻在线| 亚洲欧美日韩东京热| 男女视频在线观看网站免费| 精品国产亚洲在线| 国产成人av教育| 波多野结衣高清无吗| 亚洲成a人片在线一区二区| 亚洲自拍偷在线| 极品教师在线视频| 国产免费av片在线观看野外av| 精品人妻一区二区三区麻豆 | 日韩国内少妇激情av| 亚洲黑人精品在线| 欧美三级亚洲精品| 99在线视频只有这里精品首页| 精品一区二区三区视频在线观看免费| 亚洲人成电影免费在线| 无遮挡黄片免费观看| 亚洲人成网站在线播| 我的女老师完整版在线观看| 亚洲在线自拍视频| or卡值多少钱| 少妇高潮的动态图| 亚洲最大成人手机在线| 久久久久亚洲av毛片大全| 久久草成人影院| 久久精品夜夜夜夜夜久久蜜豆| 乱码一卡2卡4卡精品| 国产av不卡久久| 免费观看的影片在线观看| ponron亚洲| 亚洲欧美激情综合另类| 91在线观看av| 国产 一区 欧美 日韩| 精品久久久久久,| 国产淫片久久久久久久久 | 91在线精品国自产拍蜜月| 亚洲成a人片在线一区二区| 亚洲精品在线美女| 午夜福利视频1000在线观看| 中文亚洲av片在线观看爽| 最近最新免费中文字幕在线| 国产黄片美女视频| 99国产精品一区二区蜜桃av| 亚洲无线观看免费| 国产一区二区亚洲精品在线观看| 美女被艹到高潮喷水动态| 在线免费观看的www视频| 九色国产91popny在线| 日韩欧美一区二区三区在线观看| 日韩欧美在线二视频| 日本 av在线| 欧美中文日本在线观看视频| 久久精品人妻少妇| 能在线免费观看的黄片| 又粗又爽又猛毛片免费看| 精品人妻熟女av久视频| 久久欧美精品欧美久久欧美| 午夜精品在线福利| 日韩中文字幕欧美一区二区| 午夜福利在线观看吧| 婷婷精品国产亚洲av| 91久久精品国产一区二区成人| 特级一级黄色大片| 亚洲av第一区精品v没综合| 亚洲va日本ⅴa欧美va伊人久久| 亚洲七黄色美女视频| 成人国产综合亚洲| 色哟哟·www| 亚洲中文日韩欧美视频| 亚洲最大成人av| 一本精品99久久精品77| 日韩成人在线观看一区二区三区| 亚洲av免费高清在线观看| 人妻夜夜爽99麻豆av| 亚洲五月婷婷丁香| 久久国产精品影院| 舔av片在线| 99精品在免费线老司机午夜| 国产精品,欧美在线| 国产亚洲av嫩草精品影院| 精品一区二区三区人妻视频| 男女视频在线观看网站免费| 搡老熟女国产l中国老女人| 亚洲性夜色夜夜综合| 麻豆一二三区av精品| 国产三级黄色录像| a级一级毛片免费在线观看| 国产一区二区在线av高清观看| 男女那种视频在线观看| 香蕉av资源在线| 亚洲av不卡在线观看| 午夜福利18| 国产日本99.免费观看| 久久久久亚洲av毛片大全| 国产中年淑女户外野战色| 精品人妻偷拍中文字幕| 能在线免费观看的黄片| 久久久久久九九精品二区国产| 最近在线观看免费完整版| 两个人的视频大全免费| 国产人妻一区二区三区在| 国产精品综合久久久久久久免费| 欧美色视频一区免费| 国产高潮美女av| bbb黄色大片| 大型黄色视频在线免费观看| 亚洲人与动物交配视频| 波多野结衣高清无吗| 久久久久性生活片| 国产真实伦视频高清在线观看 | 中文在线观看免费www的网站| 成人特级av手机在线观看| 国产白丝娇喘喷水9色精品| 日韩有码中文字幕| 久久精品久久久久久噜噜老黄 | 一进一出抽搐gif免费好疼| 亚洲欧美精品综合久久99| 长腿黑丝高跟| 成人国产综合亚洲| 熟女人妻精品中文字幕| 婷婷六月久久综合丁香| 看片在线看免费视频| 69人妻影院| 人妻夜夜爽99麻豆av| 精品日产1卡2卡| 五月玫瑰六月丁香| 少妇熟女aⅴ在线视频| 精品一区二区三区视频在线| 一a级毛片在线观看| 丁香六月欧美| 中亚洲国语对白在线视频| 波多野结衣高清无吗| 精品人妻一区二区三区麻豆 | 欧美激情久久久久久爽电影| 18禁裸乳无遮挡免费网站照片| 亚洲真实伦在线观看| 蜜桃久久精品国产亚洲av| 久久精品综合一区二区三区| 国产乱人伦免费视频| 狂野欧美白嫩少妇大欣赏| 日本与韩国留学比较| 人妻久久中文字幕网| 色吧在线观看| 国产精品99久久久久久久久| 久久久久九九精品影院| 亚洲成人久久性| 老司机午夜十八禁免费视频| 草草在线视频免费看| 真人做人爱边吃奶动态| 国模一区二区三区四区视频| 亚洲乱码一区二区免费版| 成人美女网站在线观看视频| 精品免费久久久久久久清纯| 99久久久亚洲精品蜜臀av| 国产成人啪精品午夜网站| 亚洲无线在线观看| 欧美日韩综合久久久久久 | 丰满人妻熟妇乱又伦精品不卡| 久久久精品欧美日韩精品| 夜夜看夜夜爽夜夜摸| 国产精品久久久久久久久免 | 国产又黄又爽又无遮挡在线| 18禁在线播放成人免费| 日本黄色视频三级网站网址| 精品午夜福利视频在线观看一区| 国产一区二区激情短视频| 久久国产精品影院| 首页视频小说图片口味搜索| 国产高清视频在线观看网站| 伦理电影大哥的女人| 国产中年淑女户外野战色| 丰满人妻一区二区三区视频av| 成人永久免费在线观看视频| 久9热在线精品视频| 久久精品久久久久久噜噜老黄 | 国产精品影院久久| 国产在线精品亚洲第一网站| 女人十人毛片免费观看3o分钟| 亚洲精品亚洲一区二区| 国产大屁股一区二区在线视频| 超碰av人人做人人爽久久| 成人av一区二区三区在线看| 亚洲国产精品久久男人天堂| 偷拍熟女少妇极品色| 国产免费一级a男人的天堂| 亚洲不卡免费看| 18禁在线播放成人免费| 99久久久亚洲精品蜜臀av| 高清在线国产一区| 日韩欧美免费精品| 国产精品综合久久久久久久免费| 尤物成人国产欧美一区二区三区| 黄色视频,在线免费观看| 1000部很黄的大片| 高清在线国产一区| 男女之事视频高清在线观看| 91字幕亚洲| 久久国产精品人妻蜜桃| 亚洲国产精品成人综合色|