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接口服务)相关推荐
- 安卓添加系统服务接口以及测试用例
首先在frameworks/base/下创建如下目录mcserial/java/com/mc/serial然后在此目录下添加如下三个文件IMcSerialNumService.aidl McSeria ...
- 设置添加开机自启服务 及系统服务systemd
一.添加开机自启服务 CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,/usr/lib/systemd/system目录下每一个服务以.service结尾,一般 ...
- android7.0如何自定义添加系统服务
由于项目需要,我这边需要在framework层增加一个语音唤醒服务来实现拉通hal层以及android应用层,实现语音黑屏唤醒以及亮屏唤醒的功能,这里我们只看在android7.0和9.0上是怎么增加 ...
- java 模块分离部署_GitHub - yangjiu/Mis: 模块接口服务,如何在一个模块内维护其对外暴露的接口(包括打包发布),而不是把接口和接口实现分离到两个不同的模块?...
MIS 模块接口服务(Module Interface Service) MIS主要解决的问题是如何在一个模块内维护其对外暴露的接口(包括打包发布),而不是把接口和接口实现分离到两个不同的模块. Us ...
- 实现AIDL接口的Binder连接池
Binder作为AIDL通信的核心, 在使用中经常需要重复利用, 动态管理AIDL接口. Binder连接池的主要作用是把Binder请求统一发送至Service执行, 即动态管理Binder操作, ...
- 将Apache添加为Linux的服务 实现自启动
将Apache添加为Linux的服务 实现自启动 在Linux下用源代码方式编译安装完Apache后,启动关闭Apache可以通过如下命令实现: /app/apache2.2.14/bin/apach ...
- 调用远程service aidl接口定义
Android studio 查看aidl定义的文件:当你进入你的AIDL文件并编写好了之后,点击AS上方菜单栏中的Build->Make Project,之后便可以在当前工程的app/buil ...
- dotnet core 开发无缝兼容Http和Websocket协议的接口服务
在应用接口开发中往往要针对不同协义开发相应的代理服务,但对于Websocket和http这两种协议来说就有些不同,从实现上来看Websocket可以说是Http的升级子协议, 两者在协议处理上基本一致 ...
- 使用Python实现一个简单的接口服务
使用Python实现一个简单的接口服务,可以通过get.post方法请求该接口,拿到响应数据.创建一个api_server.py文件,添加代码如下: import flask, json from f ...
- SmartSql使用教程(1)——初探,建立一个简单的CURD接口服务
一.引言 最近SmartSql被正式引入到了NCC,借着这个契机写一个使用教程系列 二.SmartSql简介[摘自官方文档] 1. SmartSql是什么? SmartSql = MyBatis + ...
最新文章
- chrome 扩展开发注意事项
- 跨平台C++开发环境搭建——GNU+STL+Boost+wxWidget+OpenSceneGraph
- Linux之ping命令使用详解—网络故障定位(六)
- 服务器意外重启导致storm报错的问题处理
- ​【Python基础】告别枯燥,60 秒学会一个 Python 小例子(文末下载)
- oracle 容器切换,oracle12c 多租户管理四(容器连接切换)
- docker安装nginx容器小记
- iis架设aspx_在IIS6中配置html文件以ASPX方式工作
- 19 条法则,教你写出火爆 GitHub 的烂代码!
- OpenCV4每日一练day11:单目位姿估计
- String、StringBuffer与StringBuilder的区别
- 经典排序算法(十三)--奇偶排序Odd-even Sort
- 在html中做表格以及给表格设置高宽字体居中和表格线的粗细
- 【bzoj1520】[POI2006]Szk-Schools 费用流
- sap未分摊差异怎么处理_MM采购中形成的差异
- matlab灰色关联分析,灰色关联度分析(为什么不显示图像)大佬们帮我看看
- Python 实现Tracert追踪TTL值
- 为什么证券投资是世界上最难成功的行业
- java实现即时通讯软件
- Express 路由