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