• <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)
    69av精品久久久久久| 亚洲色图av天堂| 久久99热这里只有精品18| 免费av不卡在线播放| 国产黄片美女视频| 搞女人的毛片| 脱女人内裤的视频| 欧美国产日韩亚洲一区| 久久久久久久亚洲中文字幕 | 国产野战对白在线观看| 免费高清视频大片| 亚洲熟妇中文字幕五十中出| 床上黄色一级片| 欧美日韩乱码在线| 18禁在线播放成人免费| 丝袜美腿在线中文| 嫁个100分男人电影在线观看| 日韩 亚洲 欧美在线| x7x7x7水蜜桃| 日本三级黄在线观看| 高清在线国产一区| 国产色爽女视频免费观看| 国产aⅴ精品一区二区三区波| 99久久九九国产精品国产免费| 网址你懂的国产日韩在线| 不卡一级毛片| 一级a爱片免费观看的视频| 国产精品一及| a级毛片免费高清观看在线播放| 成人午夜高清在线视频| 久久性视频一级片| 免费在线观看成人毛片| 日韩欧美在线二视频| 精品国内亚洲2022精品成人| 亚洲色图av天堂| 久久精品人妻少妇| 国产不卡一卡二| 免费高清视频大片| 嫁个100分男人电影在线观看| 久久久久精品国产欧美久久久| 一本综合久久免费| 日日摸夜夜添夜夜添小说| 亚洲激情在线av| 久久亚洲精品不卡| 亚洲乱码一区二区免费版| 日本免费一区二区三区高清不卡| 美女免费视频网站| 美女黄网站色视频| 极品教师在线免费播放| 18禁裸乳无遮挡免费网站照片| 国产美女午夜福利| 亚洲av不卡在线观看| 亚洲在线自拍视频| 国产熟女xx| 熟女电影av网| 人人妻,人人澡人人爽秒播| 国产蜜桃级精品一区二区三区| 亚洲狠狠婷婷综合久久图片| 18美女黄网站色大片免费观看| 免费在线观看成人毛片| 老师上课跳d突然被开到最大视频 久久午夜综合久久蜜桃 | 久久人人精品亚洲av| 国产精品日韩av在线免费观看| 国产真实乱freesex| 亚洲不卡免费看| 欧美色视频一区免费| 村上凉子中文字幕在线| 国产精品免费一区二区三区在线| 一区福利在线观看| 超碰av人人做人人爽久久| 99riav亚洲国产免费| 99久国产av精品| 真实男女啪啪啪动态图| 亚洲在线观看片| 国产精品野战在线观看| 国产精品亚洲av一区麻豆| 午夜福利成人在线免费观看| 国产色爽女视频免费观看| 激情在线观看视频在线高清| 在线观看免费视频日本深夜| 国产精品久久久久久久电影| 亚洲中文字幕日韩| 最后的刺客免费高清国语| 真人一进一出gif抽搐免费| 18禁黄网站禁片午夜丰满| 日本三级黄在线观看| 国产在线男女| 成年女人看的毛片在线观看| 成人国产一区最新在线观看| 亚洲av美国av| 露出奶头的视频| 别揉我奶头~嗯~啊~动态视频| 精品人妻一区二区三区麻豆 | 日日摸夜夜添夜夜添av毛片 | 国产高清三级在线| 在线播放国产精品三级| 午夜久久久久精精品| 别揉我奶头 嗯啊视频| 老司机福利观看| 欧洲精品卡2卡3卡4卡5卡区| 中文字幕久久专区| 成人精品一区二区免费| 免费观看精品视频网站| 婷婷亚洲欧美| 成人国产综合亚洲| 伦理电影大哥的女人| 国产探花极品一区二区| 黄色日韩在线| 757午夜福利合集在线观看| 91久久精品电影网| 免费看a级黄色片| 一区福利在线观看| 国产国拍精品亚洲av在线观看| 成人特级av手机在线观看| 欧美性猛交╳xxx乱大交人| 亚洲av第一区精品v没综合| 亚洲国产精品成人综合色| www.www免费av| 好男人在线观看高清免费视频| 两人在一起打扑克的视频| 校园春色视频在线观看| 亚洲天堂国产精品一区在线| 99热精品在线国产| 两性午夜刺激爽爽歪歪视频在线观看| 亚洲av五月六月丁香网| 国产黄色小视频在线观看| 国产精品爽爽va在线观看网站| 午夜亚洲福利在线播放| 18禁裸乳无遮挡免费网站照片| 午夜激情欧美在线| 亚洲精品456在线播放app | 国产日本99.免费观看| 校园春色视频在线观看| 又爽又黄a免费视频| 国产综合懂色| 午夜日韩欧美国产| 免费无遮挡裸体视频| 欧美日韩综合久久久久久 | 特级一级黄色大片| 欧美日本视频| 亚洲不卡免费看| 国产精品永久免费网站| av黄色大香蕉| 又黄又爽又刺激的免费视频.| 国产av一区在线观看免费| 中文字幕免费在线视频6| 亚洲av不卡在线观看| 久久精品国产99精品国产亚洲性色| 色视频www国产| 如何舔出高潮| 久久伊人香网站| 中文在线观看免费www的网站| 精品久久久久久成人av| 国产在视频线在精品| 日日摸夜夜添夜夜添小说| 搞女人的毛片| 亚洲中文字幕一区二区三区有码在线看| 一区二区三区高清视频在线| 亚洲乱码一区二区免费版| 色综合亚洲欧美另类图片| 久久精品综合一区二区三区| 丝袜美腿在线中文| 最近在线观看免费完整版| 欧美极品一区二区三区四区| 日日摸夜夜添夜夜添av毛片 | 网址你懂的国产日韩在线| 身体一侧抽搐| 3wmmmm亚洲av在线观看| av在线天堂中文字幕| 99热6这里只有精品| 日韩大尺度精品在线看网址| 成人高潮视频无遮挡免费网站| 欧美激情国产日韩精品一区| 99久久九九国产精品国产免费| 1000部很黄的大片| 男女做爰动态图高潮gif福利片| 亚洲熟妇中文字幕五十中出| 少妇裸体淫交视频免费看高清| 嫁个100分男人电影在线观看| 一进一出抽搐动态| 如何舔出高潮| 极品教师在线视频| 亚洲不卡免费看| 亚洲三级黄色毛片| 欧美日韩国产亚洲二区| 黄色一级大片看看| 又粗又爽又猛毛片免费看| 午夜福利欧美成人| 久久婷婷人人爽人人干人人爱| 亚洲av成人av| 在线观看一区二区三区| 国产成人福利小说| 91在线精品国自产拍蜜月| 在现免费观看毛片| 欧美日韩福利视频一区二区| 国产单亲对白刺激| 成年女人毛片免费观看观看9| 午夜视频国产福利| 国产精品国产高清国产av| 精品不卡国产一区二区三区| 日本黄色视频三级网站网址| 中文字幕av成人在线电影| 国产主播在线观看一区二区| 国产三级黄色录像| 国产伦人伦偷精品视频| 丝袜美腿在线中文| 俺也久久电影网| 男人和女人高潮做爰伦理| 一级黄片播放器| 亚洲av电影不卡..在线观看| 久久久久精品国产欧美久久久| 免费人成在线观看视频色| 久久久久久久久久成人| 日韩中文字幕欧美一区二区| 成人av一区二区三区在线看| 2021天堂中文幕一二区在线观| 国产精品,欧美在线| 亚洲av一区综合| 嫁个100分男人电影在线观看| 国内精品久久久久久久电影| 国产精品久久电影中文字幕| 少妇的逼水好多| 免费看光身美女| 成人三级黄色视频| а√天堂www在线а√下载| 午夜老司机福利剧场| 两人在一起打扑克的视频| 99久国产av精品| 精品国内亚洲2022精品成人| 午夜激情欧美在线| 嫩草影院入口| 亚洲av电影不卡..在线观看| 欧美+日韩+精品| 精品国产亚洲在线| 亚洲 国产 在线| 在线免费观看的www视频| 日本精品一区二区三区蜜桃| 性色av乱码一区二区三区2| 亚洲成a人片在线一区二区| 成人亚洲精品av一区二区| 国产av麻豆久久久久久久| 老司机深夜福利视频在线观看| 国产午夜福利久久久久久| 深夜a级毛片| 国产成人福利小说| 久久久久国内视频| 国产v大片淫在线免费观看| 赤兔流量卡办理| 动漫黄色视频在线观看| 亚洲 国产 在线| 亚洲av.av天堂| 深爱激情五月婷婷| 精品熟女少妇八av免费久了| 亚洲久久久久久中文字幕| 国产激情偷乱视频一区二区| 国产免费男女视频| 国产极品精品免费视频能看的| 色在线成人网| 美女高潮喷水抽搐中文字幕| 一个人免费在线观看电影| 热99re8久久精品国产| 国产 一区 欧美 日韩| 亚洲av二区三区四区| 国内少妇人妻偷人精品xxx网站| 美女免费视频网站| 午夜福利免费观看在线| 精品久久久久久久末码| 亚洲一区高清亚洲精品| 免费观看精品视频网站| 亚洲欧美日韩东京热| 12—13女人毛片做爰片一| 精品国产三级普通话版| 亚洲国产欧洲综合997久久,| 欧美激情在线99| 久久久久性生活片| 亚洲在线观看片| 国产精品98久久久久久宅男小说| 久久精品夜夜夜夜夜久久蜜豆| 国产一区二区激情短视频| 久久午夜福利片| 男人狂女人下面高潮的视频| 成人精品一区二区免费| 又紧又爽又黄一区二区| 国产高清视频在线播放一区| 精品乱码久久久久久99久播| 久久天躁狠狠躁夜夜2o2o| 内地一区二区视频在线| 亚洲午夜理论影院| 一区二区三区高清视频在线| 丰满的人妻完整版| а√天堂www在线а√下载| 能在线免费观看的黄片| 国产又黄又爽又无遮挡在线| 老熟妇乱子伦视频在线观看| 免费看a级黄色片| 天堂√8在线中文| 欧美成人一区二区免费高清观看| 中出人妻视频一区二区| 在线播放无遮挡| 亚洲成人久久性| 亚洲精品粉嫩美女一区| 亚洲成av人片免费观看| 男女那种视频在线观看| 午夜福利在线观看免费完整高清在 | 色尼玛亚洲综合影院| 成人高潮视频无遮挡免费网站| 不卡一级毛片| 国产精品免费一区二区三区在线| 一进一出抽搐动态| 色5月婷婷丁香| 丰满的人妻完整版| 好男人在线观看高清免费视频| 国产精品人妻久久久久久| 男人舔女人下体高潮全视频| 无人区码免费观看不卡| 国产伦一二天堂av在线观看| 美女高潮喷水抽搐中文字幕| 久久性视频一级片| av专区在线播放| 亚洲国产精品sss在线观看| 噜噜噜噜噜久久久久久91| 麻豆国产av国片精品| 国产成人a区在线观看| 婷婷色综合大香蕉| 毛片女人毛片| 亚洲午夜理论影院| 亚洲成人精品中文字幕电影| 色哟哟·www| 非洲黑人性xxxx精品又粗又长| 搡老熟女国产l中国老女人| 丁香欧美五月| 69av精品久久久久久| 高潮久久久久久久久久久不卡| 12—13女人毛片做爰片一| 制服丝袜大香蕉在线| 最近最新中文字幕大全电影3| 精品久久久久久,| 一级作爱视频免费观看| 激情在线观看视频在线高清| 久久久久久久久久黄片| 午夜激情福利司机影院| 国产白丝娇喘喷水9色精品| 久久99热这里只有精品18| 免费在线观看亚洲国产| 欧美不卡视频在线免费观看| 亚洲成人中文字幕在线播放| 国产精华一区二区三区| 99国产精品一区二区三区| 亚洲国产欧美人成| 99久国产av精品| 亚洲 欧美 日韩 在线 免费| 麻豆国产97在线/欧美| 国产v大片淫在线免费观看| 看十八女毛片水多多多| 免费电影在线观看免费观看| 最近中文字幕高清免费大全6 | 中亚洲国语对白在线视频| 国产精品不卡视频一区二区 | 一本精品99久久精品77| 成人三级黄色视频| 国产人妻一区二区三区在| 又紧又爽又黄一区二区| 一个人免费在线观看电影| 麻豆一二三区av精品| 亚洲av.av天堂| 亚洲欧美精品综合久久99| 久久欧美精品欧美久久欧美| 国产精品嫩草影院av在线观看 | 亚洲在线观看片| 神马国产精品三级电影在线观看| 久久久久久久精品吃奶| 天堂网av新在线| 成人国产一区最新在线观看| 狠狠狠狠99中文字幕| 欧美黄色淫秽网站| 天天一区二区日本电影三级| 日韩欧美三级三区| 国产69精品久久久久777片| 人妻夜夜爽99麻豆av| 亚洲av电影在线进入| 久久精品国产亚洲av天美| 中文字幕av成人在线电影| 一区二区三区免费毛片| 国产探花在线观看一区二区| 久久久久久久久大av| 美女高潮的动态| 悠悠久久av| 精品久久久久久久末码| 国产午夜精品论理片| 变态另类丝袜制服| av黄色大香蕉| 成人三级黄色视频| 狂野欧美白嫩少妇大欣赏| 麻豆成人av在线观看| 亚洲性夜色夜夜综合| 中文在线观看免费www的网站| 国产真实伦视频高清在线观看 | 免费在线观看亚洲国产| 亚洲第一区二区三区不卡| 亚洲aⅴ乱码一区二区在线播放| 美女被艹到高潮喷水动态| 久久婷婷人人爽人人干人人爱| 97超级碰碰碰精品色视频在线观看| 精品一区二区三区人妻视频| 嫩草影院入口| 又黄又爽又免费观看的视频| 欧美性猛交╳xxx乱大交人| 国产探花在线观看一区二区| 淫秽高清视频在线观看| 免费看光身美女| 色播亚洲综合网| 欧美日韩综合久久久久久 | 国产亚洲欧美98| 97人妻精品一区二区三区麻豆| 午夜福利成人在线免费观看| 宅男免费午夜| 亚洲三级黄色毛片| 久久久精品欧美日韩精品| 欧美+日韩+精品| 99国产精品一区二区蜜桃av| 国产亚洲精品久久久久久毛片| 欧美成狂野欧美在线观看| 一进一出抽搐gif免费好疼| 精品无人区乱码1区二区| 久久国产乱子伦精品免费另类| 午夜福利成人在线免费观看| 美女黄网站色视频| 精品久久久久久久人妻蜜臀av| 俄罗斯特黄特色一大片| 一个人看视频在线观看www免费| 亚洲18禁久久av| 国产久久久一区二区三区| 91字幕亚洲| 久久久久九九精品影院| 搞女人的毛片| 黄片小视频在线播放| 国产69精品久久久久777片| 在线观看av片永久免费下载| 美女cb高潮喷水在线观看| 激情在线观看视频在线高清| 我要看日韩黄色一级片| 中文在线观看免费www的网站| 国内揄拍国产精品人妻在线| 日本黄色片子视频| 亚洲专区中文字幕在线| 最近最新免费中文字幕在线| 免费一级毛片在线播放高清视频| 国产精品久久久久久精品电影| 久久精品国产99精品国产亚洲性色| 久久99热6这里只有精品| 一进一出好大好爽视频| 精品无人区乱码1区二区| 国产精品电影一区二区三区| 五月伊人婷婷丁香| 精品一区二区三区视频在线| 国产精品乱码一区二三区的特点| 我的女老师完整版在线观看| x7x7x7水蜜桃| 在线a可以看的网站| 丰满乱子伦码专区| 国产单亲对白刺激| 在线天堂最新版资源| 欧美日韩中文字幕国产精品一区二区三区| 国产av一区在线观看免费| 日韩免费av在线播放| 51午夜福利影视在线观看| 成人欧美大片| 免费av毛片视频| 亚洲男人的天堂狠狠| 永久网站在线| 搡老妇女老女人老熟妇| a级一级毛片免费在线观看| av欧美777| 国内精品久久久久久久电影| 国产老妇女一区| av视频在线观看入口| 赤兔流量卡办理| 国产一区二区在线av高清观看| 精品久久久久久久久久久久久| 亚洲精品一区av在线观看| 最后的刺客免费高清国语| 国产探花极品一区二区| 深夜精品福利| 亚洲精品乱码久久久v下载方式| 国产极品精品免费视频能看的| 免费搜索国产男女视频| 成人精品一区二区免费| 欧美黑人欧美精品刺激| 色综合欧美亚洲国产小说| 日韩人妻高清精品专区| 国产精品电影一区二区三区| 亚洲真实伦在线观看| 最后的刺客免费高清国语| 国产精品不卡视频一区二区 | 天美传媒精品一区二区| 男女那种视频在线观看| 久久欧美精品欧美久久欧美| 久久天躁狠狠躁夜夜2o2o| 国内精品一区二区在线观看| 午夜福利免费观看在线| 日韩欧美国产在线观看| 日韩精品青青久久久久久| 国产成人影院久久av| 亚洲国产精品合色在线| 色综合站精品国产| 国内久久婷婷六月综合欲色啪| 国产男靠女视频免费网站| 嫁个100分男人电影在线观看| 黄色配什么色好看| 偷拍熟女少妇极品色| 国产精品电影一区二区三区| 久久久久久久久大av| 国产成人啪精品午夜网站| 亚洲成人中文字幕在线播放| 欧美黄色淫秽网站| 久久国产乱子免费精品| 成年女人毛片免费观看观看9| 成人国产一区最新在线观看| 欧美xxxx性猛交bbbb| 亚洲成人免费电影在线观看| 嫩草影院入口| 搞女人的毛片| 舔av片在线| 免费人成在线观看视频色| 他把我摸到了高潮在线观看| 免费看日本二区| 成人三级黄色视频| 性欧美人与动物交配| 国产av在哪里看| 久久久国产成人精品二区| 亚洲国产精品sss在线观看| 欧美另类亚洲清纯唯美| 国产精品久久久久久精品电影| 精品久久久久久久久久免费视频| 国产成人福利小说| 中文字幕av在线有码专区| 国产精品女同一区二区软件 | 亚洲专区国产一区二区| 欧美成狂野欧美在线观看| 大型黄色视频在线免费观看| 桃色一区二区三区在线观看| 男女下面进入的视频免费午夜| 国产色爽女视频免费观看| 色综合站精品国产| 亚洲va日本ⅴa欧美va伊人久久| 日本 欧美在线| 国产极品精品免费视频能看的| 欧美乱妇无乱码| 嫩草影视91久久| 三级毛片av免费| 2021天堂中文幕一二区在线观| 一级av片app| 中文字幕人成人乱码亚洲影| 欧美3d第一页| 人人妻人人澡欧美一区二区| 国产日本99.免费观看| 日韩免费av在线播放| 非洲黑人性xxxx精品又粗又长| 午夜福利在线在线| 99热6这里只有精品| 丁香欧美五月| 99久久成人亚洲精品观看| 国产高清激情床上av| 色综合欧美亚洲国产小说| 亚洲成人中文字幕在线播放| 男人狂女人下面高潮的视频| 亚洲自拍偷在线| 色视频www国产| 久久人人精品亚洲av| 国产成人av教育| 日韩人妻高清精品专区| 国产麻豆成人av免费视频| 此物有八面人人有两片| 一进一出抽搐动态| 中文字幕av成人在线电影| 成人av在线播放网站| 一区二区三区高清视频在线| 久久午夜亚洲精品久久| 亚洲第一区二区三区不卡| 午夜福利视频1000在线观看| 在线天堂最新版资源| 俺也久久电影网| 精品一区二区三区视频在线观看免费| 一个人观看的视频www高清免费观看| 欧美绝顶高潮抽搐喷水| 国产av不卡久久| 窝窝影院91人妻| 琪琪午夜伦伦电影理论片6080| 真人做人爱边吃奶动态| 丰满乱子伦码专区| 成人精品一区二区免费| 我要看日韩黄色一级片| 成人永久免费在线观看视频| 国产精品精品国产色婷婷| 搡老熟女国产l中国老女人| 国产精品女同一区二区软件 | 国产探花在线观看一区二区| 天堂动漫精品| 国产激情偷乱视频一区二区| or卡值多少钱| 国产精品99久久久久久久久| 69人妻影院| 国产精品一区二区三区四区免费观看 | 给我免费播放毛片高清在线观看| 国产极品精品免费视频能看的| 精品欧美国产一区二区三| 在线观看av片永久免费下载| 国产成人aa在线观看| 婷婷精品国产亚洲av在线| 欧美黄色淫秽网站| av欧美777| 国产色爽女视频免费观看| 国产国拍精品亚洲av在线观看| 免费观看精品视频网站| 淫秽高清视频在线观看|