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