源码环境下添加系统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流程 的相关文章

  • Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from

    程序在编译时报错 在执行合并AndroidMainfest时报Attribute application appComponentFactory value android support v4 app CoreComponentFacto
  • kotlin实现java的单例模式

    代码 package com flannery interviewdemo singleinstance https blog csdn net Jason Lee155 article details 128796742 Java实现 p
  • Android中的列表树形展示,AndroidTreeView的使用动态设置树形结构

    1 在项目中用到了这个控件 展示并选择某公司的部门 但是在使用过程中又出一个问题 我并不知道该公司有几个部门 部门下面是否有子部门 2 实现步骤如下 开发工具 Android studio 在项目中添加依赖 compile com gith
  • Android 对data/data/(your packagename)目录下的数据读写、删除操作

    一 数据存储 App自身的数据存储在 data data packagename 目录下 大致结构如下图 Activity提供了getCacheDir 和getFilesDir 方法 getCacheDir getAbsolutePath
  • Android file类使用详解

    一 Android file类 在开发Android应用时免不了会跟文件打交道 本篇文章记录总结自己常用到的文件操作 数据的存储有多种方式 比如数据库存储 SharedPreferences存储 文件存储等 这里我们将要介绍最简单的文件存储
  • Android内存泄露

    Android内存泄露概述 了解Android内存泄露之前 需要对java的内存管理和GC机制有个简单的了解 Android内存泄露的根本原因是引用者的生命周期大于被引用者 举个例子 有对象A B B有A的强引用 GC要回收A时发现B还未销
  • Android(java方法)上实现mp4的分割和拼接 (二)

    http blog csdn net banking17173 article details 20646251 这节谈一下如何在Android上实现mp4文件的高效率切割 业务需求举例 把一段2分钟的mp4文件切割出00 42 至 01
  • Android Studio连接夜神模拟器

    Android Studio连接夜神模拟器 一 下载夜神模拟器 二 夜神模拟器连接Android Studio 三 其他操作 3 1 屏幕旋转 3 2 创建其他模拟器 一 下载夜神模拟器 官网 https www yeshen com 下载
  • 设置ImageButton的点击效果

    我要设置一个ImageButton的点击效果 普通状态背景透明 按下状态有一个背景图 src是一个图片 如下所示
  • Android Studio 将项目转变成library(model)引入到另一个项目中使用

    最近要将项目转换成library 引入到另一项目中使用 所以记录引用的过程 1 修改配置 2 修改app文件夹里面的iml文件名称 在APP文件夹下 找到app iml 文件 将文件名改为想要命名的名称 这里改成loadingviewlir
  • Android 开发最佳实践

    https github com futurice android best practices blob master translations Chinese README cn md 组织好它们 在layoutout XMLs布局时
  • Android项目JNI层C/C++文件中添加LOG信息

    第一步 在项目的mk文件中加入 LOCAL LDLIBS llog 第二步 在要添加LOG的cpp文件中引入一个头文件和添加一个定义 include
  • 谈谈App混合开发

    混合开发的App Hybrid App 就是在一个App中内嵌一个轻量级的浏览器 一部分原生的功能改为Html 5来开发 这部分功能不仅能够在不升级App的情况下动态更新 而且可以在Android或iOS的App上同时运行 让用户的体验更好
  • AIDL原理和相关文件解析

    Binder概述 相信从事Android相关的研发人员 都对Binder有个或多或少的了解 相关技术博客也有一大推 我今天对Binder的学习过程进行一个记录 理论性的叙述会少一点 更多的是基于AS自动生成的AIDL文件进行代码分析 但读者
  • Android Socket 简单介绍

    文章目录 前言 一 Socket是什么 百度百科的解释 我自己的理解 二 简单示例 1 服务端 2 客户端 3 布局 4 实现 参考 总结 前言 最近需求需要使用Socket进行通讯 我在工作后的安卓开发中没有接触过 所以有了这篇文章 写的
  • ConstraintLayout 属性详解 和Chain的使用

    http blog csdn net zxt0601 article details 72736802
  • 【Android】相对布局(RelativeLayout)最全解析

    Android 相对布局 RelativeLayout 最全解析 一 相对布局 RelativeLayout 概述 二 根据父容器定位 三 根据兄弟控件定位 一 相对布局 RelativeLayout 概述 相对布局 RelativeLay
  • TelephonyManager类使用方法大全

    这个类是很有用地 可以得到很多关于手机的信息 做应用时必须的工具 不废话 直接上注释后的代码 请享用 code author dingran 创建日期 2010 4 29 下午05 02 47 package net sunniwell a
  • Android RecyclerView最全使用详解

    本文目录 RecyclerView概述 RecyclerView使用 基础篇 第一步 添加RecyclerView 第二步 添加布局文件 第三步 添加逻辑代码 运行效果 RecyclerView使用 进阶篇 布局管理器 线性布局管理器 网格
  • 多线程下载文件(支持暂停、取消、断点续传)

    多线程下载文件 支持暂停 取消 断点续传 多线程同时下载文件即 在同一时间内通过多个线程对同一个请求地址发起多个请求 将需要下载的数据分割成多个部分 同时下载 每个线程只负责下载其中的一部分 最后将每一个线程下载的部分组装起来即可 涉及的知

随机推荐