Android系统学习(六)------裁剪Android系统

你好!这里是风筝的博客,

欢迎和我一起交流。


经过前面几篇博客的编译步骤,成功的编出了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

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值