![407e3a84b232f0329313a8a7cf60ed71.gif](https://img-blog.csdnimg.cn/img_convert/407e3a84b232f0329313a8a7cf60ed71.gif)
点击上方蓝字关注我哦~
经过驱动、HAL、JNI、SERVICE一层一层精心浇筑,新增的LED设备调用接口终于可以被APP调用了。举个不恰当的比喻,就好像建造一座海洋石油钻井平台,从海底一段一段钢架、油管连接起来,最终在海面上建造出了一个平台(面向应用层的接口),从平台的接口(油管)就可以调用海底的石油了。现在就剩下制作一个APP去调用这个接口啦。
01
创建TestLedMangager.jar
由于led的这个接口是我们自己建立的,原来的安卓并没有,在as的工程中虽然导入了对应安卓版本的sdk库,但是库里并没有我们定义的这些接口函数。为了使得工程编译不报错,我们需要创建一个空的TestLedMangager.jar,内部的函数名与framework中的TestLedManager.java完全一致,但是不需要实现。APK工程编译时,调用jar中的函数,实际在设备上运行时,调用的是TestLedManager.java内的同名真实函数。
(1)创建一个JavaLibrary。New->New Module->选择Java Library
![d0420eb97a9676a9739dc057f131bc6a.png](https://img-blog.csdnimg.cn/img_convert/d0420eb97a9676a9739dc057f131bc6a.png)
(2)包名填 android.app,LibraryName:TestLedManager,Java class name: TestLedManager把安卓工程里面的函数名都拷过来,函数内容留空。
![f0348109f326b833d86ee477f033b132.png](https://img-blog.csdnimg.cn/img_convert/f0348109f326b833d86ee477f033b132.png)
TestLedManager.java的内容如下:
package android.app;public class TestLedManager {public TestLedManager() {}public void SetLed1(int on) {}public void SetLed2(int delay) {}}
(3) 编译生成TestLedManager.jar
![92a4248eaeb984969c5cd4a20698c9b1.png](https://img-blog.csdnimg.cn/img_convert/92a4248eaeb984969c5cd4a20698c9b1.png)
生成的路径为APK工程/TestLedManager/build/libs。
![f07a292077daf61313866371072fefb1.png](https://img-blog.csdnimg.cn/img_convert/f07a292077daf61313866371072fefb1.png)
02
导入jar并调用接口
(1)导入jar。将/TestLedManager/.jar拷贝到需要使用此接口的apk工程的lib目录下。
(2)As界面左侧的在libs下面TestLedManager.jar,右键选择AddAsLibrary
![bf65bd63b1f2f8970317cac246c4efce.png](https://img-blog.csdnimg.cn/img_convert/bf65bd63b1f2f8970317cac246c4efce.png)
![faad1b7032150b8fc6b9e12484baede9.png](https://img-blog.csdnimg.cn/img_convert/faad1b7032150b8fc6b9e12484baede9.png)
(3) 调用接口
创建EditText和两个按钮,分别调用两个led的操作接口。
![8216a90d8248a7a4b32ba5476e378553.png](https://img-blog.csdnimg.cn/img_convert/8216a90d8248a7a4b32ba5476e378553.png)
TestLedManager tlm;tlm = (TestLedManager)mContext.getSystemService("TestLed");tlm.SetLed1(1);//led1开与关tlm.SetLed2(freq);//led2设置闪烁频率
至此,我们通过一个简单的led灯控制demo,描述了安卓的层次,以及他们之间的关联。安卓就是由无数条这样由底层到上层的线,组合成了一个广阔的开放式平台,应用开发者在这个平台上开发出丰富多彩的APP。
各个层面的开发者,只需要大致了解层次的构成后,专注于本层次的开发即可。例如驱动开发工程质量,关于kernel层的驱动开发以及与HAL层的接口,framework系统开发工程师详细的了解framework中的各个组件,同时需要了解HAL的调用以及对应用层的接口,APP开发工程师熟悉安卓提供的sdk,并开发出最终面向用户的应用。
除此之外进阶的开发者还要有能力将一条线从底层到上层捋出来。
/ The End /
本文系嵌入式案例Show原创出品,未经许可,请勿转载。
![64564266d7f492c61f5b1affece6d0c2.gif](https://img-blog.csdnimg.cn/img_convert/64564266d7f492c61f5b1affece6d0c2.gif)
扫码关注我们
看更多嵌入式案例
![a6d72c76e0d48efba635cc5f5d28b13f.png](https://img-blog.csdnimg.cn/img_convert/a6d72c76e0d48efba635cc5f5d28b13f.png)
喜欢本篇内容请给我们点个在看
![17229cf485ff3e13beb12ff9015f86e8.png](https://img-blog.csdnimg.cn/img_convert/17229cf485ff3e13beb12ff9015f86e8.png)