系统剪裁很多后卸载apk失败重启,查找logcat信息追踪代码发现是FIle.java里的delete函数失败返回-1导致PackagemanagerServer退出进而导致SystemServer退出最终重启整个java世界。查找java相关的系统服务c c++层的服务结果都是无功而返,找原因的过程中发现设置->安全选项也会崩溃。于是猜测和安全相关的配置有关,开始修改内核先关配置,结果都是没有效果。然后开始查找查看相关的各个xxx.rc,突然发现keystore字眼,用的是class late_start 心想会不会是这里的原因了?改成main,编译烧写,启动可以成功卸载apk了!!原来是别人优化启动时间的时候改成late_start导致的。
当我们调用class_start main命令时,所有标识为main的服务都会被启动。对于core, late_start类的服务也是这样的。而且不同服务启动先后顺序也是很重要的。
class core 的服务如下:
序号 | service名称 | 所属文件 | 命令bin文件位置 |
1 | watchdogd | init.manta.rc | /sbin/watchdogd |
2 | watchdogd | init.recovery.manta.rc | /sbin/watchdogd |
3 | setup_fs | init.smdk5250.rc | /system/bin/setup_fs |
4 | ueventd | init.rc | /sbin/ueventd |
5 | logd | init.rc | /system/bin/logd |
6 | healthd | init.rc | /sbin/healthd |
7 | console | init.rc | /system/bin/sh |
8 | adbd | init.rc | /sbin/adbd |
9 | servicemanager | init.rc | /system/bin/servicemanager |
10 | vold | init.rc | /system/bin/vold |
class main的服务如下:
序号 | service名称 | 所属文件 | 命令bin文件位置 |
1 | p2p_supplicant | init.manata.rc | /system/bin/wpa_supplicant |
2 | wpa_supplicant | init.manata.rc | /system/bin/wpa_supplicant |
3 | dhcpcd_wlan0 | init.manata.rc | /system/bin/dhcpcd |
4 | dhcpcd_p2p | init.manata.rc | /system/bin/dhcpcd |
5 | dhcpcd_eth0 | init.manata.rc | /system/bin/dhcpcd |
6 | dhcpcd_bt-pan | init.manata.rc | /system/bin/dhcpcd |
7 | dhcpcd_bt-pan | init.manata.rc | /system/bin/dhcpcd |
8 | iprenew_p2p | init.manata.rc | /system/bin/dhcpcd |
9 | iprenew_eth0 | init.manata.rc | /system/bin/dhcpcd |
10 | iprenew_bt-pan | init.manata.rc | /system/bin/dhcpcd |
11 | gpsd | init.manata.rc | /system/vendor/bin/gpsd |
12 | mobicore | init.manata.rc | /system/bin/mcDriverDaemon |
13 | bugreport | init.manata.rc | /system/bin/dumpstate |
14 | netd | init.rc | /system/bin/netd |
15 | debuggerd | init.rc | /system/bin/debuggerd |
16 | debuggerd64 | init.rc | /system/bin/debuggerd64 |
17 | ril-daemon | init.rc | /system/bin/rild |
18 | surfaceflinger | init.rc | /system/bin/surfaceflinger |
19 | drm | init.rc | /system/bin/drmserver |
20 | media | init.rc | /system/bin/mediaserver |
21 | bootanim | init.rc | /system/bin/bootanimation |
22 | installd | init.rc | /system/bin/installd |
23 | flash_recovery | init.rc | /system/etc/install-recovery.sh |
24 | racoon | init.rc | /system/bin/racoon |
25 | mtpd | init.rc | /system/bin/mtpd |
26 | keystore | init.rc | /system/bin/keystore |
27 | dumpstate | init.rc | /system/bin/dumpstate |
28 | sshd | init.rc | /system/bin/start-ssh |
29 | mdnsd | init.rc | /system/bin/mdnsd |
30 | zygote | init.zygote32_64.rc | /system/bin/app_process |
31 | zygote | init.zygote32.rc | /system/bin/app_process |
32 | zygote | init.zygote64.rc | /system/bin/app_process64 |