Android 7.0 添加自定义系统服务

来源:互联网 发布:matlab解矩阵方程组 编辑:程序博客网 时间:2024/06/04 17:48
一.添加自定义服务代码
1.修改系统配置, 增加自定义目录编译
build\core\pathmap.mk
......
FRAMEWORKS_BASE_SUBDIRS += \
$(addsuffix /java, \
olc/security \
)
......
2.添加 aidl接口
frameworks\base\olc\security\java\com\olc\security\aidl\ISecurityServer.aidl
package com.olc.security.aidl;
interface ISecurityServer {
void startLockAppSevice();
void stopLockAppSevice();
}
3.添加aidl接口的实现 SecurityServer.java
frameworks\base\olc\security\java\com\olc\security\aidl\SecurityServer.java
package com.olc.security.aidl;
public class SecurityServer extends ISecurityServer.Stub{
public SecurityServer(Context context) {
super();
}

public void startLockAppSevice() {
......
}

public void stopLockAppSevice() {
.....
}
}
4.封装对外接口 SecurityManager.java
frameworks\base\olc\security\java\com\olc\security\SecurityManager.java
package com.olc.security;
import com.olc.security.aidl.ISecurityServer;
import android.os.RemoteException;
public class SecurityManager {
private final ISecurityServer mService;
public SecurityManager(ISecurityServer service) {
mService = service;
}
public void startLockAppSevice(){
try {
mService.startLockAppSevice();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void stopLockAppSevice(){
try {
mService.stopLockAppSevice();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5.注册自定义服务
frameworks\base\core\java\android\app\SystemServiceRegistry.java
static{
......
//wpx security
registerService("olc_service_security", com.olc.security.SecurityManager.class,
new CachedServiceFetcher<com.olc.security.SecurityManager>() {
@Override
public com.olc.security.SecurityManager createService(ContextImpl ctx) {
IBinder b = ServiceManager.getService("olc_service_security");
return new com.olc.security.SecurityManager(com.olc.security.aidl.ISecurityServer.Stub.asInterface(b));
}
});
}
6.在系统启动过程中添加自定义服务
frameworks\base\services\java\com\android\server\SystemServer.java
// Start services.
try {
Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "StartServices");
startBootstrapServices();
startCoreServices();
startOtherServices();

try {
com.olc.security.aidl.SecurityServer Security = new com.olc.security.aidl.SecurityServer(mContext);
ServiceManager.addService("olc_service_security", Security);
} catch (Throwable e) {
Log.e(TAG, "Failure starting olc_service_security", e);
}
} catch (Throwable ex) {
Slog.e("System", "******************************************");
Slog.e("System", "************ Failure starting system services", ex);
throw ex;
} finally {
Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
}
7.自定义服务声明, 赋权限
system\sepolicy\service_contexts 放最后一行一定要多添加一空行
......
olc_service_security u:object_r:olc_service_security_service:s0
.......
system\sepolicy\service.te 放最后一行一定要多添加一空行
......
type olc_service_security_service,app_api_service, system_server_service, service_manager_type;
......
8.调用自定义服务
SecurityManager securityManager = (SecurityManager)getSystemService("olc_service_security");
securityManager.startLockAppS