最近发现RK平台某些机型的视频播放器在播放视频时,如果点击浮窗播放的按钮播放就会停止。抓Log提示:
ActivityManager: Unable to start service Intent {
act=com.rk.app.mediafloat.CUSTOM_ACTION
pkg=com.android.rk.mediafloat
cmp=com.android.rk.mediafloat/.MediaFloatService
(has extras) } U=0: not found
视频播放器是集成的 vendor/rockchip/common/apps/RkVideoPlayer/RkVideoPlayer.apk。 Log提示是找不到“com.android.rk.mediafloat”,是否是应用本身的问题呢?因为只是个别机型有这个问题,所以还是要查一下系统代码。
经对比发现出问题的机型改过安全证书,把证书的修改 revert 之后,就可以浮窗播放了。看了一下RkVideoPlayer.apk 的编译文件,发现签名是 PRESIGNED,于是改成了 platform。但试了还是不行。问了一下同事,同事怀疑这个“com.android.rk.mediafloat” 并不是RkVideoPlayer.apk 里的。通过指令查一下RkVideoPlayer.apk包含哪些action。
首先列出所有包名:
#pm list package -f
由输出可知RkVideoPlayer.apk 的包名是 android.rk.RockVideoPlayer
dumpsys package android.rk.RockVideoPlayer
发现它并不包含 “com.rk.app.mediafloat.CUSTOM_ACTION”。而且第一个指令输出所有包名时也不包含 com.android.rk.mediafloat 。抓取刷机后第一次开机log,证明这个 package 确实没有安装成功:
PackageManager: Failed to parse
/system/app/MediaFloat: Signature mismatch for shared user:
SharedUserSetting{87a8a26 android.uid.system/1000}
咳,原来是MediaFloat.apk 的签名有问题。将其编译文件中的 PRESIGNED 改成 platform,问题解决了。
后知后觉,当发现是签名导致的问题时,应该抓系统Log看一下的,就不用绕这么一大圈了。