我们看到log出现了:
init: sys_prop: permission denied uid:1003 name:service.bootanim.exit
然后网上就有人说了
1、修改service.bootanim.exit访问权限
2、修改bootanim服务的用户组ID
#define EXIT_PROP_NAME "service.bootanim.exit"
...
...
bool BootAnimation::threadLoop()
{
bool r;
// wait for hardware init complete, then start boot animation
char property[PROPERTY_VALUE_MAX];
int hwInit;
property_get("xxx.hw.init", property, "0");
hwInit = atoi(property);
if (hwInit == 0) {
int exitnow;
property_get(EXIT_PROP_NAME, property, "0");
exitnow = atoi(property);
if (exitnow) {
r = false;
goto exit;
}
return true;
}
if (mVideoAdvert) {
r = videoAdvert();
} else if (mAndroidAnimation) {
r = android();
} else {
r = movie();
}
// wait for hardware init complete, then start boot animation
exit:
// No need to force exit anymore
property_set(EXIT_PROP_NAME, "0");
eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
eglDestroyContext(mDisplay, mContext);
eglDestroySurface(mDisplay, mSurface);
mFlingerSurface.clear();
mFlingerSurfaceControl.clear();
eglTerminate(mDisplay);
IPCThreadState::self()->stopProcess();
return r;
}
第1种改法就是歪打正着。本来已经定义了service. 属性组属于AID_SYSTEM了,你把一个特例service.bootanim.改成了AID_GRAPHICS,然后导致了开机完成后无法设置service.bootanim.exit属性,从而每次判断该属性的值都为0,所以可以播放开机动画。
第2种改法太过于暴力,明明属于graphics id,强制改成system id,总之不好。
另一种解决办法就是在设置clt.start=bootanim之前,把service.bootanim.exit标志设为0,然后再ctl.stop=bootanim的时候把service.bootanim.exit恢复为1