生活随笔
收集整理的這篇文章主要介紹了
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" ) ; } @Override public 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
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) ; } } ) ; 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) ) ; } } ) ;
將注冊的服務(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) ; } 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
之后更新系統(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" ) ; 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)容還不錯,歡迎將生活随笔 推薦給好友。