亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于應(yīng)用描述的Android代碼自動(dòng)生成

        2016-12-26 08:14:42江逸舟沈立煒趙文耘
        關(guān)鍵詞:安卓代碼框架

        江逸舟 沈立煒 彭 鑫 趙文耘

        (復(fù)旦大學(xué)軟件學(xué)院 上海 201203)(上海市數(shù)據(jù)科學(xué)重點(diǎn)實(shí)驗(yàn)室(復(fù)旦大學(xué)) 上海 201203)

        ?

        基于應(yīng)用描述的Android代碼自動(dòng)生成

        江逸舟 沈立煒 彭 鑫 趙文耘

        (復(fù)旦大學(xué)軟件學(xué)院 上海 201203)(上海市數(shù)據(jù)科學(xué)重點(diǎn)實(shí)驗(yàn)室(復(fù)旦大學(xué)) 上海 201203)

        在移動(dòng)開發(fā)領(lǐng)域,安卓應(yīng)用的開發(fā)吸引著廣大移動(dòng)終端廠商和開發(fā)者的加入。目前,開發(fā)者大多采用傳統(tǒng)的方式,基于集成開發(fā)環(huán)境為安卓應(yīng)用的每一項(xiàng)組成部分進(jìn)行設(shè)置或編碼,這些工作可能花費(fèi)開發(fā)者較多的時(shí)間。然而,與應(yīng)用框架相關(guān)的部分代碼與配置文件具有類似的模式,通過復(fù)用及定制的方式可以有效提高應(yīng)用的整體開發(fā)效率。為了實(shí)現(xiàn)這一目標(biāo),提出一套借鑒MDA(Model-Driven Architecture)思想的方法,基于安卓應(yīng)用的描述來完成安卓代碼框架部分的自動(dòng)生成。該方法包括一種描述安卓應(yīng)用基本元素及其關(guān)聯(lián)關(guān)系的元模型,以及一套可復(fù)用且支持定制的應(yīng)用代碼模版?;谠P蜆?biāo)準(zhǔn)的特定安卓應(yīng)用的描述可以驅(qū)動(dòng)基于模版的安卓框架代碼的自動(dòng)生成。在該方法基礎(chǔ)上,開發(fā)Android應(yīng)用框架自動(dòng)生成工具,并以一個(gè)實(shí)例展示了方法與工具的可用性。

        Android 模型驅(qū)動(dòng)架構(gòu) 代碼自動(dòng)生成 元模型

        0 引 言

        當(dāng)前,智能終端的普及使得移動(dòng)應(yīng)用的需求量不斷增長(zhǎng)。安卓作為免費(fèi)、開源的手機(jī)平臺(tái)受到廣大開發(fā)人員及用戶的青睞。安卓應(yīng)用開發(fā)者大多采用傳統(tǒng)的方式(由設(shè)計(jì)至編碼),基于集成開發(fā)環(huán)境(例如Eclipse、Android Studio、Visual Studio等)完成應(yīng)用的開發(fā)工作。在這些工具中,開發(fā)者需要為安卓應(yīng)用的每一項(xiàng)組成部分進(jìn)行設(shè)置或編碼,包括應(yīng)用界面的設(shè)計(jì)(編寫layout文件,或直接通過可視化開發(fā)方式進(jìn)行設(shè)計(jì))、核心配置文件的定義(填充Androidmanifest.xml文件)、組成應(yīng)用的構(gòu)件的開發(fā)(Activity、Service等代碼的編寫)、構(gòu)件間跳轉(zhuǎn)關(guān)系的實(shí)現(xiàn)(Intent代碼的編寫)等。這些工作可能花費(fèi)開發(fā)者較多的時(shí)間。然而,與應(yīng)用框架相關(guān)的部分代碼與配置文件具有類似的模式,我們認(rèn)為這部分的開發(fā)工作可以通過復(fù)用及定制的方式從而提高應(yīng)用的開發(fā)效率。

        針對(duì)以上目標(biāo),本文提出一套借鑒MDA思想的方法,基于安卓應(yīng)用的描述來完成安卓代碼框架部分的自動(dòng)生成。MDA指首先建立抽象的、與具體技術(shù)無關(guān)的模型,隨后從抽象模型自動(dòng)生成應(yīng)用程序的過程[1]。遵循該過程,本文首先提出一種描述安卓應(yīng)用的元模型,元模型定義了組成安卓應(yīng)用的各類元素及其依賴關(guān)系。特定安卓應(yīng)用的模型基于元模型標(biāo)準(zhǔn),定義了應(yīng)用的架構(gòu),包括名稱、屬性以及約束關(guān)系等。同時(shí),本文方法還提出了一套應(yīng)用代碼模版,其中內(nèi)嵌了與特定應(yīng)用相關(guān)的可變、可定制的代碼部分。在描述應(yīng)用的模型以及代碼模板的基礎(chǔ)上本方法涵蓋了從元模型所描述元素到代碼模版中可變部分的映射過程,支持通過代碼生成器自動(dòng)生成安卓應(yīng)用的框架,隨后開發(fā)者可將精力投入在應(yīng)用業(yè)務(wù)邏輯的代碼編寫上?;诒痉椒?,我們實(shí)現(xiàn)了安卓應(yīng)用框架自動(dòng)生成工具,工具采用GMF[2]圖形框架支持用戶以可視化的方式設(shè)計(jì)應(yīng)用框架,Apache Freemarker[3]代碼生成器負(fù)責(zé)定制模版,生成應(yīng)用代碼框架。

        1 相關(guān)工作

        近年來,針對(duì)基于MDA的代碼自動(dòng)生成技術(shù)的研究主要包括UML模型的代碼自動(dòng)生成、模型驅(qū)動(dòng)的安卓界面(Graphical user interface)自動(dòng)生成、基于DSL(Domain Specific Language)元模型以及采用BPMN模型的代碼自動(dòng)生成。

        為了提高GUI的開發(fā)效率,Silva等[4-10]提出了面向安卓界面自動(dòng)生成的模型。他們?yōu)榘沧繎?yīng)用的控件、窗口、事件監(jiān)聽器等建立抽象模型,再將模型轉(zhuǎn)換為代碼,自動(dòng)生成安卓應(yīng)用界面的代碼。本文的研究重點(diǎn)在于創(chuàng)建描述安卓應(yīng)用的模型,自動(dòng)生成應(yīng)用的代碼框架,而界面自動(dòng)生成并非本文考慮的重點(diǎn)。本文僅通過配置實(shí)現(xiàn)了簡(jiǎn)單的線性布局。

        在基于UML模型驅(qū)動(dòng)的代碼自動(dòng)生成方面,Parada等[11]采用了UML類圖和順序圖為安卓應(yīng)用建立模型,并建立類圖與順序圖的對(duì)應(yīng)關(guān)系,然后結(jié)合兩者自動(dòng)生成安卓應(yīng)用代碼框架。Kraemer等[12,13]采用UML活動(dòng)圖描述安卓應(yīng)用,將活動(dòng)圖轉(zhuǎn)換為可執(zhí)行的狀態(tài)機(jī),再自動(dòng)生成安卓應(yīng)用的代碼。由于安卓應(yīng)用的領(lǐng)域特征,UML統(tǒng)一建模語(yǔ)言不能很好地描述安卓應(yīng)用,因此本文采用了領(lǐng)域特定的元模型定義組成安卓應(yīng)用的各類元素。

        在DSL的元模型的模型驅(qū)動(dòng)技術(shù)方面,Lachga等[6-10]借鑒MDA思想,提出了DSL的建模語(yǔ)言,并開發(fā)了安卓界面代碼自動(dòng)生成工具。Madari等[8]為應(yīng)用的GUI和頁(yè)面跳轉(zhuǎn)做詳細(xì)設(shè)計(jì),建立了應(yīng)用整體與不同頁(yè)面的模型,再將頁(yè)面之間的跳轉(zhuǎn)通過CR模型(UML活動(dòng)圖)聯(lián)系起來。本文的元模型定義了組成安卓應(yīng)用的各類元素,如Activity、Service、BroadcastReceiver等,并通過描述應(yīng)用的模型為安卓應(yīng)用的框架建模。

        其他研究人員采用BPMN建模語(yǔ)言為應(yīng)用建模,例如Solis-Martinez等采用BPMN建模語(yǔ)言來描述業(yè)務(wù)流程,然后生成跨平臺(tái)的應(yīng)用[14,15]。模型通過XML格式定義流程模型,經(jīng)過一定步驟的配置后,實(shí)現(xiàn)了與平臺(tái)無關(guān)的應(yīng)用(Android、IOS)。但他們并沒有對(duì)具體的應(yīng)用開發(fā)做出詳細(xì)闡述,僅提出了平臺(tái)無關(guān)的模型。

        此外,一些知名公司開發(fā)了圖形化工具為開發(fā)人員帶來便利。例如,谷歌與MIT聯(lián)合開發(fā)的一款安卓快速開發(fā)工具App Inventor[16],該工具可以使用戶通過基于瀏覽器的工具開發(fā)手機(jī)應(yīng)用。用戶可以方便地拖放代碼塊,通過mushup的方式將它們放在一起,產(chǎn)生一個(gè)應(yīng)用程序。由于是由特定的模塊組成的,所以具有一定限制性。IBM公司的Rational Rhapsody[17]提供了用于安卓代碼框架生成的Eclipse插件,該工具采用UML類圖、順序圖為應(yīng)用建模。但是,該工具的模型配置比較復(fù)雜,與代碼開發(fā)幾乎是一一對(duì)應(yīng)的。相比而言,本文提出了領(lǐng)域特定的元模型,并通過描述應(yīng)用的模型為安卓應(yīng)用建模,建模過程更加簡(jiǎn)單直觀。

        2 描述安卓應(yīng)用框架的元模型

        2.1 元模型適用范圍

        由于安卓四大組件包括Activity、Service、BroadcastReceiver和Contentprovider[18],每種組件都具有自己的生命周期,承擔(dān)不同的職責(zé)。對(duì)于多數(shù)應(yīng)用開發(fā)層的應(yīng)用而言,都由以上四大組件構(gòu)成,例如業(yè)務(wù)信息類應(yīng)用、社交軟件、新聞應(yīng)用等。本文提出的元模型將安卓組件設(shè)計(jì)為元模型的元素,可適用于多數(shù)安卓應(yīng)用開發(fā)程序。而本文提出的元模型對(duì)于諸如框架開發(fā)類應(yīng)用(基于安卓操作平臺(tái)做定制化開發(fā))、底層開發(fā)類(驅(qū)動(dòng)開發(fā)、JNI)等尚不適用。具體來說,本文提出的元模型可適用于具有以下特征的應(yīng)用:

        (1) 安卓應(yīng)用包含許多Activity。Activity主要用于顯示界面、與用戶交互;應(yīng)用需要實(shí)現(xiàn)導(dǎo)航功能,導(dǎo)航指Activity之間的跳轉(zhuǎn)。

        (2) 安卓應(yīng)用需啟動(dòng)后臺(tái)服務(wù)。Activity是安卓應(yīng)用的主線程,為了保證用戶交互流暢,Service可以用于完成長(zhǎng)時(shí)間執(zhí)行的后臺(tái)服務(wù),例如下載文件、播放背景音樂等。

        (3) 安卓應(yīng)用需要監(jiān)聽全局廣播。例如,應(yīng)用需要監(jiān)聽系統(tǒng)廣播,如檢測(cè)WiFi、開機(jī)啟動(dòng)、sms消息等。

        (4) 安卓應(yīng)用需要實(shí)現(xiàn)組件間通信,我們可以通過綁定服務(wù)、動(dòng)態(tài)廣播實(shí)現(xiàn)組件間的通信功能。

        2.2 元模型定義

        描述安卓應(yīng)用的元模型定義了描述安卓應(yīng)用框架的各個(gè)元素及其依賴關(guān)系,如圖1所示。

        圖1 描述安卓應(yīng)用的元模型(類圖)

        表1給出了具體的元模型的定義,我們將元模型元素按照類別分為組件類、Widget類、事件監(jiān)聽器類、關(guān)聯(lián)類和權(quán)限類。

        表1 元模型定義表

        2.3 元模型依賴關(guān)系定義

        元模型的依賴關(guān)系主要分為以下五個(gè)方面:

        (1) Transition與EventListener、Intent依賴關(guān)系定義

        安卓應(yīng)用組件之間的轉(zhuǎn)移是由事件驅(qū)動(dòng)并由Intent負(fù)責(zé)傳遞消息,因此Transition與Intent、EventListener具有關(guān)聯(lián)關(guān)系。

        (2) Component轉(zhuǎn)移依賴關(guān)系定義

        我們把Component元素之間的依賴關(guān)系定義為Transition元素。Activity元素可以跳轉(zhuǎn)到多個(gè)其他的Activity;Activity可以啟動(dòng)多個(gè)Service;Component元素可以向多個(gè)廣播發(fā)送通知。Transition必須設(shè)置好相應(yīng)廣播的action屬性,否則廣播將接收不到通知。

        (3) Activity、Widget、EventListener依賴關(guān)系定義

        Activity可以包含多個(gè)Widget組件,所以Activity與Widget具有一對(duì)多的聚合關(guān)系。同樣,Widget組件可以觸發(fā)不同的事件,因此Widget與EventListener也具有一對(duì)多聚合關(guān)系。

        (4) Activity與BroadcastReceiver依賴關(guān)系定義

        動(dòng)態(tài)廣播是安卓應(yīng)用開發(fā)中實(shí)現(xiàn)跨進(jìn)程通信的常用技術(shù)。在Activity中可以動(dòng)態(tài)注冊(cè)BroadcastReceiver。Activity元素與動(dòng)態(tài)的BroadcastReceiver元素具有一對(duì)多聚合關(guān)系。

        (5) Widget與相應(yīng)的常用事件監(jiān)聽器依賴關(guān)系定義

        每種安卓控件都具有與常用事件監(jiān)聽器。

        3 基于模版的框架代碼生成

        3.1 基于Freemarker的代碼模板

        本文采用Freemarker模板引擎自動(dòng)生成安卓應(yīng)用的代碼模板。Freemarker遵循MVC(model view controller)模式,是一款輕量級(jí)的代碼生成引擎。Freemarker模板引擎的語(yǔ)法規(guī)則類似于腳本語(yǔ)言,本身也具有一些編程能力,例如條件判斷、循環(huán)嵌套、集合等概念類似于其他編程語(yǔ)言。例如,${}指令表示可以替換為某個(gè)變量的值,if/elseif/else表示條件判斷,list指令表示循環(huán)遍歷對(duì)象集合,include指令表示嵌套子模板等。本文按照Freemarker的語(yǔ)法規(guī)則定義了源代碼、布局、配置模板。其中,源代碼模板包含了Activity模板、Service模板、BroadcastReceiver模板。在這些模板中,還可以設(shè)置內(nèi)嵌子模板,例如控件模板、Intent模板、bindService模板等。圖2展示了上述模板和各個(gè)模板之間的依賴關(guān)系。

        圖2 模板類圖

        本文定義的模板類型非常多,由于篇幅的限制,我們僅展示了其中的一個(gè)模板。圖3展示了Activity模板,Activity模板主要用于生成Activity類的代碼框架,包括引入包、繼承Android.app.Activity類、重寫Activity的生命周期方法。同時(shí),在onCreate方法中設(shè)置該Activity的布局文件、注冊(cè)動(dòng)態(tài)廣播。在onDestory方法中,釋放綁定的Service,并且取消注冊(cè)動(dòng)態(tài)廣播。圖中的高亮區(qū)域顯示了代碼模板的可變部分。Activity模板中可以包含多個(gè)widget、動(dòng)態(tài)廣播,還可以綁定多個(gè)Service。我們將這部分可嵌套的模板定義為子模板,實(shí)現(xiàn)了模板之間的包含關(guān)系。例如,在onCreate方法中調(diào)用<#include "/Button.ftl">可以在Activity模板中嵌套Button模板。此外,在事件中還可以嵌套Intent模板從而實(shí)現(xiàn)Component元素之間的關(guān)聯(lián)關(guān)系。

        圖3 Activity模板

        3.2 基于描述模型的代碼模板定制

        在前文所提出的元模型與代碼模板的基礎(chǔ)上,我們按照以下轉(zhuǎn)換過程實(shí)現(xiàn)框架代碼的自動(dòng)生成,如圖4所示。首先,創(chuàng)建基于元模型標(biāo)準(zhǔn)的描述應(yīng)用的模型,得到模型的XML描述文件?;贔reemarker的模板規(guī)則定義一組代碼模板,包括安卓應(yīng)用的源代碼、布局、配置文件、子模板等。接著,將XML描述文件和代碼模板作為代碼生成器的輸入。隨后,將描述應(yīng)用的模型映射到代碼模板的可變部分,最后生成應(yīng)用的代碼框架。

        圖4 描述應(yīng)用的模型到應(yīng)用代碼框架轉(zhuǎn)換圖

        其中,應(yīng)用的源代碼是應(yīng)用程序的主體,根據(jù)模型和代碼映射規(guī)則生成的源代碼包括用戶定制的Activity類、Service類、 BroadcastReceiver類。AndroidManifest.xml配置文件可以定義用戶所配置的版本,注冊(cè)Activity、Service、BroadcastReceiver、Permission等。Layout布局文件是安卓應(yīng)用程序的界面。我們的工具會(huì)根據(jù)模型和屬性配置,自動(dòng)為Activity生成相應(yīng)的布局文件。 圖5展示了一個(gè)簡(jiǎn)單的示例,形象地展示了從特定模型到模板中可變部分的映射過程。

        圖5 Activity綁定Service元模型與模板映射過程圖

        由于模型的XML定義文件是XML DOM樹形式的,我們引入了Dom4j API解析該模型的定義文件,遍歷讀取該定義文件中的各個(gè)節(jié)點(diǎn)、屬性。同時(shí),為其中的節(jié)點(diǎn)建立了Java模型與之一一對(duì)應(yīng)。通過遍歷該XML文件,可以得到模型所創(chuàng)建的所有節(jié)點(diǎn)。根據(jù)Node節(jié)點(diǎn)的類型分類,將每個(gè)Node節(jié)點(diǎn)獨(dú)立作為一個(gè)源文件的輸出。例如,XML文件中包含BroadcastReceiver元素,將它注入BroadcastReceiver對(duì)象,然后生成對(duì)應(yīng)的java源文件。對(duì)于類型是Activity的元素,生成它所包含的組件、事件監(jiān)聽器、布局文件以及生命周期等。如果元素的類型是Service,那么根據(jù)他的啟動(dòng)類型,判斷是否要綁定Service。對(duì)于BroadcastReceiver,判斷它是否是靜態(tài)等還是動(dòng)態(tài)的。如果是靜態(tài)的廣播,那么需生成獨(dú)立的BroadcastReceiver文件,并在配置文件中注冊(cè),否則在代碼中動(dòng)態(tài)注冊(cè)。

        4 工具實(shí)現(xiàn)與實(shí)驗(yàn)

        基于上述元模型,實(shí)現(xiàn)了Android應(yīng)用框架自動(dòng)生成工具。本節(jié)首先介紹了工具的架構(gòu)設(shè)計(jì)。接著,我們使用該工具實(shí)現(xiàn)了一個(gè)具體的安卓應(yīng)用“EBook”,并且展示了運(yùn)行效果。

        4.1 Android應(yīng)用框架自動(dòng)生成工具

        Android應(yīng)用框架自動(dòng)生成工具的主要任務(wù)是開發(fā)一套能為安卓應(yīng)用創(chuàng)建描述應(yīng)用的模型的圖形編輯器和自動(dòng)生成應(yīng)用代碼框架的功能。工具架構(gòu)主要分為五層,分別為Eclipse Platform、Platform Runtime、Tool Framework、工具層和應(yīng)用層,如圖6所示。

        圖6 Android應(yīng)用框架自動(dòng)生成工具架構(gòu)圖

        最底層的Eclipse Platform層代表Eclipse運(yùn)行時(shí)環(huán)境。Eclipse是一個(gè)開源的平臺(tái),可以使各種功能以插件的形式自由組裝的IDE,例如GMF、Draw2D、AndroidADT等。Android ADT[19]為開發(fā)安卓項(xiàng)目提供了運(yùn)行時(shí)環(huán)境。工具框架層提供了圖形工具框架、Dom4j XML API、Android SDK所提供的API、代碼生成器。本文采用了Apache Freemarker代碼生成技術(shù)定制代碼模板,并且在運(yùn)行時(shí)動(dòng)態(tài)輸入數(shù)據(jù)模型自動(dòng)生成不同的代碼。工具層包括了圖形編輯器,該圖形編輯器是在GMF的基礎(chǔ)上生成的,可以利用該編輯器創(chuàng)建描述安卓應(yīng)用的模型。工具層還包括我們定義的代碼模板、元模型所描述元素到代碼模板中可變部分的映射過程、Android工程。我們首先通過EMF[20]創(chuàng)建描述應(yīng)用的EMF元模型,為了使工具建模更加方便、形象,在元模型的基礎(chǔ)上加入了描述流程的節(jié)點(diǎn)如Process、Node、Start、End、Edge、Permissions。我們會(huì)在模型映射到代碼模板的定制過程中,從中提取出符合元模型定義的元素,再將模型轉(zhuǎn)換為最終的代碼。然后利用GMF圖形框架自動(dòng)生成描述安卓應(yīng)用的編輯器。隨后,按照Freemarker的模板語(yǔ)法規(guī)則定義好安卓應(yīng)用的代碼框架、布局、配置文件。接著,將特定的模型與代碼模板的可變部分做映射,完成模型到代碼的轉(zhuǎn)換。工具架構(gòu)圖的最上層是應(yīng)用層,通過該工具,可以快速為安卓應(yīng)用建模。

        4.2 實(shí)驗(yàn)案例

        EBook是一個(gè)簡(jiǎn)易的電子書應(yīng)用,提供書籍列表、下載書籍、我的書籍、查看書籍內(nèi)容的功能。EBook的架構(gòu)包括手機(jī)客戶端和服務(wù)器端。用戶可以在手機(jī)客戶端下載、翻閱電子書。服務(wù)器端則為客戶端提供書籍的下載。

        我們將使用Android應(yīng)用框架自動(dòng)生成工具生成應(yīng)用的基本框架,再手動(dòng)編寫具體的業(yè)務(wù)邏輯代碼以及服務(wù)器代碼等。應(yīng)用包括三個(gè)界面BookListActivity、MyBookActivity、BookContentActivity。BookListActivity頁(yè)面提供許多未下載的書籍,通過列表的形式列出,用戶可以點(diǎn)擊列表中的書進(jìn)行下載。進(jìn)入MyBookActivity可以查看已下載的書籍列表。點(diǎn)擊已下載的書籍列表可以查看書籍的內(nèi)容和信息。

        4.3 實(shí) 驗(yàn)

        實(shí)例應(yīng)用需將BookListActivity設(shè)置為起始界面,在BookListActivity中實(shí)現(xiàn)Button、List、Menu、TextView以及動(dòng)態(tài)廣播。然后,為Button、List加入點(diǎn)擊事件監(jiān)聽器。在點(diǎn)擊List時(shí)啟動(dòng)一個(gè)后臺(tái)的DownLoadService來完成下載書籍的工作。下載完成之后發(fā)送Intent到動(dòng)態(tài)廣播,告知用戶下載已完成。在點(diǎn)擊該Button之后跳轉(zhuǎn)到MyBookActivity界面。MyBookActivity包括一個(gè)TextView和一個(gè)List。List列出了所有已下載的書籍,點(diǎn)擊List可以進(jìn)入第三個(gè)界面BookContentActivity。此外,我們還為實(shí)例應(yīng)用添加了安卓應(yīng)用的常用權(quán)限存儲(chǔ)卡訪問權(quán)限、震動(dòng)權(quán)限、Internet訪問權(quán)限。存儲(chǔ)卡訪問權(quán)限用于保存、讀取已下載的書籍。Internet訪問權(quán)限主要用于下載書籍時(shí)訪問互聯(lián)網(wǎng)。震動(dòng)權(quán)限用于發(fā)送消息給用戶時(shí)震動(dòng)提示用戶下載完成。

        使用Android應(yīng)用框架自動(dòng)生成工具生成實(shí)例需要?jiǎng)?chuàng)建一個(gè)新的Android工程,并在工程目錄下創(chuàng)建應(yīng)用的模型文件。然后拖拽右側(cè)工具欄的模型元素,定義應(yīng)用的模型節(jié)點(diǎn)和關(guān)聯(lián)關(guān)系,例如設(shè)置組件之間的跳轉(zhuǎn),以何種方式啟動(dòng)Service,實(shí)現(xiàn)發(fā)送廣播等。隨后,在屬性視圖完成每個(gè)節(jié)點(diǎn)的屬性定義。最后,使用代碼自動(dòng)生成功能將模型轉(zhuǎn)換為代碼,從而得到應(yīng)用的代碼框架,如圖7所示。

        圖7 Android應(yīng)用框架自動(dòng)生成工具模型編輯界面

        在完成了上述配置后,通過代碼自動(dòng)生成功能可以得到工具自動(dòng)生成的應(yīng)用代碼框架。我們?cè)谠摽蚣艿幕A(chǔ)上手動(dòng)添加了業(yè)務(wù)邏輯代碼并且美化了界面。圖8顯示了EBook的運(yùn)行效果,圖中展示了應(yīng)用的界面,包括書籍列表、我的書籍、查看書籍內(nèi)容和版本信息界面。查看書籍內(nèi)容界面則顯示了某一本圖書的內(nèi)容。

        圖8 示例應(yīng)用運(yùn)行圖

        5 結(jié) 語(yǔ)

        本文借鑒MDA思想提出了描述應(yīng)用的元模型。同時(shí),我們定義了代碼框架模板并且提出了從元模型所描述元素到代碼模板中可變部分的映射方法?;诒疚奶岢龅脑P?,實(shí)現(xiàn)了Android應(yīng)用框架自動(dòng)生成工具。該工具可以為安卓應(yīng)用創(chuàng)建描述應(yīng)用的模型,生成應(yīng)用程序的框架,包括源代碼、配置文件、布局文件。實(shí)驗(yàn)部分通過一個(gè)實(shí)例演示了Android應(yīng)用框架自動(dòng)生成工具的功能。通過實(shí)驗(yàn),體現(xiàn)了Android應(yīng)用框架自動(dòng)生成工具可以為開發(fā)人員快速構(gòu)建應(yīng)用模型,自動(dòng)生成應(yīng)用的代碼框架。在此框架的基礎(chǔ)上繼續(xù)開發(fā)能夠有效提高應(yīng)用開發(fā)效率。

        在未來的工作中準(zhǔn)備為元模型加入ContentProvider元素,使元模型更加完善。其次,本文將Widget與EventListener定義為抽象類型以便后續(xù)擴(kuò)展。因此,可以為Android應(yīng)用框架自動(dòng)生成工具添加更多的控件使工具提供更強(qiáng)大的功能。

        [1] Kleppe A,Warmer J,Bast W.解析MDA[M].人民郵電出版社,2004.

        [2] The Eclipse Foundation.Graphical Modeling Project(GMP)[EB/OL].http://www.eclipse.org/modeling/gmp/.

        [3] The Apache Software Foundation.Apache Freemarker[EB/OL].http://fre-emarker.incubator.apache.org/.

        [4] Silva L P D,Fernando B E A.Model-Driven GUI Generation and Navigation for Android BIS Apps[C]//Model-Driven Engineering and Software Development (MODELSWARD),2014:400-407.

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

        [6] Lachgar M,Abdali A.Generating Android graphical user interfaces using an MDA approach[C]//Information Science and Technology (CIST),2014:80-85.

        [7] 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.

        [8] Mannadiar R,Vangheluwe H.Modular Synthesis of Mobile Device Applications from Domain-Specific Models[C]//Automated Software Engineering(ASE),2010:21-28.

        [9] Madari I,Lengyel L,Levendovszky T.Modeling the User Interface of Mobile Devices with DSLs[C]//8th International Symposium of Hungarian Researchers on Computational Intelligence and Informatics,2007:583-589.

        [10] Lachgar M,Abdali A.Modeling and Generating the User Interface of Mobile Devices and Web Development with DSL[J].Journal of Theoretical and Applied Information Technology,2015,72(1):124-132.

        [11] Parada A G,Brisolara L B D.A Model Driven Approach for Android Applications Development[C]//Computing System Engineering (SBESC),2012:192-197.

        [12] Kraemer F A.Engineering Android Applications Based on UML Activities[M].Model Driven Engineering Languages and Systems,2011,6981:183-197.

        [13] Le Goaer O,Barbier F,Cariou E,et al.Android Executable Modeling:Beyond Android Programming[C]//Future Internet of Things and Cloud (FiCloud),2014:411-414.

        [14] Solis-Martinez J,Garcia-Menendez N,Bustelo C P G,et al.BPLOM:BPM Level-Oriented Methodology for Incremental Business Process Modeling and Code Generation on Mobile Platforms[J].International Journal of Interactive Multimedia and Artificial Intelligence,2013,2(2):13-27.

        [15] SolisMartinez J,Espada J P,GarciaMenendez N,et al.VGPM:Using Business Process Modeling for Videogame Modeling and Code Generation in Multiple Platforms[J].Computer Standards & Interfaces,2015,42:42-52.

        [16] AppInventor[EB/OL].http://code.google.com/p/app-invento r-releases/.

        [17] RationalRhapsody[EB/OL].http://www.ibm.com/ developerworks/cn/ra-tional/model-driven-development-speed-delivery/index.html.

        [18] Application Fundamentals Quickview[EB/OL].http://developer. android.com.

        [19] Android Development Tools(ADT) Plugin[EB/OL].http://web.mit.edu/hychenj/MacData/afs/sipb/project/android/docs/tools/sdk/eclipse-adt.html.

        [20] Eclipse Modeling Framework(EMF)[EB/OL].http://www.eclipse.rg/mo-deling/emf/o.

        ANDROID CODE AUTOMATIC GENERATION BASED ON APPLICATION DESCRIPTION

        Jiang Yizhou Shen Liwei Peng Xin Zhao Wenyun

        (SchoolofSoftwareEngineering,FudanUniversity,Shanghai201203,China)(ShanghaiKeyLaboratoryofDataScience,FudanUniversity,Shanghai201203,China)

        In the field of mobile development, Android application development has attracted many mobile manufacturers and developers. At present, most of the developers use a traditional way to code and configure for each part of the Android application based on the integrated development environments, which takes much time. However, part of the code and configuration files related to application framework may have a similar pattern, and software reuse and customizing can effectively improve the overall development efficiency of application. In order to achieve this goal, this paper puts forward a collection of method making reference to the thought of MDA (Model-Driven Architecture). Within this method, automatically generating android code framework is based on the description of the Android application. The method includes a meta-model which describes elements and associated relationships of Android applications as well as a set of reusable and customization supported code template. Based on the standard of the meta-model, description of a specific android application can drive the android framework to generate automatically based on the code template. Based on the method, this paper developed Android code framework automatic generation tool, and an example is carried out to show the availability of the method and tool.

        Android MDA(Model-Driven Architecture) Automatic code generation Meta-model

        2016-05-09。國(guó)家自然科學(xué)基金項(xiàng)目(61402113);國(guó)家高技術(shù)研究發(fā)展計(jì)劃項(xiàng)目(2013AA01A605)。江逸舟,碩士生,主研領(lǐng)域:軟件工程。沈立煒,副教授。彭鑫,教授。趙文耘,教授。

        TP311.5

        A

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

        猜你喜歡
        安卓代碼框架
        框架
        廣義框架的不相交性
        文物表情包
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        WTO框架下
        法大研究生(2017年1期)2017-04-10 08:55:06
        一種基于安卓系統(tǒng)的手機(jī)側(cè)抓包分析方法
        一種基于OpenStack的云應(yīng)用開發(fā)框架
        亚洲国产精品一区二区第一| 亚洲国产成人精品无码区在线秒播 | 欧洲无码一级毛片无遮挡| av手机天堂在线观看| 日本系列有码字幕中文字幕| 久久国产人妻一区二区| 国内免费自拍9偷1拍| 蜜桃视频在线观看免费亚洲| 亚洲av成人噜噜无码网站| 色一情一乱一伦一区二区三区| 人妻少妇无码中文幕久久| 国产亚洲精品高清视频| 国产成人精品日本亚洲i8| 欧美多人片高潮野外做片黑人| 无码人妻丰满熟妇片毛片| 88国产精品视频一区二区三区| 国产激情无码Av毛片久久| 中文字幕一区二区区免| 精品亚洲第一区二区三区 | 久久婷婷色综合一区二区 | 亚洲国产精品一区二区成人av| 国产午夜激无码av毛片不卡| 性高朝大尺度少妇大屁股| 无码人妻精品一区二区在线视频| 午夜tv视频免费国产区4| 色老汉亚洲av影院天天精品| 久久伊人精品色婷婷国产| 欧美成人www在线观看| 老熟女高潮一区二区三区| 国产亚洲欧美在线播放网站| 91精品国产综合久久国产| 久久精品国产亚洲夜色av网站| 日本三级欧美三级人妇视频黑白配| 欧美成人www免费全部网站| 精品专区一区二区三区| 亚洲国产美女高潮久久久| 专干老肥熟女视频网站300部| 久久久久久久98亚洲精品| 人妻少妇无乱码中文字幕| 国产精品无套一区二区久久 | 亚洲熟妇乱子伦在线|