• Android平台应用裁剪


    一、背景

            随着移动应用和系统功能的不断增加,MTK平台上的设备需要更多的计算资源和存储空间。但在某些情况下,这会导致性能下降、电池寿命减少或设备运行速度变慢。因此,需要应用裁剪,即对不必要的、不常用的应用程序和功能进行删除或禁用,以优化设备性能,提高用户体验,降低生产成本。

            MTK平台应用裁剪不仅有助于提高设备性能,还可以减少资源消耗,增加设备的稳定性和寿命,对于满足不同市场需求和设备类型也具备灵活性。

    二、方案介绍

    2.1传统的裁剪方法

            需要找打对应产品的mk文件,遍历各个应用被编译的地方,然后通过删减或禁用响应的宏来裁剪对应的应用或者服务,例如: 

    1. diff --git a/build/make/target/product/handheld_product.mk b/build/make/target/product/handheld_product.mk
    2. index 2199c57..f9f5d81 100644
    3. --- a/build/make/target/product/handheld_product.mk
    4. +++ b/build/make/target/product/handheld_product.mk
    5. @@ -22,17 +22,8 @@ $(call inherit-product, $(SRC_TARGET_DIR)/product/media_product.mk)
    6. # /product packages
    7. PRODUCT_PACKAGES += \
    8. - Browser2 \
    9. - Calendar \
    10. Camera2 \
    11. - Contacts \
    12. - DeskClock \
    13. - Gallery2 \
    14. - LatinIME \
    15. - Music \
    16. - OneTimeInitializer \
    17. preinstalled-packages-platform-handheld-product.xml \
    18. - QuickSearchBox \
    19. SettingsIntelligence \
    20. frameworks-base-overlays
    21. diff --git a/build/make/target/product/handheld_system.mk b/build/make/target/product/handheld_system.mk
    22. index 77c103d..5be13e1 100644
    23. --- a/build/make/target/product/handheld_system.mk
    24. +++ b/build/make/target/product/handheld_system.mk
    25. @@ -32,13 +32,10 @@ $(call inherit-product-if-exists, frameworks/base/data/keyboards/keyboards.mk)
    26. $(call inherit-product-if-exists, frameworks/webview/chromium/chromium.mk)
    27. PRODUCT_PACKAGES += \
    28. - BasicDreams \
    29. BlockedNumberProvider \
    30. Bluetooth \
    31. BluetoothMidiService \
    32. - BookmarkProvider \
    33. BuiltInPrintService \
    34. - CalendarProvider \
    35. cameraserver \

    这种方法虽然也能达到裁剪应用的目的,但是容易遗漏,而且裁剪过于分散,非常不利于维护和后期移植到其他产品。

     2.2高效通用的裁剪方法

            可以通过修改build脚本,添加一个应用过滤的关键宏,来达到删减应用的目的,如下:

    1. diff --git a/build/make/core/main.mk b/build/make/core/main.mk
    2. index c63c6df..2befb6f 100644
    3. --- a/build/make/core/main.mk
    4. +++ b/build/make/core/main.mk
    5. @@ -1248,6 +1248,7 @@ define product-installed-files
    6. $(eval ### Filter out the overridden packages and executables before doing expansion) \
    7. $(eval _pif_overrides := $(call module-overrides,$(_pif_modules))) \
    8. $(eval _pif_modules := $(filter-out $(_pif_overrides), $(_pif_modules))) \
    9. + $(eval _pif_modules := $(filter-out $(PACKAGE_FILTER), $(_pif_modules))) \
    10. $(eval ### Resolve the :32 :64 module name) \
    11. $(eval _pif_modules := $(sort $(call resolve-bitness-for-modules,TARGET,$(_pif_modules)))) \
    12. $(call expand-required-modules,_pif_modules,$(_pif_modules),$(_pif_overrides)) \

            然后在对应的产品下,将需要裁剪的应用添加到这个宏下面即可,如:

    1. +PACKAGE_FILTER += \
    2. + MtkQuickSearchBox \
    3. + Browser2 \
    4. + Music \
    5. + CarBTDemo \
    6. + YGPS \
    7. + MtkCalendar \
    8. + Camera \
    9. + AOVTestsApp \
    10. + MtkContacts \
    11. + DuraSpeed \
    12. + AutoDialer \

     然后编译后,你裁剪的应用就都会消失啦。

    三、潜在的挑战和注意事项

            讨论应用裁剪可能会导致系统无法开机,也可能引发其他稳定性问题。“裁剪虽好,可不要贪杯哦”

  • 相关阅读:
    CentOS安装Docker-ce并配置国内镜像
    java计算机毕业设计苗木购销系统源码+系统+mysql数据库+lw文档
    ssm+vue的OA办公系统(有报告)。Javaee项目,ssm vue前后端分离项目。
    mac 脚本实现APP启动与关闭
    图文虚线之CGContextSetLineDash
    参数查阅~~~9.18
    mysql数据库基础:视图、变量
    Java后台开发中常用规范文档说明
    视图-什么是(VIEW)?怎么创建(CREATE VIEW)?怎么删除(DROP)?怎么用(SELECT/INSERT/UPDATE/DELETE)?
    vscode运行Live Server报错:Windows找不到文件Microsoft Edge
  • 原文地址:https://blog.csdn.net/u014645605/article/details/134077756