• 
    

    
    

      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)
      兴业县| 华宁县| 溧水县| 寿光市| 吴堡县| 辛集市| 玉田县| 余干县| 应城市| 宕昌县| 施甸县| 巴南区| 碌曲县| 栾城县| 东港市| 友谊县| 上杭县| 湖口县| 绍兴县| 通河县| 元氏县| 禹城市| 内江市| 浮梁县| 承德市| 瑞丽市| 栖霞市| 盖州市| 新密市| 泰州市| 松桃| 治县。| 台山市| 新乡市| 惠安县| 察哈| 潜山县| 米脂县| 平湖市| 水城县| 福海县|