最近在Android 9.0平台上遇到锁屏界面解不了锁,抓logcat发现keymaster有发生过crash而重启过。问题在于不是keymaster现在不能用而是keystore不能用。为了测试,进入adb mode,主动kill keymaster进程,发现此时keystore再也不能用了。对比Android 8.0发现,不管我怎么把keymaster kill,keystore仍然可用。这样一来,在Android 9.0上keystore服务进程必须在keymaster服务进程后面进行初始化,即当keymaster服务进程重启了,keystore服务进程也需要重启。
device/qcom/{$PLATFORM}/init.target.rc添加如下代码(此方法可以防止偶现keymaster发生重启导致keystore不能用的问题,但不能解决keymaster总发现异常的问题,且暂不知道会不会有其他影响,记录的目的是在某种情况下可以通过此方式来监测服务进程的运行状态):
#keystore和vendor.keymaster分别是对应服务的名字
#keystore服务定义来自system/security/keystor.rc文件
service keystore /system/bin/keystore /data/misc/keystore
class main
user keystore
group keystore drmrpc readproc log
writepid /dev/cpuset/foreground/tasks
on property:init.svc.vendor.keymaster-3-0=running
stop keystore
start keystore