Android 13 Framework 添加自定义的系统服务CustomService

目的: 添加自定义的系统服务,在自定义的服务中开发定制的API接口和功能,独立于系统核心服务,方便开发和维护。

开发环境:Android 13 MTK平台

涉及修改的文件如下

device/mediatek/sepolicy/base/private/service_contexts
device/mediatek/sepolicy/base/vendor/platform_app.te
device/mediatek/sepolicy/base/vendor/priv_app.te
device/mediatek/sepolicy/base/vendor/service_contexts
device/mediatek/sepolicy/base/vendor/system_app.te
device/mediatek/sepolicy/base/vendor/untrusted_app.te
device/mediatek/sepolicy/base/vendor/untrusted_app_27.te
frameworks/base/Android.bp
frameworks/base/core/api/current.txt
frameworks/base/core/java/android/app/SystemServiceRegistry.java
frameworks/base/core/java/android/content/Context.java
frameworks/base/services/java/com/android/server/SystemServer.java
system/sepolicy/prebuilts/api/33.0/private/service_contexts
system/sepolicy/private/service_contexts
system/sepolicy/private/untrusted_app_30.te
system/sepolicy/public/service.te
frameworks/base/core/java/android/app/CustomServiceManager.java
frameworks/base/core/java/android/os/custom/ICustomService.aidl
frameworks/base/services/core/java/com/android/server/CustomService.java

功能实现:

1.添加自定义服务AIDL文件:ICustomService.aidl,定义接口

路径:frameworks/base/core/java/android/os/custom/ICustomService.aidl

package android.os.custom;

interface ICustomService {
   
    String getTestTime();
}

2.添加自定义服务管理类:CustomServiceManager.java,Context.CUSTOM_SERVICE 是新增服务的标识,见下面的 Context.java的修改。

路径:frameworks/base/core/java/android/app/CustomServiceManager.java

package android.app;


import android.content.Context;
import android.os.custom.ICustomService;
import android.annotation.SystemService;
import android.util.Log;

@SystemService(Context.CUSTOM_SERVICE)
public class CustomServiceManager {
   
    private static final String TAG = "CustomServiceManager";
    ICustomService mService;
	
    public CustomServiceManager(Context context,ICustomService service){
   
        mService=service;
    }
	
	public String getTestTime(){
   
		try{
   
            return mService.getTestTime();
        }catch(Exception e){
   
            Log.d(TAG,"getTestTime e.getMessage()="+e.getMessage());
			return "";
        }
	}
}

3.添加自定义服务实现类:CustomService.java,实现具体的功能。

路径:frameworks/base/services/core/java/com/android/server/CustomService.java

package com.android.server;


import java.lang.*;
import java.util.Date;
import java.util.Locale;

import android.icu.text.SimpleDateFormat;
import android.os.RemoteException;
import android.os.custom.ICustomService;
import android.content.Context;
import android.util.Log;

public class CustomService extends ICustomService.Stub {
   
    private static final String TAG="CustomService";

    private final Context mContext;

    public CustomService
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android Framework添加自定义库,可以通过以下步骤实现: 1. 将自定义库的源代码添加Android Framework 中,通常情况下位于 `frameworks/base/core/java` 或 `frameworks/base/services/core/java` 目录下。 2. 在 `frameworks/base/core/res` 或 `frameworks/base/services/core/res` 目录下添加自定义库的资源文件,比如布局文件、字符串资源等。 3. 在 Android.mk 文件中添加自定义库的编译配置信息,包括源代码的编译和资源文件的打包。 4. 在 AndroidManifest.xml 文件中注册自定义库,以便系统可以识别和加载该库。 5. 在 Java 代码中使用 `import` 语句导入自定义库的类,并在代码中调用该类的方法。 需要注意的是,自定义库需要在 APK 中进行引用才能被 APK 调用。可以通过以下步骤将自定义库引用到 APK 中: 1. 在 APK 的 build.gradle 文件中添加依赖库的引用,例如: ``` dependencies { implementation project(':mylibrary') } ``` 其中 `mylibrary` 是自定义库的名称。 2. 在 APK 的 AndroidManifest.xml 文件中添加自定义库的使用权限,例如: ``` <uses-library android:name="mylibrary" android:required="true" /> ``` 其中 `mylibrary` 是自定义库的名称。 完成以上步骤后,自定义库就可以被 APK 调用了。需要注意的是,自定义库只能被具有相应权限的应用调用。如果需要让所有应用都能调用该库,可以考虑将库打包成系统级别的 APK,并将其放置到 `/system/app` 目录下。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最乱纷飞的code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值