新增LED設(shè)備--從上層到底層理解安卓架構(gòu)之APP篇
點擊上方藍(lán)字關(guān)注我哦~
經(jīng)過驅(qū)動、HAL、JNI、SERVICE一層一層精心澆筑,新增的LED設(shè)備調(diào)用接口終于可以被APP調(diào)用了。舉個不恰當(dāng)?shù)谋扔?,就好像建造一座海洋石油鉆井平臺,從海底一段一段鋼架、油管連接起來,最終在海面上建造出了一個平臺(面向應(yīng)用層的接口),從平臺的接口(油管)就可以調(diào)用海底的石油了。現(xiàn)在就剩下制作一個APP去調(diào)用這個接口啦。
01
創(chuàng)建TestLedMangager.jar
由于led的這個接口是我們自己建立的,原來的安卓并沒有,在as的工程中雖然導(dǎo)入了對應(yīng)安卓版本的sdk庫,但是庫里并沒有我們定義的這些接口函數(shù)。為了使得工程編譯不報錯,我們需要創(chuàng)建一個空的TestLedMangager.jar,內(nèi)部的函數(shù)名與framework中的TestLedManager.java完全一致,但是不需要實現(xiàn)。APK工程編譯時,調(diào)用jar中的函數(shù),實際在設(shè)備上運行時,調(diào)用的是TestLedManager.java內(nèi)的同名真實函數(shù)。
(1)創(chuàng)建一個JavaLibrary。New->New Module->選擇Java Library
(2)包名填 android.app,LibraryName:TestLedManager,Java class name: TestLedManager把安卓工程里面的函數(shù)名都拷過來,函數(shù)內(nèi)容留空。
TestLedManager.java的內(nèi)容如下:
package android.app;public class TestLedManager {public TestLedManager() {}public void SetLed1(int on) {}public void SetLed2(int delay) {}}
(3) 編譯生成TestLedManager.jar
生成的路徑為APK工程/TestLedManager/build/libs。
02
導(dǎo)入jar并調(diào)用接口
(1)導(dǎo)入jar。將/TestLedManager/.jar拷貝到需要使用此接口的apk工程的lib目錄下。
(2)As界面左側(cè)的在libs下面TestLedManager.jar,右鍵選擇AddAsLibrary
(3) 調(diào)用接口
創(chuàng)建EditText和兩個按鈕,分別調(diào)用兩個led的操作接口。
TestLedManager tlm;tlm = (TestLedManager)mContext.getSystemService("TestLed");tlm.SetLed1(1);//led1開與關(guān)tlm.SetLed2(freq);//led2設(shè)置閃爍頻率
至此,我們通過一個簡單的led燈控制demo,描述了安卓的層次,以及他們之間的關(guān)聯(lián)。安卓就是由無數(shù)條這樣由底層到上層的線,組合成了一個廣闊的開放式平臺,應(yīng)用開發(fā)者在這個平臺上開發(fā)出豐富多彩的APP。
各個層面的開發(fā)者,只需要大致了解層次的構(gòu)成后,專注于本層次的開發(fā)即可。例如驅(qū)動開發(fā)工程質(zhì)量,關(guān)于kernel層的驅(qū)動開發(fā)以及與HAL層的接口,framework系統(tǒng)開發(fā)工程師詳細(xì)的了解framework中的各個組件,同時需要了解HAL的調(diào)用以及對應(yīng)用層的接口,APP開發(fā)工程師熟悉安卓提供的sdk,并開發(fā)出最終面向用戶的應(yīng)用。
除此之外進(jìn)階的開發(fā)者還要有能力將一條線從底層到上層捋出來。
/ The End /
本文系嵌入式案例Show原創(chuàng)出品,未經(jīng)許可,請勿轉(zhuǎn)載。
掃碼關(guān)注我們
看更多嵌入式案例
喜歡本篇內(nèi)容請給我們點個在看
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!





