i51i51跨平臺中間件
在某一些操作系統(tǒng)中因?yàn)闆]有“Application Programming Framework(以下簡稱APF)”,因而給應(yīng)用開發(fā)者帶來了很多不便之處,在這種平臺下開發(fā)產(chǎn)品只能把應(yīng)用程序的代碼跟系統(tǒng)代碼放在一起編譯,并最終將IMG燒錄到設(shè)備上才能得以驗(yàn)證。這種開發(fā)模式的最大問題在于效率極低,比如當(dāng)我們要真機(jī)調(diào)試時,哪怕是只修改了一個log,你也必須得重新編譯整個系統(tǒng),非常耗時。相比之下,Android的開發(fā)就簡單多了,開發(fā)者可以基于Android SDK,或第三方開發(fā)框架做交叉開發(fā),PC端基于仿真器調(diào)試APP,真機(jī)端發(fā)布APP也很簡單,只需要將APP文件放入T卡即可。這也正是“智能手機(jī)”的定義:“用戶可以任意安裝刪除應(yīng)用程序”,按照這個定義來說“i51”就是一個可以讓平臺智能化的技術(shù)。
“i51”就是在這個技術(shù)背景下產(chǎn)生的,所謂讓“用戶可以任意安裝刪除應(yīng)用程序”是一種很產(chǎn)品化的描述。作為一個技術(shù)平臺的設(shè)計(jì)方,除了要滿足產(chǎn)品滿足市場的需求之外, 必須要把在這個平臺上的產(chǎn)品開發(fā)體驗(yàn)考慮在內(nèi),所以說它對應(yīng)用開發(fā)者必須具備良好的編程體驗(yàn),例如開發(fā)一個APP還要讓開發(fā)者配置一大堆腳本,背熟一大堆命令,這種繁瑣啰嗦的體驗(yàn)就非常不好了。對應(yīng)用程序來說要跟操作系統(tǒng)無關(guān),這樣才可能降低維護(hù)跟運(yùn)維的成本,而對技術(shù)平臺本身的維護(hù)方面,它應(yīng)該盡可能的減少需要移植的代碼,結(jié)合這幾點(diǎn)“i51”需要有跨平臺能力。i51的跨平臺思路很簡單,我們在系統(tǒng)底層搭起了與系統(tǒng)無關(guān)的抽象層,它的實(shí)現(xiàn)是一百多個API,上層只對這些API編程,自然就做到了平臺無關(guān)了。原理是很簡單的,但要從多個具體系統(tǒng)中設(shè)計(jì)出這一百多個抽象的API是件很有挑戰(zhàn)性的工作,就這些抽象接口設(shè)計(jì)我們大概反反復(fù)復(fù)做了2個多月才最終定型。我們印象最深的是MMI模塊的音頻播放部分,這類接口在不同的系統(tǒng)中差異都非常大,比如有些是異步的,有些是同步的,并且參數(shù)各有差異。雖然就是設(shè)計(jì)若干接口的事情,可直到i51都已經(jīng)上線半年后我們才算有了一個完美的聲音播放方案,跨平臺的設(shè)計(jì)難度就在這。
概括來說“i51”由兩部分組成,(一)為了實(shí)現(xiàn)跨平臺“APF”,我們在操作系統(tǒng)中內(nèi)置了一個中間件,它的主要功能是加載跟管理上層的“i51應(yīng)用程序”,它的核心是“動態(tài)加載技術(shù)”,并且中間件本身也是基于抽象接口開發(fā)的,因此它也具備跨平臺能力,這樣我們的移植工作變得非常簡單了。(二)“APF”是一種框架,或者說是應(yīng)用程序開發(fā)所要遵循的規(guī)范,它的實(shí)現(xiàn)并沒有很多實(shí)質(zhì)性內(nèi)容,無非就是定義“i51中間件”與“i51應(yīng)用程序”之間如何交互,如何傳遞消息等等。定義好“APF”后,我們在此基礎(chǔ)上開發(fā)了大量 “i51 Software Developing Kit”(俗稱SDK),它可以幫助開發(fā)者更方便的開發(fā)產(chǎn)品,比如為了讓i51的應(yīng)用程序具備更好的表現(xiàn)力,我們開發(fā)了自己的物理引擎跟粒子系統(tǒng),它的表現(xiàn)力滿足了我們在ARMv7&ARMv9上的需要。
引用Jelo的話:
接下來我們從架構(gòu)的角度系統(tǒng)地做一下解讀,如上圖 “i51”是在底層操作系統(tǒng)基礎(chǔ)上搭建起來的一個中間件平臺,它為應(yīng)用層提供了統(tǒng)一的、系統(tǒng)無關(guān)的編程接口,它的跨平臺性可以讓應(yīng)用團(tuán)隊(duì)無需關(guān)心操作系統(tǒng)的差異,較好地控制了各個環(huán)節(jié)的復(fù)雜度,因此“i51”應(yīng)用程序可以運(yùn)行在所有具有“i51”中間件的設(shè)備環(huán)境中。
i51體系結(jié)構(gòu)其架構(gòu)由“Dynamic Components Layer”、“Static Components Layer”構(gòu)成,動態(tài)層中的“對象”具備高度靈活特性,應(yīng)用程序的發(fā)布不受操作系統(tǒng)束縛,并且相關(guān)編程框架為應(yīng)用開發(fā)提供了統(tǒng)一且平臺無關(guān)的編程接口。而,靜態(tài)層與動態(tài)層的特點(diǎn)正相反,它的作用是屏蔽操作系統(tǒng)特征,并為動態(tài)層提供最基本的運(yùn)行時機(jī)制,因?yàn)檫@一部分較少變化,所以它的實(shí)現(xiàn)通常作為內(nèi)置代碼嵌入到設(shè)備的ROM之中。
§ Applications
i51體系的動態(tài)層只有一種應(yīng)用程序,它的實(shí)現(xiàn)受“i51編程框架”約束。應(yīng)用間處于平級關(guān)系,所謂平級是指應(yīng)用間相互獨(dú)立、不存在依賴關(guān)系。另外, 應(yīng)用程序之間的交互基于靜態(tài)層提供的“消息機(jī)制”完成,整個交互過程受靜態(tài)層監(jiān)管。
§ Dynamic Library
“動態(tài)庫”是操作系統(tǒng)中非常核心的技術(shù),在i51中同樣將其作為了體系結(jié)構(gòu)的核心特性,它的價(jià)值主要體現(xiàn)在應(yīng)用層,基于動態(tài)庫,應(yīng)用程序生命周期的三個階段:開發(fā)、部署、維護(hù)都是完全可重構(gòu)的,例如按照業(yè)務(wù)邏輯將應(yīng)用程序劃分多個動態(tài)庫,當(dāng)業(yè)務(wù)發(fā)生變化時只需要替換相關(guān)動態(tài)庫即可,而在傳統(tǒng)的靜態(tài)庫做法中,一旦業(yè)務(wù)邏輯發(fā)生了變化整個應(yīng)用必須要重新經(jīng)過“開發(fā)”、“部署”、“維護(hù)”三個階段方可完成業(yè)務(wù)更換。
§ Static Applications
“靜態(tài)應(yīng)用”簡稱SAP是位于靜態(tài)層的一組應(yīng)用程序,因?yàn)樗鷌51體系的具體實(shí)現(xiàn)有關(guān),因此其功能特征在體系結(jié)構(gòu)中并不作限制,開發(fā)者可根據(jù)不同需求定義這組應(yīng)用的特征。 § Kernel “內(nèi)核”負(fù)責(zé)應(yīng)用管理、進(jìn)程管理、資源管理、進(jìn)程通信等工作。嚴(yán)格來說它也是一個“靜態(tài)應(yīng)用”,區(qū)別在于它與業(yè)務(wù)邏輯無關(guān)可作為一個體系結(jié)構(gòu)中的標(biāo)準(zhǔn)化部件,如果將其泛化將很難保證體系結(jié)構(gòu)在機(jī)制層面的完整,因此它的功能特征必須標(biāo)準(zhǔn)化,開發(fā)者需要以此為依據(jù)嚴(yán)格實(shí)施。
§ SL-API 全稱是“Service Logical API”,一組與業(yè)務(wù)邏輯有關(guān)的接口集合,該接口集同時對靜態(tài)層以及動態(tài)層開放,但是其功能特征在體系中同樣不做任何約束,開發(fā)者可以根據(jù)不同需求實(shí)現(xiàn)。
§Adapter
“適配器”為上層屏蔽了操作系統(tǒng)特征,提高架構(gòu)整體的維護(hù)性,其接口定義、功能特征作為體系標(biāo)準(zhǔn)化內(nèi)容實(shí)施。
※運(yùn)行時性能
基于內(nèi)存快照技術(shù),使應(yīng)用間可無縫切換,并支持多應(yīng)用同時執(zhí)行?;趧討B(tài)庫技術(shù),一個應(yīng)用可以有多個動態(tài)庫組成,而動態(tài)庫可以由應(yīng)用任意裝卸,簡化了應(yīng)用間的關(guān)系。
※維護(hù)性能
所有業(yè)務(wù)邏輯屏蔽在動態(tài)層,由開發(fā)者通過應(yīng)用程序或動態(tài)庫實(shí)現(xiàn)。動態(tài)庫基于適配器實(shí)現(xiàn),使應(yīng)用程序開發(fā)框架具有平臺無關(guān)性。
若干技術(shù)創(chuàng)新
1. 多任務(wù),同一時段可同時加載多個應(yīng)用程序;
* 王全偉([email protected]),熱愛開源,零八年至今發(fā)起并獨(dú)立完成析碼編譯器核心的開發(fā),并于同年創(chuàng)立突殼開源社區(qū)(TOK.CC),至今已完成正則表達(dá)式引擎(REEC)、arm-elf動態(tài)鏈接器、i51、ELL、Hello3D等開源項(xiàng)目。技術(shù)完美主義者,現(xiàn)任深圳豆游網(wǎng)絡(luò)首席技術(shù)官。
開發(fā)團(tuán)隊(duì)
* 王全偉,負(fù)責(zé)“Kernel”的開發(fā),QQ:66970490;
* 顏天顯,負(fù)責(zé)“MTK Adapter”的開發(fā),QQ:1093235028;
* 吳平,負(fù)責(zé)“MTK Adapter”的開發(fā),QQ:273357112;
* 吳練,負(fù)責(zé)“SPRD Adapter”的開發(fā),QQ:471648306;
* 向榮,負(fù)責(zé)“SPRD Adapter”的開發(fā),QQ:502495295;
* 蘇言華,負(fù)責(zé)“SPRD Adapter”的開發(fā),QQ:370532256;
* 史龍龍,負(fù)責(zé)“MStar Adapter”的開發(fā),QQ:410886148;
* 林可,負(fù)責(zé)“MStar Adapter”的開發(fā),QQ:112140555;
* 田敏,負(fù)責(zé)“MStar Adapter”的開發(fā),QQ:470373759;
* OSCA,負(fù)責(zé)“MStar Adapter”的開發(fā),QQ:45594280;
* 李雪峰,負(fù)責(zé)“i51 SDK”的開發(fā),QQ:273642539;
* 葉盼,負(fù)責(zé)“i51 SDK”的開發(fā),QQ:450763942;
瀏覽
24“i51”就是在這個技術(shù)背景下產(chǎn)生的,所謂讓“用戶可以任意安裝刪除應(yīng)用程序”是一種很產(chǎn)品化的描述。作為一個技術(shù)平臺的設(shè)計(jì)方,除了要滿足產(chǎn)品滿足市場的需求之外, 必須要把在這個平臺上的產(chǎn)品開發(fā)體驗(yàn)考慮在內(nèi),所以說它對應(yīng)用開發(fā)者必須具備良好的編程體驗(yàn),例如開發(fā)一個APP還要讓開發(fā)者配置一大堆腳本,背熟一大堆命令,這種繁瑣啰嗦的體驗(yàn)就非常不好了。對應(yīng)用程序來說要跟操作系統(tǒng)無關(guān),這樣才可能降低維護(hù)跟運(yùn)維的成本,而對技術(shù)平臺本身的維護(hù)方面,它應(yīng)該盡可能的減少需要移植的代碼,結(jié)合這幾點(diǎn)“i51”需要有跨平臺能力。i51的跨平臺思路很簡單,我們在系統(tǒng)底層搭起了與系統(tǒng)無關(guān)的抽象層,它的實(shí)現(xiàn)是一百多個API,上層只對這些API編程,自然就做到了平臺無關(guān)了。原理是很簡單的,但要從多個具體系統(tǒng)中設(shè)計(jì)出這一百多個抽象的API是件很有挑戰(zhàn)性的工作,就這些抽象接口設(shè)計(jì)我們大概反反復(fù)復(fù)做了2個多月才最終定型。我們印象最深的是MMI模塊的音頻播放部分,這類接口在不同的系統(tǒng)中差異都非常大,比如有些是異步的,有些是同步的,并且參數(shù)各有差異。雖然就是設(shè)計(jì)若干接口的事情,可直到i51都已經(jīng)上線半年后我們才算有了一個完美的聲音播放方案,跨平臺的設(shè)計(jì)難度就在這。
概括來說“i51”由兩部分組成,(一)為了實(shí)現(xiàn)跨平臺“APF”,我們在操作系統(tǒng)中內(nèi)置了一個中間件,它的主要功能是加載跟管理上層的“i51應(yīng)用程序”,它的核心是“動態(tài)加載技術(shù)”,并且中間件本身也是基于抽象接口開發(fā)的,因此它也具備跨平臺能力,這樣我們的移植工作變得非常簡單了。(二)“APF”是一種框架,或者說是應(yīng)用程序開發(fā)所要遵循的規(guī)范,它的實(shí)現(xiàn)并沒有很多實(shí)質(zhì)性內(nèi)容,無非就是定義“i51中間件”與“i51應(yīng)用程序”之間如何交互,如何傳遞消息等等。定義好“APF”后,我們在此基礎(chǔ)上開發(fā)了大量 “i51 Software Developing Kit”(俗稱SDK),它可以幫助開發(fā)者更方便的開發(fā)產(chǎn)品,比如為了讓i51的應(yīng)用程序具備更好的表現(xiàn)力,我們開發(fā)了自己的物理引擎跟粒子系統(tǒng),它的表現(xiàn)力滿足了我們在ARMv7&ARMv9上的需要。
引用Jelo的話:
“i51是一整套解決方案,下到應(yīng)用加載、卸載、消息機(jī)制、應(yīng)用程序管理。上到SDK、模擬器、編程框架、各類工具、運(yùn)行庫應(yīng)有盡有。這個i51是我們公司的核心技術(shù),現(xiàn)在這個技術(shù)用不上了,我就申請拿出來開源了,老大一口就同意了,很感動。好處是,這是個商用技術(shù),可靠性完全靠譜,這個技術(shù)還申請了廣東省科技局的創(chuàng)新基金作為創(chuàng)新鼓勵。
對了,我們現(xiàn)在主要用在了MTK、Mstar、展訊、互芯上做了移植,性能靠譜。系統(tǒng)資源普遍在800KB左右,ROM只用35 KB。CPU是ARM7、ARM9居多?!?
接下來我們從架構(gòu)的角度系統(tǒng)地做一下解讀,如上圖 “i51”是在底層操作系統(tǒng)基礎(chǔ)上搭建起來的一個中間件平臺,它為應(yīng)用層提供了統(tǒng)一的、系統(tǒng)無關(guān)的編程接口,它的跨平臺性可以讓應(yīng)用團(tuán)隊(duì)無需關(guān)心操作系統(tǒng)的差異,較好地控制了各個環(huán)節(jié)的復(fù)雜度,因此“i51”應(yīng)用程序可以運(yùn)行在所有具有“i51”中間件的設(shè)備環(huán)境中。
i51體系結(jié)構(gòu)其架構(gòu)由“Dynamic Components Layer”、“Static Components Layer”構(gòu)成,動態(tài)層中的“對象”具備高度靈活特性,應(yīng)用程序的發(fā)布不受操作系統(tǒng)束縛,并且相關(guān)編程框架為應(yīng)用開發(fā)提供了統(tǒng)一且平臺無關(guān)的編程接口。而,靜態(tài)層與動態(tài)層的特點(diǎn)正相反,它的作用是屏蔽操作系統(tǒng)特征,并為動態(tài)層提供最基本的運(yùn)行時機(jī)制,因?yàn)檫@一部分較少變化,所以它的實(shí)現(xiàn)通常作為內(nèi)置代碼嵌入到設(shè)備的ROM之中。
§ Applications
i51體系的動態(tài)層只有一種應(yīng)用程序,它的實(shí)現(xiàn)受“i51編程框架”約束。應(yīng)用間處于平級關(guān)系,所謂平級是指應(yīng)用間相互獨(dú)立、不存在依賴關(guān)系。另外, 應(yīng)用程序之間的交互基于靜態(tài)層提供的“消息機(jī)制”完成,整個交互過程受靜態(tài)層監(jiān)管。
§ Dynamic Library
“動態(tài)庫”是操作系統(tǒng)中非常核心的技術(shù),在i51中同樣將其作為了體系結(jié)構(gòu)的核心特性,它的價(jià)值主要體現(xiàn)在應(yīng)用層,基于動態(tài)庫,應(yīng)用程序生命周期的三個階段:開發(fā)、部署、維護(hù)都是完全可重構(gòu)的,例如按照業(yè)務(wù)邏輯將應(yīng)用程序劃分多個動態(tài)庫,當(dāng)業(yè)務(wù)發(fā)生變化時只需要替換相關(guān)動態(tài)庫即可,而在傳統(tǒng)的靜態(tài)庫做法中,一旦業(yè)務(wù)邏輯發(fā)生了變化整個應(yīng)用必須要重新經(jīng)過“開發(fā)”、“部署”、“維護(hù)”三個階段方可完成業(yè)務(wù)更換。
§ Static Applications
“靜態(tài)應(yīng)用”簡稱SAP是位于靜態(tài)層的一組應(yīng)用程序,因?yàn)樗鷌51體系的具體實(shí)現(xiàn)有關(guān),因此其功能特征在體系結(jié)構(gòu)中并不作限制,開發(fā)者可根據(jù)不同需求定義這組應(yīng)用的特征。 § Kernel “內(nèi)核”負(fù)責(zé)應(yīng)用管理、進(jìn)程管理、資源管理、進(jìn)程通信等工作。嚴(yán)格來說它也是一個“靜態(tài)應(yīng)用”,區(qū)別在于它與業(yè)務(wù)邏輯無關(guān)可作為一個體系結(jié)構(gòu)中的標(biāo)準(zhǔn)化部件,如果將其泛化將很難保證體系結(jié)構(gòu)在機(jī)制層面的完整,因此它的功能特征必須標(biāo)準(zhǔn)化,開發(fā)者需要以此為依據(jù)嚴(yán)格實(shí)施。
§ SL-API 全稱是“Service Logical API”,一組與業(yè)務(wù)邏輯有關(guān)的接口集合,該接口集同時對靜態(tài)層以及動態(tài)層開放,但是其功能特征在體系中同樣不做任何約束,開發(fā)者可以根據(jù)不同需求實(shí)現(xiàn)。
§Adapter
“適配器”為上層屏蔽了操作系統(tǒng)特征,提高架構(gòu)整體的維護(hù)性,其接口定義、功能特征作為體系標(biāo)準(zhǔn)化內(nèi)容實(shí)施。
※運(yùn)行時性能
基于內(nèi)存快照技術(shù),使應(yīng)用間可無縫切換,并支持多應(yīng)用同時執(zhí)行?;趧討B(tài)庫技術(shù),一個應(yīng)用可以有多個動態(tài)庫組成,而動態(tài)庫可以由應(yīng)用任意裝卸,簡化了應(yīng)用間的關(guān)系。
※維護(hù)性能
所有業(yè)務(wù)邏輯屏蔽在動態(tài)層,由開發(fā)者通過應(yīng)用程序或動態(tài)庫實(shí)現(xiàn)。動態(tài)庫基于適配器實(shí)現(xiàn),使應(yīng)用程序開發(fā)框架具有平臺無關(guān)性。
若干技術(shù)創(chuàng)新
1. 多任務(wù),同一時段可同時加載多個應(yīng)用程序;
- 多應(yīng)用可以用來做什么呢?舉個例子,比如愛瘋的“推送”機(jī)制,或PC的各種“彈窗”,無論用戶在做什么系統(tǒng)時不時地總會有一個“對話框”告知用戶世界又發(fā)生了什么,而基于“i51”的多應(yīng)用機(jī)制開發(fā)者也可以走得更遠(yuǎn)。
- 動態(tài)庫的好處實(shí)在是太多了,在產(chǎn)品設(shè)計(jì)、進(jìn)度管理、架構(gòu)設(shè)計(jì)、代碼實(shí)現(xiàn)各個階段都有體現(xiàn)。
- 對產(chǎn)品設(shè)計(jì)來說,可以把軟件“界面”或游戲 “地圖”按照不同的動態(tài)庫實(shí)現(xiàn),有效節(jié)省內(nèi)存、對于后期的升級來說也更具靈活性。
- 對進(jìn)度管理來說,動態(tài)庫更直觀、容易感知。
- 對架構(gòu)設(shè)計(jì)來說,動態(tài)庫可以簡化系統(tǒng)復(fù)雜度,架構(gòu)中的“模塊”基于動態(tài)庫實(shí)現(xiàn),模塊之間的交互僅通過接口完成。
- 對代碼實(shí)現(xiàn)來說,模塊基于動態(tài)庫實(shí)現(xiàn),開發(fā)者可以把所有注意力放在自己的模塊上,涉及到模塊間交互的時候只需要調(diào)用彼此的接口。
- 對產(chǎn)品開發(fā)的好處是,團(tuán)隊(duì)可以只關(guān)心一個“代碼版本”。
- 對產(chǎn)品運(yùn)營來說,可以只關(guān)注一個“平臺”。
- 總之,省時、省力、省錢、高效。
- 有多快速?以“HelloWorld”為例,新建一個“Win32 Console”工程到編譯生成“執(zhí)行文件”需要40秒。而新建一個“i51”工程到編譯生成“執(zhí)行文件”只需要20秒。整個開發(fā)過程完全可視化操作,“i51”可視化編程不需要人工敲打各種不友好的“腳本”、“命令”。
- 專為Soft-Rending設(shè)計(jì)的游戲引擎,以PNG為例,i51圖像的繪制效率是PNG的幾十倍。以一張帶透明色的320x480圖片為例,用PNG 繪制需要十五萬三千六百次數(shù)值比較運(yùn)算,大約七萬六千八百次賦值運(yùn)算。而“i51”的圖像技術(shù),不需要一次像素比較運(yùn)算,賦值運(yùn)算大約也僅有一千六百次。在內(nèi)存開銷方面,一張320x480的圖,PNG解碼后需要300KB內(nèi)存存儲,而i51的圖像解碼后只需要150KB。
- 覆蓋“文件系統(tǒng)”、“內(nèi)存系統(tǒng)”、“短信”、“電話”、“網(wǎng)絡(luò)”、“輸入法”、“Benchmark”,提高測試人員的工作效率。
- 可偵測“內(nèi)存溢出”、“內(nèi)存泄露”,為開發(fā)者解決C語言那令人糾結(jié)的內(nèi)存調(diào)試問題。
- 可永久記錄應(yīng)用程序使用的內(nèi)存數(shù)據(jù),等下次啟動時會被“i51”自動恢復(fù),對應(yīng)用程序來說感覺就像沒退出過一樣,斷電關(guān)機(jī)無妨。
- Only 35 KB ROM?。?!
* 王全偉([email protected]),熱愛開源,零八年至今發(fā)起并獨(dú)立完成析碼編譯器核心的開發(fā),并于同年創(chuàng)立突殼開源社區(qū)(TOK.CC),至今已完成正則表達(dá)式引擎(REEC)、arm-elf動態(tài)鏈接器、i51、ELL、Hello3D等開源項(xiàng)目。技術(shù)完美主義者,現(xiàn)任深圳豆游網(wǎng)絡(luò)首席技術(shù)官。
開發(fā)團(tuán)隊(duì)
* 王全偉,負(fù)責(zé)“Kernel”的開發(fā),QQ:66970490;
* 顏天顯,負(fù)責(zé)“MTK Adapter”的開發(fā),QQ:1093235028;
* 吳平,負(fù)責(zé)“MTK Adapter”的開發(fā),QQ:273357112;
* 吳練,負(fù)責(zé)“SPRD Adapter”的開發(fā),QQ:471648306;
* 向榮,負(fù)責(zé)“SPRD Adapter”的開發(fā),QQ:502495295;
* 蘇言華,負(fù)責(zé)“SPRD Adapter”的開發(fā),QQ:370532256;
* 史龍龍,負(fù)責(zé)“MStar Adapter”的開發(fā),QQ:410886148;
* 林可,負(fù)責(zé)“MStar Adapter”的開發(fā),QQ:112140555;
* 田敏,負(fù)責(zé)“MStar Adapter”的開發(fā),QQ:470373759;
* OSCA,負(fù)責(zé)“MStar Adapter”的開發(fā),QQ:45594280;
* 李雪峰,負(fù)責(zé)“i51 SDK”的開發(fā),QQ:273642539;
* 葉盼,負(fù)責(zé)“i51 SDK”的開發(fā),QQ:450763942;
評論
圖片
表情
