Android 系统精简思路

tech2023-07-26  102

Android 系统精简思路

文章目录

Android 系统精简思路Android框架层次层次(从上往下)移除 删除(还没有删,待确认)不同层次的log另一种删除预装APK方法

Android框架层次

层次(从上往下)

应用程序层(Application)应用程序框架层(Application Framework)运行时库层(Runtime)硬件抽象层(HAL)Linux内核层(Linux kernel)

移除

应用程序层:移除APP/可执行文件(已经删除谷歌和高通的一部分APP了)应用程序框架层:移除资源:图片/音视频/字库/语言包运行时库层(Runtime)硬件抽象层(HAL):移除JNI生成的SOLinux内核层(Linux kernel):移除驱动/关闭后台服务

删除(还没有删,待确认)

字库:frameworks/base/data/fonts铃声:frameworks/base/data/sounds视频:frameworks/base/data/videos键盘:frameworks/base/data/keyboards环境权限等配置:frameworks/base/data/etc安装包:frameworks/base/packagesGoogle VR:frameworks/base/vr

注意

不要删除源文件先把xml里的配置删除,再在Android.mk里删除资源文件名称(即不复制到image中) 1. build/target/product是编译产品关键的mk文件存放处,此处可以更改各个mk文件编译内容进行裁剪 base.mk文件:去除不必要的lib库文件和bin文件 core_minimal.mk:dmtracedump, Shell, HTMLViewer, screencap等工具和apk等 core.mk: libnfc_ndef, mms-common nfc功能库文件和mms短信功能等 embedded.mk:dumpstate, dumpsys emulator.mk: camera.goldfish , camera.goldfish.jpeg , lights.goldfish , gps.goldfish等 full_base.mk: 去除不需要的库和apk full_base_telephony.mk: 去除apk和电话功能 generic_no_telephony.mk:去除apk和不必要的库 languages_full.mk,locales_full.mk: 去除不需要的语言设置(可以去除res包的大小) 1. external/icu4c/stubdata/icu-data-default.txt: 修改此文件,去除编译出的icu.dat文件大小,去除不需要的语言,重新用脚本生成想要的dat文件 external/skia/Android.mk: 去除其中test的编译 2. frameworks/base/data/etc/platform.xml: 去除不需要的属性 frameworks/base/data/fonts/Android.mk: 去除不需要的字体 frameworks/base/data/fonts/fallback_fonts.xml: 去除不需要的字体 frameworks/base/data/fonts/fonts.mk: 去除不需要的字体 3. frameworks/base/data/sounds/AllAudio.mk: 去除不需要的声音文件(除了ui的保留,其他都可以去除) frameworks/base/data/videos/VideoPackage1.mk: 去除不需要的视频文件 frameworks/native/data/etc/handheld_core_hardware.xml: 去除不需要的属性 frameworks/native/data/etc/tablet_core_hardware.xml:去除不需要的属性 frameworks/base/preloaded-classes: 裁剪不必要的资源加载 4. init.rc: 裁剪不需要的本地服务 system.prop: 裁剪不必要的属性内容

不同层次的log

java层:Log.v()framework层:Slog.v()HAL:LOGV()JNI:LOGV()

另一种删除预装APK方法

# device/qcom/msm8953_64/msm8953_64.mk # 这里定义了PRODUCT_PACKAGES # build/core/main.mk # 这里加载了PRODUCT_PACKAGES # 再过滤过滤 ifdef FULL_BUILD # The base list of modules to build for this product is specified # by the appropriate product definition file, which was included # by product_config.mk. product_MODULES := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES) ifdef BOARD_VNDK_VERSION product_MODULES += vndk_package endif # Filter out the overridden packages before doing expansion product_MODULES := $(filter-out $(foreach p, $(product_MODULES), \ $(PACKAGES.$(p).OVERRIDES)), $(product_MODULES)) # Filter out executables as well product_MODULES := $(filter-out $(foreach m, $(product_MODULES), \ $(EXECUTABLES.$(m).OVERRIDES)), $(product_MODULES))

作者 [@lhgcs] 2020 年 09月 03

最新回复(0)