Android在framework层添加自定义服务的流程

环境说明

  • ubuntu16.04
  • android4.1
  • java version “1.6.0_45”
  • GNU Make 3.81
  • gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12)

可能有人会问,现在都2024了怎么还在用android4版本,早都过时了。确实,现在最新的都是Android13、Android14了,不过我这里主要是用于demo的演示学习使用,只要整个的流程掌握了,哪个版本的流程都是大同小异;再一个就拿Android13来说,源码100G多非常庞大,代码clone、源码编译都是很慢的,而Android4.1源码才4G多,编译运行就快多了,省时省力。

编写AIDL文件

如果不了解aidl,建议先看看:android AIDL使用demo
仿照系统中现有服务的编写方式,新增服务需要编写aidl接口(也就是提供什么服务),在frameworks/base/core/java/android/helloservice/新建aidl文件,
在这里插入图片描述
ICallBack.aidl内容如下

package android.helloservice;
interface ICallBack {
   
   
    void onReceive(String serverMsg);
}

IHelloService.aidl内容如下

package android.helloservice;
import android.helloservice.ICallBack;
interface IHelloService {
   
   
     String getHello(String send);
     void registerCallback(ICallBack callback);
     void unRegisterCallback(ICallBack callback);
}

修改frameworks/base/Android.mk,在LOCAL_SRC_FILES变量中加入新增的aidl文件

## READ ME: ########################################################
##
## When updating this list of aidl files, consider if that aidl is
## part of the SDK API.  If it is, also add it to the list below that
## is preprocessed and distributed with the SDK.  This list should
## not contain any aidl files for parcelables, but the one below should
## if you intend for 3rd parties to be able to send those objects
## across process boundaries.
##
## READ ME: ########################################################
LOCAL_SRC_FILES += \
	core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl \
	core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl \
	core/java/com/android/internal/widget/IRemoteViewsFactory.aidl \
	core/java/com/android/internal/widget/IRemoteViewsAdapterConnection.aidl \
	//省略部分
	core/java/android/helloservice/ICallBack.aidl \
	core/java/android/helloservice/IHelloService.aidl \

执行mmm frameworks/base单编,编译成功之后会在out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/helloservice/生成如下文件在这里插入图片描述
IHelloService.java内容(androidstudio生成,aosp生成的代码紧凑不方便阅读)

/*
 * This file is auto-generated.  DO NOT MODIFY.
 */
package android.helloservice;
public interface IHelloService extends android.os.IInterface
{
   
   
  /** Default implementation for IHelloService. */
  public static class Default implements android.helloservice.IHelloService
  {
   
   
    @Override public java.lang.String getHello(java.lang.String send) throws android.os.RemoteException
    {
   
   
      return null;
    }
    @Override public void registerCallback(android.helloservice.ICallBack callback) throws android.os.RemoteException
    {
   
   
    }
    @Override public void unRegisterCallback(android.helloservice.ICallBack callback) throws android.os.RemoteException
    {
   
   
    }
    @Override
    public android.os.IBinder asBinder() {
   
   
      return null;
    }
  }
  /** Local-side IPC implementation stub class. */
  public static abstract class Stub extends android.os.Binder implements android.helloservice.IHelloService
  {
   
   
    /** Construct the stub at attach it to the interface. */
    public Stub()
    {
   
   
      this.attachInterface(this, DESCRIPTOR);
    }
    /**
     * Cast an IBinder object into an android.helloservice.IHelloService interface,
     * generating a proxy if needed.
     */
    public static android.helloservice.IHelloService asInterface(android.os.IBinder obj)
    {
   
   
      if ((obj==null)) {
   
   
        return null;
      }
      android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
      if (((iin!=null)&&(iin instanceof android.helloservice.IHelloService))) {
   
   
        return ((android.helloservice.IHelloService)iin);
      }
      return new android.helloservice.IHelloService.Stub.Proxy(obj);
    }
    @Override public android.os.IBinder asBinder()
    {
   
   
      return this;
    }
    @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
    {
   
   
      java.lang.String descriptor = DESCRIPTOR;
      if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
   
   
        data.enforceInterface(descriptor);
      }
      switch (code)
      {
   
   
        case INTERFACE_TRANSACTION:
        {
   
   
          reply.writeString(descriptor);
          return true;
        }
      }
      switch (code)
      {
   
   
        case TRANSACTION_getHello:
        {
   
   
          java.lang.String _arg0;
          _arg0 = data.readString();
          java.lang.String _result = this.getHello(_arg0);
          reply.writeNoException();
          reply.writeString(_result);
          break;
        }
        case TRANSACTION_registerCallback:
        {
   
   
          android.helloservice.ICallBack _arg0;
          _arg0 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值