安卓版本:4.4
因?yàn)轫?xiàng)目中用到了,做一下簡(jiǎn)要筆記。
- 定義aidl文件,如IFlyscaleManager.aidl,放到frameworks/base/core/java/android/flyscale/IFlyscaleManager.aidl
- 定義服務(wù)FlyscaleService.java,實(shí)現(xiàn)該IFlyscaleManager.aidl,放到frameworks/base/service/java/com/android/server/flyscale/FlyscaleService.java
- 調(diào)用FlyscaleService服務(wù),定義FlyscaleManager.java,放到frameworks/base/core/java/android/flyscael/FlyscaleManager.java
- 添加服務(wù),修改frameworks/base/core/java/android/content/Context.java
添加:
/**
*@author bianjb add flyscale service
*/
public static final String FLYSCALE_SERVICE = "flyscale";
修改initAndLoop()方法,添加
//framework/base/services/java/com/android/server/SystemServer.java
//bianjb:add flyscale service
FlyscaleService flyscaleService = null;
//bianjb: add for flyscale service
try {
if (PowerGuruService.isEnabled()) {
Slog.i(TAG, "Flyscale Manager");
flyscaleService = new FlyscaleService(context);
ServiceManager.addService(Context.FLYSCALE_SERVICE, flyscaleService);
}
} catch (Throwable e) {
Slog.e(TAG, "Failure FlyscaleService", e);
}
- 實(shí)例化并注冊(cè)服務(wù)
修改frameworks/base/core/java/android/app/ContextImpl.java
的static代碼塊中添加
//bianjb:add for flyscale service
registerService(FLYSCALE_SERVICE, new ServiceFetcher() {
public Object createService(ContextImpl ctx) {
IBinder b = ServiceManager.getService(FLYSCALE_SERVICE);
IFlyscaleManager service = IFlyscaleManager.Stub.asInterface(b);
return new FlyscaleManager(ctx, service);
}});
- 編譯IFlyscaleService.aidl
修改frameworks/base/Android.mk
添加
#add for flyscale service
LOCAL_SRC_FILES += core/java/android/flyscale/IFlyscaleManager.aidl \
之后重新編譯即可,在APP調(diào)用的方法與調(diào)用ActivityManager方法一致。