源码环境下添加系统Service流程

2023-11-02

关于系统服务的分析,以及如何实现添加系统服务,分析详细跳转链接:

Android系统服务(SystemService)简介


添加系统Service涉及的文件

修改文件:
Android.mk
api/current.txt
api/system-current.txt
api/test-current.txt
core/java/android/app/SystemServiceRegistry.java
core/java/android/content/Context.java
services/java/com/android/server/SystemServer.java

添加文件:
core/java/android/app/bingka/BingkaManager.java
core/java/android/app/bingka/Book.aidl
core/java/android/app/bingka/Book.java
core/java/android/app/bingka/IBingka.aidl
services/core/java/com/android/server/BingkaService.java

添加aidl文件后编译framework层,service,或者make update-api都提示没有aidl对应的java存在,一直编译不过。
处理方式如下:

  • 去除所有相关修改,编译framework层;
  • 重新添加相关修改,编译framework层,发现out目录下确实编译出了对应的java文件

添加后修改以上文件后,整编,烧录后手机不能正常启动,抓取log如下:

16263 16263 I SystemServer: StartBingkaService
16263 16263 D [BingkaService]:  init...
  321   321 E SELinux : avc:  denied  { add } for service=bingka pid=16263 uid=1000 scontext=u:r:system_server:s0 tcontext=u:object_r:default_android_service:s0 tclass=service_manager permissive=0
  321   321 E ServiceManager: add_service('bingka',3e) uid=1000 - PERMISSION DENIED
16263 16263 E System  : ******************************************
16263 16263 E System  : ************ Failure starting core service
16263 16263 E System  : java.lang.SecurityException
16263 16263 E System  :     at android.os.BinderProxy.transactNative(Native Method)
16263 16263 E System  :     at android.os.BinderProxy.transact(Binder.java:764)
16263 16263 E System  :     at android.os.ServiceManagerProxy.addService(ServiceManagerNative.java:150)
16263 16263 E System  :     at android.os.ServiceManager.addService(ServiceManager.java:88)
16263 16263 E System  :     at com.android.server.SystemServer.startOtherServices(SystemServer.java:838)
16263 16263 E System  :     at com.android.server.SystemServer.run(SystemServer.java:416)
16263 16263 E System  :     at com.android.server.SystemServer.main(SystemServer.java:284)
16263 16263 E System  :     at java.lang.reflect.Method.invoke(Native Method)
16263 16263 E System  :     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:452)
16263 16263 E System  :     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:837)

发现应该是添加的系统Service因为权限问题被拒绝添加,导致系统的其他Service也无法正常启动,各种异常抛出,手机无法正常启动(回退SystemServer中的修改后手机可以正常启动)

需做如下修改(“bingka”:添加的系统Service名称):

AOSP/system/sepolicy
private/service_contexts
bingka                              u:object_r:bingka_service:s0

public/service.te
type bingka_service, app_api_service, system_server_service, service_manager_type;

AOSP/device/mediatek/sepolicy/
bsp/private/compat/26.0/26.0.ignore.cil
bingka_service

full/private/compat/26.0/26.0.ignore.cil
bingka_service

basic/private/compat/26.0/26.0.ignore.cil
bingka_service

修改后整编,即可解决。


对于AIDL中的方法入参TAG(in,out,inout)的分析:

  • in:客户端的入参数据正常传给服务端,服务端对入参的修改对客户端的入参数据无任何影响;
  • out:客户端的入参数据为空传给服务端,服务端对入参的修改同时作用于客户端的入参数据;
  • inout:客户端的入参数据正常传给服务端,服务端对入参的修改同时作用于客户端的入参数据;
  • 基本数据类型的前面不需要TAG来修饰,默认为in;
  • 可以明显的看出,在TAG为inout的时候,系统的操作明显增加,所以在不必要的情况下,不轻易使用inout,一般情况下都是使用in。

修改文件如下:

SystemServer.java

import com.android.server.BingkaService;

private void startOtherServices() {
    ....
    BingkaService bingka = null;
    traceBeginAndSlog("StartBingkaService");
    bingka = new BingkaService(context);
    Ser
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

源码环境下添加系统Service流程 的相关文章

随机推荐