Rockchip Android16 系统裁剪指南
概述
本文档记录 Rockchip Android16 SDK 的系统裁剪方法,包括 APK 删除、Java 服务禁用、SELinux 配置等内容。
裁剪效果:
- 应用减少:31 个 (-24%)
- 服务减少:112 个 (-39%)
- 内存节省:~1.1 GB
- 存储节省:~243 MB
一、APK 裁剪
1.1 原理
Android 系统通过 PRODUCT_PACKAGES 变量控制要编译安装的应用。裁剪 APK 的方式有:
- 注释法 :直接注释掉
PRODUCT_PACKAGES +=中的包名 - filter-out 法 :使用
filter-out过滤(不推荐,有时序问题)
1.2 注意事项
⚠️ 重要 :filter-out 只能过滤已添加 的包,后续 += 添加的包不会被过滤。建议直接注释源文件。
1.3 需要修改的文件
AOSP 应用
| 文件 | 注释的应用 |
|---|---|
build/make/target/product/handheld_product.mk |
Browser2, Calendar, Camera2, Contacts, DeskClock, Gallery2, Music, QuickSearchBox, SettingsIntelligence |
build/make/target/product/handheld_system.mk |
BasicDreams, DocumentsUI, KeyChain, MusicFX, PrintSpooler, Traceur, PacProcessor, PrintRecommendationService, CaptivePortalLogin, CertInstaller, ManagedProvisioning, CameraExtensionsProxy |
build/make/target/product/handheld_system_ext.mk |
WallpaperCropper |
build/make/target/product/full_base.mk |
LiveWallpapersPicker, PhotoTable |
Rockchip 应用
| 文件 | 注释的应用 |
|---|---|
device/rockchip/common/device.mk |
Music, WallpaperPicker, SoundRecorder |
device/rockchip/common/modules/rockchip_apps.mk |
RKDeviceTest, Chromium, LiveWallpapersPicker, RkVideoPlayer, RkExplorer, StressTest, RKUpdateService |
device/rockchip/common/modules/camera_aidl.mk |
rkCamera2 |
device/rockchip/rockchip_generic/devicecommon.mk |
ExactCalculator, SoundRecorder |
1.4 修改示例
修改前:
makefile
PRODUCT_PACKAGES += \
Music \
Gallery2 \
DeskClock
修改后:
makefile
# RK-MODIFY: System trim - removed unnecessary apps
# PRODUCT_PACKAGES += \
# Music \
# Gallery2 \
# DeskClock
1.5 可删除的 APK 列表
推荐删除(无依赖)
| 应用 | 包名 | 说明 |
|---|---|---|
| Music | com.android.music | 音乐播放器 |
| Gallery2 | com.android.gallery3d | 图库 |
| DeskClock | com.android.deskclock | 时钟 |
| Browser2 | org.chromium.webview_shell | 浏览器 |
| BasicDreams | com.android.dreams.basic | 屏保 |
| PhotoTable | com.android.dreams.phototable | 照片屏保 |
| LiveWallpapersPicker | com.android.wallpaper.livepicker | 动态壁纸 |
| WallpaperCropper | com.android.wallpapercropper | 壁纸裁剪 |
| SoundRecorder | com.android.soundrecorder | 录音机 |
| PrintSpooler | com.android.printspooler | 打印服务 |
| Traceur | com.android.traceur | 追踪工具 |
| MusicFX | com.android.musicfx | 音效 |
| CertInstaller | com.android.certinstaller | 证书安装 |
| CaptivePortalLogin | com.android.captiveportallogin | 门户登录 |
谨慎删除(可能有依赖)
| 应用 | 包名 | 说明 |
|---|---|---|
| Calendar | com.android.calendar | 日历(CalendarProvider 依赖) |
| Contacts | com.android.contacts | 联系人(电话依赖) |
| Camera2 | com.android.camera2 | 相机(需要替换) |
| DocumentsUI | com.android.documentsui | 文档管理(文件选择器) |
| KeyChain | com.android.keychain | 密钥链(VPN/证书依赖) |
| SettingsIntelligence | com.android.settingsintelligence | 设置搜索 |
| QuickSearchBox | com.android.quicksearchbox | 搜索 |
Rockchip 应用
| 应用 | 包名 | 说明 |
|---|---|---|
| RKDeviceTest | - | 设备测试 |
| Chromium | - | Chrome 浏览器 |
| RkVideoPlayer | - | 视频播放器 |
| RkExplorer | - | 文件管理器 |
| StressTest | - | 压力测试 |
| RKUpdateService | - | 升级服务 |
二、Java 服务禁用
2.1 原理
通过属性控制 Java 服务的启动。在 SystemServer.java 中添加属性检查:
java
// 检查属性决定是否启动服务
if (!"true".equals(SystemProperties.get("persist.config.disable_xxx_service"))) {
// 启动服务
mSystemServiceManager.startService(XXXService.class);
} else {
Slog.i(TAG, "XXXService disabled by system property");
}
2.2 修改文件
文件路径: frameworks/base/services/java/com/android/server/SystemServer.java
2.3 可禁用的服务
| 服务 | 属性 | 行号范围 | 说明 |
|---|---|---|---|
| WebViewUpdateService | persist.config.disable_webview_service | ~1492 | WebView 更新服务 |
| TelecomLoaderService | persist.config.disable_telecom_service | ~1637 | 电话服务加载器 |
| VpnManagerService | persist.config.disable_vpn_service | ~2326 | VPN 管理服务 |
| VcnManagementService | persist.config.disable_vcn_service | ~2348 | 虚拟网络服务 |
| MidiService | persist.config.disable_midi_service | ~2544 | MIDI 服务 |
| UsbService | persist.config.disable_usb_service | ~2568 | USB 服务 |
| SerialService | persist.config.disable_serial_service | ~2584 | 串口服务 |
2.4 修改示例
修改前:
java
if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_MIDI)) {
// Start MIDI Manager service
t.traceBegin("StartMidiManager");
mSystemServiceManager.startService(MidiService.Lifecycle.class);
t.traceEnd();
}
修改后:
java
if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_MIDI)) {
// Start MIDI Manager service
// RK-MODIFY: System trim - allow disabling MidiService
if (!"true".equals(SystemProperties.get("persist.config.disable_midi_service"))) {
t.traceBegin("StartMidiManager");
mSystemServiceManager.startService(MidiService.Lifecycle.class);
t.traceEnd();
} else {
Slog.i(TAG, "MidiService disabled by system property");
}
}
2.5 启用/禁用配置
文件路径: device/rockchip/rk3572/rk3572_a16/system_trim.mk
makefile
# 禁用 MIDI 服务 - 平板设备通常不需要
PRODUCT_PROPERTY_OVERRIDES += persist.config.disable_midi_service=true
# 禁用串口服务 - 大多数设备不需要
PRODUCT_PROPERTY_OVERRIDES += persist.config.disable_serial_service=true
# 禁用 VPN 服务 - 可能影响 VPN 应用
PRODUCT_PROPERTY_OVERRIDES += persist.config.disable_vpn_service=true
# 禁用 Telecom 服务 - 会影响电话功能
PRODUCT_PROPERTY_OVERRIDES += persist.config.disable_telecom_service=true
# 禁用 USB 服务 - 会影响 USB 调试和文件传输(不推荐)
# PRODUCT_PROPERTY_OVERRIDES += persist.config.disable_usb_service=true
# 禁用 WebView 服务 - 会影响使用 WebView 的应用(不推荐)
# PRODUCT_PROPERTY_OVERRIDES += persist.config.disable_webview_service=true
三、SELinux 配置
3.1 问题
自定义属性需要在 property_contexts 中定义 SELinux 上下文,否则属性无法正常使用。
错误示例:
SELinux permission check failed: Do not have permissions to set 'persist.config.disable_midi_service' to 'true'
3.2 解决方案
文件路径: device/rockchip/rk3576/rk3576_a16/sepolicy/property_contexts
# RK-MODIFY: System trim service disable properties
persist.config.disable_midi_service u:object_r:vendor_system_public_prop:s0
persist.config.disable_serial_service u:object_r:vendor_system_public_prop:s0
persist.config.disable_vpn_service u:object_r:vendor_system_public_prop:s0
persist.config.disable_telecom_service u:object_r:vendor_system_public_prop:s0
persist.config.disable_usb_service u:object_r:vendor_system_public_prop:s0
persist.config.disable_webview_service u:object_r:vendor_system_public_prop:s0
persist.config.disable_vcn_service u:object_r:vendor_system_public_prop:s0
3.3 注意事项
- 属性前缀使用
persist.config.*而非ro.config.*(后者在 vendor 分区有权限限制) - 类型使用
vendor_system_public_prop(已在 system/sepolicy 中定义)
4 验证裁剪效果
4.1 检查应用数量
bash
adb shell "pm list packages -s | wc -l"
4.2 检查服务数量
bash
adb shell "service list | wc -l"
4.3 检查属性设置
bash
adb shell "getprop | grep persist.config.disable"
4.4 检查内存使用
bash
adb shell "cat /proc/meminfo | grep -E 'MemTotal|MemFree|MemAvailable'"
4.5 检查服务禁用日志
bash
adb shell "logcat -d | grep -i 'disabled by system property'"
5、裁剪效果数据
5.1 应用数量对比
| 指标 | 裁剪前 | 裁剪后 | 差异 |
|---|---|---|---|
| 系统应用 | 130 | 99 | -31 (-24%) |
5.2 服务数量对比
| 指标 | 裁剪前 | 裁剪后 | 差异 |
|---|---|---|---|
| System Services | 285 | 173 | -112 (-39%) |
| Init Services | 36 | 36 | 0 |
5.3 内存使用对比
| 指标 | 裁剪前 | 裁剪后 | 差异 |
|---|---|---|---|
| MemFree | 4.6 GB | 5.3 GB | +700 MB |
| MemAvailable | 6.4 GB | 6.8 GB | +400 MB |
| 实际使用 | ~3.0 GB | ~1.9 GB | -1.1 GB |
5.4 存储空间对比
| 分区 | 裁剪前 | 裁剪后 | 减少 |
|---|---|---|---|
| /system | 1.1G | 916M | -184M |
| /product | 290M | 231M | -59M |
| 总计 | - | - | -243M |
6、常见问题
Q1: filter-out 为什么无效?
原因 :filter-out 只能过滤已添加 的包,后续 += 添加的包不会被过滤。
解决 :直接注释源文件中的 PRODUCT_PACKAGES += 语句。
Q2: 属性为什么无法设置?
原因 :SELinux 权限限制,自定义属性需要在 property_contexts 中定义上下文。
解决 :在 sepolicy/property_contexts 中添加属性定义。
Q3: 为什么用 persist.config 而不是 ro.config?
原因 :ro.config.* 属性在 vendor 分区有权限限制,无法通过 PRODUCT_PROPERTY_OVERRIDES 设置。
解决 :使用 persist.config.* 前缀,并添加 SELinux 上下文定义。
Q4: 编译后服务仍然存在?
原因:可能是编译缓存问题。
解决 :执行 make clean 后重新编译,或删除 out 目录。
Q5: 删除某个应用后系统异常?
原因:其他应用或系统组件依赖该应用。
解决 :检查依赖关系,保留必要应用。使用 git diff 回滚修改。
7、附录
7.1 修改文件清单
build/make
build/make/target/product/handheld_product.mkbuild/make/target/product/handheld_system.mkbuild/make/target/product/handheld_system_ext.mkbuild/make/target/product/full_base.mk
device/rockchip
device/rockchip/common/device.mkdevice/rockchip/common/modules/rockchip_apps.mkdevice/rockchip/common/modules/camera_aidl.mkdevice/rockchip/rockchip_generic/devicecommon.mkdevice/rockchip/rk3576/rk3576_a16/system_trim.mkdevice/rockchip/rk3576/rk3576_a16/sepolicy/property_contexts(新增)
frameworks/base
frameworks/base/services/java/com/android/server/SystemServer.java
8、完整补丁内容
8.1 build/make/target/product/handheld_product.mk
diff
--- a/build/make/target/product/handheld_product.mk
+++ b/build/make/target/product/handheld_product.mk
@@ -24,13 +24,18 @@
$(call inherit-product, $(SRC_TARGET_DIR)/product/media_product.mk)
# /product packages
+# RK-MODIFY: System trim - removed unnecessary apps
PRODUCT_PACKAGES += \
LatinIME \
preinstalled-packages-platform-handheld-product.xml \
- Browser2 \
- Calendar \
- Camera2 \
- Contacts \
- DeskClock \
- Gallery2 \
- Music \
- QuickSearchBox \
- SettingsIntelligence \
frameworks-base-overlays
+# Removed apps:
+# Browser2 \
+# Calendar \
+# Camera2 \
+# Contacts \
+# DeskClock \
+# Gallery2 \
+# Music \
+# QuickSearchBox \
+# SettingsIntelligence \
+
PRODUCT_PACKAGES_DEBUG += \
frameworks-base-overlays-debug
8.2 build/make/target/product/handheld_system.mk
diff
--- a/build/make/target/product/handheld_system.mk
+++ b/build/make/target/product/handheld_system.mk
@@ -26,26 +26,35 @@
PRODUCT_PACKAGES += \
android.software.window_magnification.prebuilt.xml \
- BasicDreams \
BlockedNumberProvider \
BluetoothMidiService \
BookmarkProvider \
BuiltInPrintService \
CalendarProvider \
cameraserver \
- CameraExtensionsProxy \
- CaptivePortalLogin \
- CertInstaller \
CredentialManager \
DeviceAsWebcam \
DeviceDiagnostics \
- DocumentsUI \
DownloadProviderUi \
EasterEgg \
ExternalStorageProvider \
FusedLocation \
InputDevices \
- KeyChain \
librs_jni \
- ManagedProvisioning \
MmsService \
MtpService \
- MusicFX \
- PacProcessor \
preinstalled-packages-platform-handheld-system.xml \
- PrintRecommendationService \
- PrintSpooler \
PrivateSpace \
ProxyHandler \
screenrecord \
SecureElement \
SharedStorageBackup \
SimAppDialog \
TeleService \
- Traceur \
UserDictionaryProvider \
VpnDialogs \
vr \
+# RK-MODIFY: System trim - removed unnecessary apps
+# BasicDreams \
+# CameraExtensionsProxy \
+# CaptivePortalLogin \
+# CertInstaller \
+# DocumentsUI \
+# KeyChain \
+# ManagedProvisioning \
+# MusicFX \
+# PacProcessor \
+# PrintRecommendationService \
+# PrintSpooler \
+# Traceur \
@@ -59,8 +68,10 @@
PRODUCT_SYSTEM_SERVER_APPS += \
FusedLocation \
InputDevices \
- KeyChain \
+# RK-MODIFY: System trim - removed KeyChain
+# KeyChain \
+
# Optional packages
PRODUCT_PACKAGES += \
EasterEgg \
8.3 build/make/target/product/handheld_system_ext.mk
diff
--- a/build/make/target/product/handheld_system_ext.mk
+++ b/build/make/target/product/handheld_system_ext.mk
@@ -23,8 +23,10 @@
Provision \
Settings \
StorageManager \
SystemUI \
- WallpaperCropper \
+# RK-MODIFY: System trim - removed WallpaperCropper
+# WallpaperCropper \
+
PRODUCT_SYSTEM_EXT_PROPERTIES += \
ro.config.notification_sound=OnTheHunt.ogg \
ro.config.alarm_alert=Alarm_Classic.ogg
8.4 build/make/target/product/full_base.mk
diff
--- a/build/make/target/product/full_base.mk
+++ b/build/make/target/product/full_base.mk
@@ -26,10 +26,13 @@
PRODUCT_PACKAGES := \
libfwdlockengine \
WAPPushManager
PRODUCT_PACKAGES += \
- LiveWallpapersPicker \
- PhotoTable \
preinstalled-packages-platform-full-base.xml
+# RK-MODIFY: System trim - removed LiveWallpapersPicker and PhotoTable
+# LiveWallpapersPicker \
+# PhotoTable \
+
# Audio HAL
PRODUCT_PACKAGES += \
audio.a2dp.default \
8.5 device/rockchip/common/device.mk
diff
--- a/device/rockchip/common/device.mk
+++ b/device/rockchip/common/device.mk
@@ -670,9 +670,12 @@
$(call inherit-product, device/rockchip/common/modules/rockchip_apps_box.mk)
else # tablet
- PRODUCT_PACKAGES += \
- SoundRecorder
+# RK-MODIFY: System trim - removed SoundRecorder
+# PRODUCT_PACKAGES += \
+# SoundRecorder
+
ifneq ($(strip $(BUILD_WITH_GOOGLE_GMS_EXPRESS)),true)
-PRODUCT_PACKAGES += \
- Music \
- WallpaperPicker
+# RK-MODIFY: System trim - removed Music and WallpaperPicker
+# PRODUCT_PACKAGES += \
+# Music \
+# WallpaperPicker
$(call inherit-product, device/rockchip/common/modules/rockchip_apps.mk)
8.6 device/rockchip/common/modules/rockchip_apps.mk
diff
--- a/device/rockchip/common/modules/rockchip_apps.mk
+++ b/device/rockchip/common/modules/rockchip_apps.mk
@@ -16,9 +16,12 @@
# limitations under the License.
#
-PRODUCT_PACKAGES += \
- RKDeviceTest \
- Chromium \
- LiveWallpapersPicker \
- RkVideoPlayer \
- RkExplorer \
- StressTest \
- RKUpdateService
+# RK-MODIFY: System trim - disabled Rockchip apps
+# PRODUCT_PACKAGES += \
+# RKDeviceTest \
+# Chromium \
+# LiveWallpapersPicker \
+# RkVideoPlayer \
+# RkExplorer \
+# StressTest \
+# RKUpdateService
8.7 device/rockchip/common/modules/camera_aidl.mk
diff
--- a/device/rockchip/common/modules/camera_aidl.mk
+++ b/device/rockchip/common/modules/camera_aidl.mk
@@ -91,7 +91,9 @@
# Camera Extension HAL (AIDL version)
PRODUCT_PACKAGES += \
vendor.rockchip.hardware.rkcamext-service
-PRODUCT_PACKAGES += rkCamera2
+# RK-MODIFY: System trim - removed rkCamera2
+# PRODUCT_PACKAGES += rkCamera2
PRODUCT_PACKAGES += librkcamext_hdmi_jni
else
8.8 device/rockchip/rockchip_generic/devicecommon.mk
diff
--- a/device/rockchip/rockchip_generic/devicecommon.mk
+++ b/device/rockchip/rockchip_generic/devicecommon.mk
@@ -84,9 +84,12 @@
PRODUCT_PACKAGES += com.rockchip.fwkservices
-PRODUCT_PACKAGES += ExactCalculator \
- SoundRecorder \
- wakeup-alarmalign-whitelist.xml \
- librockchipxxx
+# RK-MODIFY: System trim - removed ExactCalculator and SoundRecorder
+# PRODUCT_PACKAGES += ExactCalculator \
+# SoundRecorder \
+# wakeup-alarmalign-whitelist.xml \
+# librockchipxxx
+PRODUCT_PACKAGES += \
+ wakeup-alarmalign-whitelist.xml \
+ librockchipxxx
PRODUCT_COPY_FILES += \
8.9 device/rockchip/rk3576/rk3576_a16/sepolicy/property_contexts (新增)
# RK-MODIFY: System trim service disable properties
persist.config.disable_midi_service u:object_r:vendor_system_public_prop:s0
persist.config.disable_serial_service u:object_r:vendor_system_public_prop:s0
persist.config.disable_vpn_service u:object_r:vendor_system_public_prop:s0
persist.config.disable_telecom_service u:object_r:vendor_system_public_prop:s0
persist.config.disable_usb_service u:object_r:vendor_system_public_prop:s0
persist.config.disable_webview_service u:object_r:vendor_system_public_prop:s0
persist.config.disable_vcn_service u:object_r:vendor_system_public_prop:s0
8.10 device/rockchip/rk3576/rk3576_a16/system_trim.mk
diff
--- a/device/rockchip/rk3576/rk3576_a16/system_trim.mk
+++ b/device/rockchip/rk3576/rk3576_a16/system_trim.mk
@@ -1,3 +1,18 @@
#
# System Trim Configuration for rk3572_a16
# RK-MODIFY: Remove unnecessary APKs and services
#
+
+# ============================================================
+# 禁用 MIDI 服务 - 平板设备通常不需要
+# ============================================================
+PRODUCT_PROPERTY_OVERRIDES += persist.config.disable_midi_service=true
+
+# ============================================================
+# 禁用串口服务 - 大多数设备不需要
+# ============================================================
+PRODUCT_PROPERTY_OVERRIDES += persist.config.disable_serial_service=true
+
+# ============================================================
+# 禁用 VPN/Telecom 服务
+# ============================================================
+PRODUCT_PROPERTY_OVERRIDES += persist.config.disable_vpn_service=true
+PRODUCT_PROPERTY_OVERRIDES += persist.config.disable_telecom_service=true
8.11 frameworks/base/services/java/com/android/server/SystemServer.java
WebViewUpdateService
diff
--- a/frameworks/base/services/java/com/android/server/SystemServer.java
+++ b/frameworks/base/services/java/com/android/server/SystemServer.java
@@ -1488,9 +1488,14 @@
// Tracks whether the updatable WebView is in a ready state and watches for update installs.
if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_WEBVIEW)) {
- t.traceBegin("StartWebViewUpdateService");
- mWebViewUpdateService = mSystemServiceManager.startService(WebViewUpdateService.class);
- t.traceEnd();
+ // RK-MODIFY: System trim - allow disabling WebViewUpdateService
+ if (!"true".equals(SystemProperties.get("persist.config.disable_webview_service"))) {
+ t.traceBegin("StartWebViewUpdateService");
+ mWebViewUpdateService = mSystemServiceManager.startService(WebViewUpdateService.class);
+ t.traceEnd();
+ } else {
+ Slog.i(TAG, "WebViewUpdateService disabled by system property");
+ }
}
TelecomLoaderService
diff
@@ -1628,9 +1633,14 @@
if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_MICROPHONE)
|| mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELECOM)
|| mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
- t.traceBegin("StartTelecomLoaderService");
- mSystemServiceManager.startService(TelecomLoaderService.class);
- t.traceEnd();
+ // RK-MODIFY: System trim - allow disabling TelecomLoaderService
+ if (!"true".equals(SystemProperties.get("persist.config.disable_telecom_service"))) {
+ t.traceBegin("StartTelecomLoaderService");
+ mSystemServiceManager.startService(TelecomLoaderService.class);
+ t.traceEnd();
+ } else {
+ Slog.i(TAG, "TelecomLoaderService disabled by system property");
+ }
}
VpnManagerService
diff
@@ -2312,14 +2326,19 @@
if (!isWatch || !android.server.Flags.allowRemovingVpnService()) {
- t.traceBegin("StartVpnManagerService");
- try {
- vpnManager = VpnManagerService.create(context);
- ServiceManager.addService(Context.VPN_MANAGEMENT_SERVICE, vpnManager);
- } catch (Throwable e) {
- reportWtf("starting VPN Manager Service", e);
- }
- t.traceEnd();
+ // RK-MODIFY: System trim - allow disabling VpnManagerService
+ if (!"true".equals(SystemProperties.get("persist.config.disable_vpn_service"))) {
+ t.traceBegin("StartVpnManagerService");
+ try {
+ vpnManager = VpnManagerService.create(context);
+ ServiceManager.addService(Context.VPN_MANAGEMENT_SERVICE, vpnManager);
+ } catch (Throwable e) {
+ reportWtf("starting VPN Manager Service", e);
+ }
+ t.traceEnd();
+ } else {
+ Slog.i(TAG, "VpnManagerService disabled by system property");
+ }
}
VcnManagementService
diff
@@ -2333,6 +2358,12 @@
// TODO: b/374174952 In the end state, VCN registration will be moved to Tethering
// module. Thus the following code block should be removed after Baklava is released
if (!VcnLocation.IS_VCN_IN_MAINLINE || !SdkLevel.isAtLeastB()) {
+ // RK-MODIFY: System trim - allow disabling VcnManagementService
+ if ("true".equals(SystemProperties.get("persist.config.disable_vcn_service"))) {
+ Slog.i(TAG, "VcnManagementService disabled by system property");
+ return;
+ }
t.traceBegin("StartVcnManagementService");
MidiService
diff
@@ -2520,9 +2530,14 @@
if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_MIDI)) {
// Start MIDI Manager service
- t.traceBegin("StartMidiManager");
- mSystemServiceManager.startService(MidiService.Lifecycle.class);
- t.traceEnd();
+ // RK-MODIFY: System trim - allow disabling MidiService
+ if (!"true".equals(SystemProperties.get("persist.config.disable_midi_service"))) {
+ t.traceBegin("StartMidiManager");
+ mSystemServiceManager.startService(MidiService.Lifecycle.class);
+ t.traceEnd();
+ } else {
+ Slog.i(TAG, "MidiService disabled by system property");
+ }
}
UsbService
diff
@@ -2540,9 +2555,14 @@
// Start USB Service
if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)
|| mPackageManager.hasSystemFeature(
PackageManager.FEATURE_USB_ACCESSORY)
|| Build.IS_EMULATOR) {
- t.traceBegin("StartUsbService");
- mSystemServiceManager.startService(UsbService.Lifecycle.class);
- t.traceEnd();
+ // RK-MODIFY: System trim - allow disabling UsbService
+ if (!"true".equals(SystemProperties.get("persist.config.disable_usb_service"))) {
+ t.traceBegin("StartUsbService");
+ mSystemServiceManager.startService(UsbService.Lifecycle.class);
+ t.traceEnd();
+ } else {
+ Slog.i(TAG, "UsbService disabled by system property");
+ }
}
SerialService
diff
@@ -2558,12 +2584,17 @@
} else {
if (!isWatch) {
- t.traceBegin("StartSerialService");
- mSystemServiceManager.startService(SerialService.Lifecycle.class);
- t.traceEnd();
+ // RK-MODIFY: System trim - allow disabling SerialService
+ if (!"true".equals(SystemProperties.get("persist.config.disable_serial_service"))) {
+ t.traceBegin("StartSerialService");
+ mSystemServiceManager.startService(SerialService.Lifecycle.class);
+ t.traceEnd();
+ } else {
+ Slog.i(TAG, "SerialService disabled by system property");
+ }
}
}