在framework.jar和services.jar中增加新类

增加新类到framework.jar中

如果是在原有的路径下增加新的类,没啥说的,直接增加就行,除了需要将aidl文件增加到framework/base下的Android.mk外,其它啥都不需要改。这里说的是新建一个自己的功能文件夹,如我创建了在framework/base下创建了一个redex,一般情况下我还会在这个文件夹下创建一个java文件夹,这样写的java文件会放在这个文件夹,如果还有native代码,会再创建一个jni文件夹。

将编写好的java文件放在刚才创建的redex/java文件夹下(按照java的规范,下面还要创建和包名一致的文件夹),java文件中不需要再编写Android.mk文件,因为我们是打算将这个java文件编译到framework,jar中。
然后打开android源码顶级路径下的build/core/pathmap.mk文件,在里面搜索”FRAMEWORKS_BASE_SUBDIRS”,然后将刚才增加的目录添加进去:

FRAMEWORKS_BASE_SUBDIRS := \
    $(addsuffix /java, \
        core \
        graphics \
        location \
        media \
        media/mca/effect \
        media/mca/filterfw \
        media/mca/filterpacks \
        drm \
        opengl \
        sax \
        telecomm \
        telephony \
        wifi \
        keystore \
        rs \
        redex
     )

然后就可以运行类似mmm framework/base的命令编译出framework.jar了。

添加新services到service.jar中

同样,如果是在framework/base/services下的已有目录下增加新类,只管增加好了,其他的不需要改,这里说的是增加一个新文件夹。

如在framework/services下增加一个xpose文件夹,同样的,在该文件夹下建立一个java文件夹。

不同于framework.jar,新增加的services的文件还需要编写Android.mk,另外新加的service常常还会用到/framework/service/core下的一些类,所以常常需要将servuces.core的类依赖过来,Android.mk编写如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := services.xpose

LOCAL_SRC_FILES += \
      $(call all-java-files-under,java)

LOCAL_JAVA_LIBRARIES := services.core

include $(BUILD_STATIC_JAVA_LIBRARY)

然后就可以通过mmm framework/services生成services.jar。

编写自己的系统服务时,最好继承SystemService,该类中有两个方法:publishBinderService和publishLocalService。

publishBinderService会调用ServiceManager.addService()方法,把你的systemservice发布出去,但是如果selinux打开了,还需要更改sepolicy文件,否则是发布不出去的。

在external/sepolicy/service.te中定义自己的service类型(可以模仿人家的例子,更多的细节参阅有关selinux的资料),然后在编辑external/sepolicy/service_contexts文件,将自己的服务名追加进去,注意第一列是自己要对外发布的服务名,也就是publishBinderService函数的第一个参数,要保证完全一致。

publishLocalService是给同一个进程的其它类使用的,可以对其它类暴露一些内部的接口,供其它类直接调用,而不需要走binder机制。使用方法搜索“LocalServices.getService”,源码中有很多例子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值