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

2023-05-16

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

欢迎和我一起交流。


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android系统学习(六)------裁剪Android系统 的相关文章

  • error while loading shared libraries: lib*.so: cannot open shared object file: No such file

    linux在编译文件时报错 xff1a slam sample error span class token keyword while span loading shared libraries libslam common so can
  • (1/100) ros的plugin插件和动态参数配置dynamic_reconfigure

    写在前面 xff1a 实际机器人开发中 xff0c 往往会存在很多参数 xff0c 这些参数需要在实际的调试中得出 xff0c 为了更高效的开发与测试 xff0c 则选择使用动态的参数配置 而在机器人功能模块层面 xff0c 我们可能也需要
  • 重定向printf函数到串口输出的多种方法

    本文详细的介绍了如何重定向printf输出到串口输出的多种方法 xff0c 包括调用MDK微库 xff08 MicroLib xff09 的方法 xff0c 调用标准库的方法 xff0c 以及适用于 GNUC 系列编译器的方法 1 prin
  • 如何修复烧写镜像文件失败的SD卡

    前言 使用某些软件 xff08 比如 win32 Disk Imager xff09 向SD卡烧写镜像文件时 xff0c 很有可能出现烧写失败的情况 xff0c 通常如果烧写失败 xff0c 系统会弹出请求格式化SD卡的提示框 此时不要点格
  • FreeRTOS学习笔记(一)基础篇

    我的FreeRTOS学习 xff0c 是从朱工的FreeRTOS系列博客开始的 xff0c 感谢朱工的悉心整理 xff0c 文章很不错 xff0c 适合学习 根据朱工的博客 xff0c 按照我自己的习惯和思路 xff0c 把最关键的信息抓取
  • 程序员要不要懂底层原理

    我在做编程的时候 xff0c 还是一个地道的门外汉 xff0c 就像一个刚出生的孩子 xff0c 跟着大人咿呀呀的学语 xff0c 也不知道是什么 xff0c 做什么用的 xff0c 也不知道能不能换种方式实现 xff0c 总结起来就是一问
  • Z变换零点极点

    在Z变换里 xff0c 零点的位置表示系统的 谷 xff0c 极点的位置表示系统的 峰 xff0c 我们把有峰的地方看做信号可以通过的地方 xff0c 而有谷的地方看做信号被截止的地方 并且我们选择单位圆为频域的一个周期 xff0c 那么可
  • ubuntu16.04下ROS Kinetic详细安装过程

    参考网址 xff1a 点击打开链接 参考文献 xff1a ROS机器人编程 配置环境 xff1a ubuntu 16 04 LTS 43 ROS Kinetic 一 安装ROS 1 设置镜像源 为了保证安装速度 xff0c 需要选择国内的镜
  • vscode环境中配置git

    1 建立project空目录用于存放electron基本环境这个环境中得文件不能加入git项目中否则每次更新文件太大github不支持大于100M得文件上传 2 使用vscode打开project目录 3 打开终端运行npm install
  • idea 主题 代码颜色 代码区背景 行号背景 注释颜色修改

    最近写代码眼睛总是看的不舒服 xff0c 想着换一个主题 xff0c 但是换了主题 xff0c 代码的颜色显示和之前又不一样了 xff0c 接下来就是修改主题 xff0c 但是代码颜色仍然保持 Darcula 主题的颜色 目录 1 修改主题
  • RTT之SysTick做了什么

    经过好几天的摸索 xff0c 终于正常驱动了一个串口设备 xff0c 并成功移植到雅特力的板子上 xff01 当然 xff0c 还得继续努力把RTT的内核搞清楚 xff0c 这样才会构建整个项目程序 xff0c 毕竟项目是有时间限制的 因为
  • realSense 安装 经验整理

    安装 RealSense SDK 以ros 参考1 参考二 主要看参考三 标定 标定 以上内容安装失败 Realense sdk和ros对应关系 jetson jetson 一键安装sdk 官方安装 jetson4 4 xavier nx
  • 吴恩达machine learning yearning读书笔记1

    在 setting up development set and test set 这一章中 xff0c 作者提到了一个很重要的问题 训练集和测试集分布不一致导致的机器学习模型泛化能力有限 xff1a 在训练集上表现比较好 xff0c 但是
  • 图像畸变与去畸变

    本文主要介绍图像畸变产生的原因 xff0c 广角镜头的一般畸变模型和去畸变的方法 1 图像畸变 图像畸变是由于透镜制造精度以及组装工艺的偏差会引入畸变 xff0c 导致原始图像失真 镜头的畸变分为径向畸变和切向畸变两类 1 1 径向畸变与畸
  • Linux C编程问题:symbol lookup error: xxx undefined symbol xxx

    程序代码在编译的时候没问题 xff0c 但是在运行的时候报错 xff1a bin symbol lookup error bin undefined symbol xxx 百度了一下 xff0c 貌似是程序运行时使用的动态库和编译时make
  • Docker自动从Harbor下更新镜像

    JAVA开发Docker容器下自动更新镜像仓库的工具 前段时间在做一套分布式多租户系统 xff0c 它包括控制平台和应用服务器两部分 xff0c 应用服务器为企业客户服务 xff0c 系统会为每家企业建立一个应用服务器实例 xff0c 它存
  • C++中的exit函数

    描述 xff1a 用来立即中止当前程序的执行 xff0c 并将一个整数返回给系统 xff0c 该整数的作用与 由mian函数返回的整数 相同 xff0c 如果是0表示程序正常退出 xff1b 如果非0表示程序异常退出 头文件 span cl
  • 将uint8_t类型的16进制字符转化转换为string字符串

    碰到一个需求 xff0c 需要把硬件读到的uint8 t类型的16进制数据转化为string类型的字符串 例如 xff0c 如果读到到的数据是一个uint8 t类型的数组uint8 t code 61 5 61 0XAA 0X01 0XE3
  • C++解析json文件

    文章目录 1 JSON文件简介 1 1 1 JSON文件的语法规则1 2 JSON值的类型 2 JSON文件解析 1 JSON文件简介 1 一个项目在设计时会存在很多参数 xff0c 比如data文件路径 外设名称与相关参数 文件储存路径等
  • YOLO-YOLOV5算法原理及网络结构整理

    文章目录 零 参考链接一 前言1 1 YOLO vs Faster R CNN 二 YOLOv1 xff08 448 448 xff09 2 1实现方法2 2 损失函数2 3 leak RELU激活函数2 4总结 三 YOLOV23 1 Y

随机推荐