日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android4.4添加系统服务(aidl接口服务)

發布時間:2023/12/20 Android 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android4.4添加系统服务(aidl接口服务) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、 準備

  • 編譯好的Android4.4源碼
    用于添加系統服務,用于獲取CPU的Core數量。
  • AndroidStudio工具
    用于編寫apk調用系統接口
  • 二、 添加系統服務

  • 添加aidl接口
    frameworks/base/core/java/android/app/ICpuInfoManager.aidl

    package android.app;interface ICpuInfoManager {int getCpuCore(); }
  • 添加系統服務,實現aidl文件的接口
    frameworks/base/services/java/com/android/server/CpuInfoManagerService.java

    package com.android.server; import android.app.ICpuInfoManager; import android.content.Context; import android.util.Slog;public class CpuInfoManagerService extends ICpuInfoManager.Stub {private Context mContext;public CpuInfoManagerService(Context context){mContext = context;Slog.d("CPUINFO","Construct");} @Overridepublic int getCpuCore(){return 4;} }
  • 添加系統服務的Manager
    frameworks/base/core/java/android/app/CpuInfoManager.java

    package android.app; import android.content.Context; import android.os.RemoteException; import android.util.Slog;public class CpuInfoManager {Context mContext;ICpuInfoManager mService;public CpuInfoManager(Context context,ICpuInfoManager service){mContext = context;mService = service;} public int getCpuCore(){if(mService != null){try{return mService.getCpuCore();}catch(RemoteException e){Slog.e("CPUINFO","RemoteException " + e);} } return -1;} }
  • 將aidl文件添加至Android.mk參與編譯
    frameworks/base/Android.mk

    LOCAL_SRC_FILES += \core/java/android/app/ICpuInfoManager.aidl \
  • 添加Context中的Service常量
    frameworks/base/core/java/android/content/Context.java

    /*** 用于Service的注冊、SystemServer中的開機啟動以及上層應用的使用*/public static final String CPU_INFO_SERVICE = "cpuinfo";
  • 將實現的服務注冊到系統中去
    frameworks/base/core/java/android/app/ContextImpl.java

    registerService(CONSUMER_IR_SERVICE, new ServiceFetcher() {public Object createService(ContextImpl ctx) {return new ConsumerIrManager(ctx);}});// add register cpuinfo serviceregisterService(CPU_INFO_SERVICE, new ServiceFetcher() {public Object createService(ContextImpl ctx) {IBinder iBinder = ServiceManager.getService(Context.CPU_INFO_SERVICE);return new CpuInfoManager(ctx, ICpuInfoManager.Stub.asInterface(iBinder));}});
  • 將注冊的服務設置成開機啟動
    frameworks/base/services/java/com/android/server/SystemServer.java

    try {display.systemReady(safeMode, onlyCore);} catch (Throwable e) {reportWtf("making Display Manager Service ready", e);}// add cpuinfo servicetry{ServiceManager.addService(Context.CPU_INFO_SERVICE, new CpuInfoManagerService(context));} catch(Throwable e){Slog.e("CPUINFO","Failed to start CpuInfoManagerService " + e);}
  • 更新api接口并且編譯源碼

    make update-apimake -j32

    之后更新系統。

  • 三、編寫app調用

  • AndroidStudio中引入AOSP的jar包
    此處導入out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar即可。

  • 編寫app測試
    調用部分代碼:

    CpuInfoManager cm = (CpuInfoManager) getSystemService("cpuinfo"); // cpuinfo即Context.CPU_INFO_SERVICE, 不知道為什么,AndroidStudio引入frameworkjar包后,調不到。Log.d("CPUINFO", "getcpuinfo: " + cm.getCpuCore());
  • 四、調試

  • 查看服務是否啟動
    串口下輸入

    service list | grep cpuinfo

    出現以下信息即為添加系統調用服務成功:

    53 cpuinfo: [android.app.ICpuInfoManager]
  • logcat查看app是否調用成功
    串口下輸入

    logcat -vthreadtime -s CPUINFO

    出現以下打印(cpu core is 4)即為app調用成功:

    --------- beginning of /dev/log/system --------- beginning of /dev/log/main 01-01 08:00:04.433 1930 1930 D CPUINFO : Construct 05-18 15:03:26.770 4993 4993 D CPUINFO : cpu core is 4
  • 五、參考

    Android AOSP 添加系統服務【aidl接口服務】Java層

    總結

    以上是生活随笔為你收集整理的Android4.4添加系统服务(aidl接口服务)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。