android 系统中的服务可以分为两种
1.Android Java Service,主要存在于 SystemServer 程序中,主要通过AIDL语言来定义以及实现,如PhoneInterfaceManager.
2.Android Native Service, 主要存在于 系统程序(如mediaserver)或者自定义的程序中。如 CameraService,AudioFlinger等。
Java 服务和 Native Service 在添加时,最终会调用 service_manager.c 中的do_add_service,在这个方法中,它会检查添加服务的程序的uid,如果uid 是0或者 AID_SYSTEM ,那么检查结束。
int svc_can_register(unsigned uid, uint16_t *name)
{
unsigned n;
if ((uid == 0) || (uid == AID_SYSTEM))
return 1;
for (n = 0; n < sizeof(allowed) / sizeof(allowed[0]); n++)
if ((uid == allowed[n].uid) && str16eq(name, allowed[n].name))
return 1;
return 0;
}
一般情况下,Java Service 服务的添加都不会有问题,他们是通过 SystemServer 程序来添加的,SystemServer的uid 就是 AID_SYSTEM.如果你自定义的Native Service
你就需
1.Android Java Service,主要存在于 SystemServer 程序中,主要通过AIDL语言来定义以及实现,如PhoneInterfaceManager.
2.Android Native Service, 主要存在于 系统程序(如mediaserver)或者自定义的程序中。如 CameraService,AudioFlinger等。
Java 服务和 Native Service 在添加时,最终会调用 service_manager.c 中的do_add_service,在这个方法中,它会检查添加服务的程序的uid,如果uid 是0或者 AID_SYSTEM ,那么检查结束。
int svc_can_register(unsigned uid, uint16_t *name)
{
unsigned n;
if ((uid == 0) || (uid == AID_SYSTEM))
return 1;
for (n = 0; n < sizeof(allowed) / sizeof(allowed[0]); n++)
if ((uid == allowed[n].uid) && str16eq(name, allowed[n].name))
return 1;
return 0;
}
一般情况下,Java Service 服务的添加都不会有问题,他们是通过 SystemServer 程序来添加的,SystemServer的uid 就是 AID_SYSTEM.如果你自定义的Native Service
你就需