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
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RT-Thread诞生于2006年,是一款以开源、中立、社区化发展起来的物联网操作系统。 RT-Thread主要采用 C 语言编写,浅显易懂,且具有方便移植的特性(可快速移植到多种主流 MCU 及模组芯片上)。RT-Thread把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。 RT-Thread有完整版和Nano版,对于资源受限的微控制器(MCU)系统,可通过简单易用的工具,裁剪出仅需要 3KB Flash、1.2KB RAM 内存资源的 NANO 内核版本;而相对资源丰富的物联网设备,可使用RT-Thread完整版,通过在线的软件包管理工具,配合系统配置工具实现直观快速的模块化裁剪,并且可以无缝地导入丰富的软件功能包,实现类似 Android 的图形界面及触摸滑动效果、智能语音交互效果等复杂功能。 RT-Thread架构 RT-Thread是一个集实时操作系统(RTOS)内核、中间件组件的物联网操作系统,架构如下: 内核层:RT-Thread内核,是 RT-Thread的核心部分,包括了内核系统中对象的实现,例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;libcpu/BSP(芯片移植相关文件 / 板级支持包)与硬件密切相关,由外设驱动和 CPU 移植构成。 组件与服务层:组件是基于 RT-Thread内核之上的上层软件,例如虚拟文件系统、FinSH命令行界面、网络框架、设备框架等。采用模块化设计,做到组件内部高内聚,组件之间低耦合。 RT-Thread软件包:运行于 RT-Thread物联网操作系统平台上,面向不同应用领域的通用软件组件,由描述信息、源代码或库文件组成。RT-Thread提供了开放的软件包平台,这里存放了官方提供或开发者提供的软件包,该平台为开发者提供了众多可重用软件包的选择,这也是 RT-Thread生态的重要组成部分。软件包生态对于一个操作系统的选择至关重要,因为这些软件包具有很强的可重用性,模块化程度很高,极大的方便应用开发者在最短时间内,打造出自己想要的系统。RT-Thread已经支持的软件包数量已经达到 180+。 RT-Thread的特点: 资源占用极低,超低功耗设计,最小内核(Nano版本)仅需1.2KB RAM,3KB Flash。 组件丰富,繁荣发展的软件包生态 。 简单易用 ,优雅的代码风格,易于阅读、掌握。 高度可伸缩,优质的可伸缩的软件架构,松耦合,模块化,易于裁剪和扩展。 强大,支持高性能应用。 跨平台、芯片支持广泛。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值