生活随笔
收集整理的這篇文章主要介紹了
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" ) ; } @Override public 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
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) ; } } ) ; registerService ( 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) ; } try { 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" ) ; 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接口服务) 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。