在Android源码中编译aidl

为什么要这么做?
1、因为项目中一些功能需要调用系统源码中的一些接口,上层无法访问。所以想一些需要调用系统接口的方法用源码编译,然后使用aidl暴露出接口,供上层调用。

准备工作:
1、应用端写好 aidl demo,暂且我们称之为 Server 和 Client,编译安装测试(demo 中将要调用系统接口的代码注释掉)。
2、编译通过后,Android_studio 中就会生成 aidl 文件对应的 .java 文件。
在Android源码中编译aidl_第1张图片
3、然后将 .java 文件放到 .aidl 同一文件夹下,删除 .aidl 文件。

4、修改 as 工程变成 elipse 文件结构(似乎不明白,看下图)。
这是 eclipse 的工程目录结构:
在Android源码中编译aidl_第2张图片
大家找一个 as 的工程目录结构做一个对比,找出路径不同的地方。
然后复制源码中 package/apps/ 下边的任意一个工程,作为修改模板,进行修改。

5、源码编译需要一个Android.mk 文件:网上教程非常多,我们着重介绍 aidl 相关的信息就好了。
给一个模板:


LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional
#包含src目录下的所有java文件
LOCAL_SRC_FILES := $(call all-java-files-under, src)
#有些教程中说需要在此处添加 aidl 文件,这个估计是为了让源码编译生成 .java 文件。
#我添加之后报错了,不添加,编译成功并且运行正常
               #src/com/ors/server/IUserManagerInterface.aidl \
               #src/com/ors/server/User.aidl
#使用系统签名
LOCAL_CERTIFICATE := platform
#工程名称
LOCAL_PACKAGE_NAME := Server

include $(BUILD_PACKAGE)

# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))

完成。

你可能感兴趣的:(aidl,源码编译aidl工程,android系统开发)