趣文网 > 作文大全

Android studio使用系统源码的AIDL接口

2020-12-02 04:25:01
相关推荐

前言

最近使用Android studio开发的时候,需要用到系统类,导入jar包可以解决该问题,但由于该应用需要做到平台兼容,导入jar包的方式会显得APP很臃肿。最后考虑使用AIDL方式,APP端作为客户端,系统源码实现服务端。

正文

AIDL是一个缩写,全称是Android Interface Definition Language(Android接口定义语言)。主要用于进程间通信。下面详细说说服务端和客户端该如何创建AIDL,并让两个进程进行通讯。

服务端

这里服务端是在系统源码中实现,网上查找资料,都说先创建一个AIDL文件,然后在Android.mk文件中添加AIDL文件的编译,就会生成一个对应的Java文件。折腾了很久,都没生出一个Java文件,坑。如果没有Java文件生成,则自己创建一个即可,下面说说操作。

创建AIDL文件

AIDL接口,需要有一个AIDL文件进行描述说明,说明服务端支持什么样的接口。AIDL的接口样式如下:

这里的AIDL文件,引用的包名为服务端所在的进程包名。

Android.mk文件中引用AIDL文件

Android.mk文件中为整个进程的编译规则,这里添加了AIDL文件后,需要将AIDL文件添加进去,否则会编译失败,增加如下语句即可:

LOCAL_SRC_FILES += $(call all-Iaidl-files-under, src)

这里表示编译AIDL文件。

创建AIDL相应的Java文件

既然不能生成AIDL相应的Java文件,那我们就要自己去创建Java文件。Java文件的创建内容如下:

Androidmanifest.xml注册服务

添加服务端的AIDL和Java文件后,还需要注册服务,在Androidmanifest.xml文件中注册如下:

到这里,服务端的工作就完成了。

客户端

客户端是用AS开发的,所以我们需要在AS中也创建一个AIDL文件,不然AS没接口可调用。这里直接将服务端的AIDL文件拷贝过来即可。这里要特别注意的是,AIDL文件的路径。如果路径不匹配,AS就会编译错误。这里说的路径匹配,是指AIDL文件中,AIDL文件所在的文件路径要符合AIDL文件引用的包名。这里结合本例说明。先放上AIDL文件的路径:

as_project/src/main/aidl/com/xxx/yyy/ITestService.aidl

首先先在main目录下,创建一个aidl的文件夹,接下来的目录级别就是跟随着AIDL文件中的包名来了:

packagecom.xxx.yyy;

客户端绑定服务

拷贝AIDL文件后,接下来就是客户端绑定服务,使用服务端的接口。先贴上代码:

init方法放在activity的onCreate方法中调用即可。

这里需要注意的地方有两点:

1.bindservice的时候,传入的intent需要setpackage,这个package名为服务端的包名,否则bindservice的时候会返回false。

2.bindservice成功后,onServiceConnected不是马上回调,会延迟,所以绑定成功后,需要等待onServiceConnected成功回调后,再去调用服务端的接口,否则你会看到报空异常。

服务端方法调用

AIDL的实现到此结束。

阅读剩余内容
网友评论
显示评论内容(7) 收起评论内容
  1. 2023-02-14 08:23专属sky°[湖南省网友]IP:3407789051
    Studio的便利让我更快速地接入系统源码的AIDL接口。
    顶0踩0
  2. 2022-08-25 12:58天使也邪恶[上海市网友]IP:737701814
    这个功能真的省了我不少时间,Android
    顶4踩0
  3. 2022-03-05 17:34含笑的紫莲[云南省网友]IP:3406350130
    Studio的这个功能真是太实用了,让我能够更加灵活地处理系统源码的AIDL接口。
    顶6踩0
  4. 2021-09-13 22:09井井[重庆市网友]IP:3397026845
    @部落酋长Android
    顶0踩0
  5. 2021-03-25 02:45部落酋长[湖南省网友]IP:3405842155
    这是我一直期待的功能,能够更轻松地使用系统源码的AIDL接口,太方便了!
    顶42踩0
  6. 2020-10-03 07:20太爱风[湖北省网友]IP:3400202778
    Studio让使用系统源码的AIDL接口变得如此方便快捷!
    顶0踩0
  7. 2020-04-13 11:56Katty[四川省网友]IP:3754606235
    太棒了,Android
    顶29踩0
相关内容
延伸阅读
小编推荐

大家都在看

小学作文300字 制作文件 作文框架 月光作文 粽子的作文 苦的作文 我的同桌的作文 手工作文 漂流作文 公园英语作文 青春作文结尾 北京英语作文 牡丹作文 小学作文400字 爱作文500字 菜园作文 成长作文题目 小猫咪作文 作文五十字 竹作文 泉州作文 妈妈作文300字 作文素材议论文 作文模版 挑战 的作文 优秀作文小学 作文儿童节 作文在线 在线作文 笑的作文