你好!这里是风筝的博客,
欢迎和我一起交流。
经过前面几篇博客的编译步骤,成功的编出了Android系统,但是发现编出来的system.img有点大了,有差不多1.7G,怎么对它进行裁剪,缩小system.img体积呢?
从网上找了文章,手段大体如下:
- 1.Android应用裁剪
也就是删除预装的APP软件,我的是Android N,在packages/apps/目录下有这么写APP:
fengzheng@ubuntu:/work/nanopc-t4-nougat$ ls packages/apps/
BasicSmsReceiver CellBroadcastReceiver EmergencyInfo LegacyCamera Phone SoundRecorder TV
Bluetooth CertInstaller ExactCalculator ManagedProvisioning PhoneCommon SpareParts TvSettings
Browser Contacts Gallery Messaging Protips SpeechRecorder UnifiedEmail
Browser2 ContactsCommon Gallery2 Music Provision Stk WallpaperPicker
Calculator DeskClock HTMLViewer MusicFX QuickSearchBox StorageManager
Calendar DevCamera KeyChain Nfc RetailDemo Tag
Camera2 Dialer Launcher2 OneTimeInitializer SafetyRegulatoryInfo Terminal
CarrierConfig Email Launcher3 PackageInstaller Settings Test
这里面每个APP的用途基本都可以从其名字可以看出,或者直接网上搜也可以搜得到:
packages 目录
|-- apps (应用程序库)
| |-- AlarmClock (闹钟)
| |-- Bluetooth (蓝牙)
| |-- Browser (浏览器)
| |-- Calculator (计算器)
| |-- Calendar (日历)
| |-- Camera (相机)
| |-- CertInstaller (在Android中安装数字签名,被调用)
| |-- Contacts (拨号(调用)、联系人、通话记录)
| |-- DeskClock (桌面时钟)
| |-- Email (Email)
| |-- Gallery (相册,和Camera类似,多了列表)
| |-- Gallery3D (3D相册)
| |-- GlobalSearch (为google搜索服务,提供底层应用)
| |-- GoogleSearch (google搜索)
| |-- HTMLViewer (浏览器附属界面,被浏览器应用调用,同时提供存储记录功能)
| |-- IM (即时通讯,为手机提供信号发送、接收、通信的服务)
| |-- Launcher (登陆启动项,显示图片框架等等图形界面)
| |-- Launcher2 (登陆启动项,负责应用的调用)
| |-- Messaging (短信)
| |-- Music (音乐播放器)
| |-- PackageInstaller (安装、卸载程序的响应)
| |-- Phone (电话拨号程序)
| |-- Provision (预设应用的状态,使能应用)
| |-- Settings (开机设定,包括电量、蓝牙、设备信息、界面、wifi等)
| |-- SoundRecorder (录音机,可计算存储所需空间和时间)
| |-- Stk (接收和发送短信)
这些可以按需删除,比如我不需要打电话、发短信、相机等功能,最后只保留如下:
fengzheng@ubuntu:/work/nanopc-t4-nougat$ ls packages/apps/
BasicSmsReceiver Launcher2 MusicFX Protips Settings StorageManager WallpaperPicker
CarrierConfig Launcher3 OneTimeInitializer Provision SoundRecorder Tag
EmergencyInfo ManagedProvisioning PackageInstaller QuickSearchBox SpareParts Terminal
KeyChain Music PhoneCommon SafetyRegulatoryInfo SpeechRecorder Test
除了packages/apps/目录下有APP,一些厂商也会预装自己的APP,其在vendor/目录下。
例如我的设备是rockchip厂商的产品,rk家的APP在vendor/rockchip/common/apps/目录:
fengzheng@ubuntu:/work/nanopc-t4-nougat$ ls vendor/rockchip/common/apps/
AllApp ituxd projectX RkApkinstaller RKGameControlSettingV1.0.1 RkVideoPlayer RockVRHome
apps.mk itvlauncher RFTest RkBoxVideoPlayer RKMC RKVRExplorer Settings2
ChangeLedStatus Lightning Rk3grExplorer RKDeviceTest RkMusic RKVRGlobalActions SimpleLauncher
DeviceTest MediaCenter Rk3grVideoPlayer RkEbookReader RKTvLauncher RKVRPanorama StressTest
eHomeMediaCenter_box MediaFloat Rk4kVideoPlayer RkExpe RKUpdateService RKVRPlayer WifiDisplay
GoogleEmail PinyinIME RkAlarmHelper RkExplorer RkUserExperienceService RKVRSettings WinStartService
同样的,也是按需删除,最后我保留如下:
fengzheng@ubuntu:/work/nanopc-t4-nougat$ ls vendor/rockchip/common/apps/
AllApp eHomeMediaCenter_box PinyinIME Rk3grVideoPlayer RKDeviceTest RKUpdateService RKVRExplorer SimpleLauncher
apps.mk MediaCenter projectX RkApkinstaller RKMC RkUserExperienceService RockVRHome WifiDisplay
DeviceTest MediaFloat Rk3grExplorer RkBoxVideoPlayer RkMusic RkVideoPlayer Settings2 WinStartService
最后!还有一个地方有APP,真滴是多。。。。
在vendor/google/gapps/目录下,有一些Google服务和APP,我不需要,直接把整个google目录删除了:
rm vendor/google
其实packages/目录下还有一些其他APP,如packages/sreensavers、packages/wallpapers/目录等,懒得删了,先留着。
这时候make snod出来的system.img还是有1.5G,成功减少了100M大小。
- 2.Android服务裁剪。
这一块,说实话,网上文章一大抄,找了多篇文章,这部分内容都是一样的,都是一篇抄一篇,来来去去都是那些内容,给我整吐了。。。。。
不好还是有点有用的信息,也就是build/target/product目录下的mk文件。
build/target/product是编译产品关键的mk文件存放处,此处可以更加各个mk文件编译内容进行裁剪
修改内容如下:
- base.mk:
- 删除cameraserver,libcamera*等,我不需要camera。
- 删除monkey,我不需要monkey测试。
- 删除mtpd ,bmgr(数据备份管理)。
- 删除wifi,我不需要wifi
- core.mk:
- 删除Browser,我不需要浏览器。
- 删除keychain,不需要密码管理。
- 删除vpndialogs,没有vpn。
- 删除pacprocessor、libpac。
- core_minimal.mk:
- 删除HTMLViewer。
- 删除gatekeeper、libgatekeeper密码管理相关的东西。
- 删除keystore、libkeystore一个有效的安全钥匙和证书的管理工具。
- 删除uiautomator UI测试工具。
- 删除idmap配置和管理本机标识映射服务。
- 删除CtsShimPrivPrebuilt和ctsshimprebuilt测试相关。
- 删除webview、screencap、telephony-common、wallpaperbackup。web、截屏、电话、壁纸,都不需要。
- emulator.mk:
- 删除camera.goldfish , camera.goldfish.jpeg,不需要camera。
- 删除lights.goldfish , gps.goldfish等。
- core_base.mk:
- 删除atrace,libnfc_ndef,wifi-service
上面这些就是照着网上那些文章然后结合我实验出来的,有些东西删了系统就起不来或者有依赖关系,删除了就编译报错了。
其实剪裁最好还是剪裁device目录下的文件,里面找到厂家的配置,一般裁剪厂家配置也足够了。
我的是rk3399板子,在devick/rk3399目录有如下mk文件:
- device.mk:
- 删除wallpaperpicker和retaildemo
- nanopi_t4.mk:
- 删除camera内容
- device/rockchip/rk3399/AndroidProducts.mk:
- box等,只保留rk3399的mk
- BoardConfig.mk:
- BOARD_SENSOR_MPU_VR设置为false
经过这些操作,发现编出来的system.img只有1.1G这么大了。
参考:Android 高通8909 系统之路之 裁剪系统 一
Android源码里packages里面的结构~~~
添加/删除 Android里app源码:
android系统源码中添加app源码(源码部署移植)
后记:
sudo vi device/rockchip/rk3399/nanopc-t4/system.prop
ro.sf.hwrotation=0
修改默认字体大小:
vi packages/apps/Settings/res/values/arrays.xml
在里面找到entryvalues_font_size数组:
<string-array name="entryvalues_font_size" translatable="false">
<item>0.85</item>
<item>1.0</item>
<item>1.15</item>
<item>1.30</item>
</string-array>
这个文件里面有好多东西,还有比如锁屏时间什么的,一大堆,我们这里只关心字体大小,对应4个数值,算是:“小”、“普通”、“大”、“超大”。记住这些数值。
sudo vi frameworks/base/core/java/android/content/res/Configuration.java
找到setToDefaults方法:
/**
* Set this object to the system defaults.
*/
public void setToDefaults() {
fontScale = 1;
mcc = mnc = 0;
mLocaleList = LocaleList.getEmptyLocaleList();
locale = null;
userSetLocale = false;
把fontScale 改成你要的对应字体的数值即可。如:
fontScale = 1.3f;
参考:https://blog.csdn.net/wzh048503/article/details/79026231
https://blog.csdn.net/pwl999/article/details/80514271