日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

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

一、 準(zhǔn)備

  • 編譯好的Android4.4源碼
    用于添加系統(tǒng)服務(wù),用于獲取CPU的Core數(shù)量。
  • AndroidStudio工具
    用于編寫apk調(diào)用系統(tǒng)接口
  • 二、 添加系統(tǒng)服務(wù)

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

    package android.app;interface ICpuInfoManager {int getCpuCore(); }
  • 添加系統(tǒng)服務(wù),實現(xiàn)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;} }
  • 添加系統(tǒng)服務(wù)的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中的開機啟動以及上層應(yīng)用的使用*/public static final String CPU_INFO_SERVICE = "cpuinfo";
  • 將實現(xiàn)的服務(wù)注冊到系統(tǒng)中去
    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));}});
  • 將注冊的服務(wù)設(shè)置成開機啟動
    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

    之后更新系統(tǒng)。

  • 三、編寫app調(diào)用

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

  • 編寫app測試
    調(diào)用部分代碼:

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

  • 查看服務(wù)是否啟動
    串口下輸入

    service list | grep cpuinfo

    出現(xiàn)以下信息即為添加系統(tǒng)調(diào)用服務(wù)成功:

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

    logcat -vthreadtime -s CPUINFO

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

    --------- 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 添加系統(tǒng)服務(wù)【aidl接口服務(wù)】Java層

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。