Android TV ROM体积精简

  在目前的机顶盒ROM中,系统可以精简的地方有很多,本篇文章基于Android4.4.2系统,简单介绍下一些常见的系统精简方式。

一、update.zip结构简介

  要进行系统体积精简,首先就要了解update.zip的目录结构。各个芯片平台,都有定制过自己的update.zip,所以update.zip里的内容不是完全一样的,但有些公共性的文件是一样的,如

|----boot.img
|----system
      |----app
      |----bin
      |----lib
      |----etc
      ......
|----META-INF
      |----CERT.RSA
      |----CERT.SF
      |----MANIFEST.MF
      |----com
            |----android
                  |----metadata
                  |----otacert
            |----google
                  |----android
                       |----update-binary
                       |----updater-script

   1>boot.img
    boot.img是更新boot分区所需要的文件,主要包括kernel+ramdisk。
   2>system目录
    system目录的内容在升级后会放在系统的system分区,主要用来更新系统的apk、so、bin等,在系统源码中对应着out/target/product/xxx/system/中的所有文件。
   3>META-INF目录
    CERT.RSA:与签名文件相关联的签名程序块文件,它存储了用于签名JAR文件的公共签名。
    CERT.SF:JAR文件的签名文件,其中前缀CERT代表签名者。
    MANIFEST.MF:定义了与包的组成结构相关的数据,类似上层Android应用的mainfest.xml文件。
    metadata:描述设备信息及环境变量的元数据,主要包括一些编译选项,签名公钥,时间戳以及设备型号等。
    otacert:具体的签名检验文件,里面存放着签名校验的字符串。
    update-binary:二进制文件,相当于一 个脚本解释器,能够识别updater-script中描述的操作。
    updater-script:脚本文件,具体描述了更新过程。

二、系统体积精简

  此处指的是对update.zip体积进行精简,主要针对system目录进行,具体见于下文。

2.1 system/app

  该目录存放的是系统应用,基于Android4.4.2系统,可裁剪的应用见于下表:

分类 应用名称 包名 功能说明
墙纸 WallpaperCropper.apk com.android.wallpaper Basic动态墙纸
墙纸 Galaxy4.apk com.android.galaxy4 Galaxy4 动态墙纸
墙纸 HoloSpiral.aapk com.android.wallpaper.holospiral HoloSpiral动态墙纸
墙纸 LiveWallpapersPicker.apk com.android.wallpaper.livepicker 动态墙纸选择器
墙纸 MagicSmoke.apk com.android.magicsmoke MagicSmoke动态墙纸
墙纸 MusicVisualization.apk com.android.musicvis MusicVisualization动态墙纸
墙纸 NoiseField.apk com.android.noisefield NoiseField动态墙纸
墙纸 PhaseBeam.apk com.android.phasebeam PhaseBeam动态墙纸
屏保 BasicDreams.apk com.android.dreams.basic Basic屏保
屏保 PhotoTable.apk com.android.dreams.phototable PhotoTable屏保
屏保 WebViewDream.apk com.android.dreams.web WebView屏保
短信/彩信/电话 BasicSmsReceiver.apk com.android.basicsmsreceiver 基础短信接收
短信/彩信/电话 Mms.apk com.android.mms 彩信
短信/彩信/电话 Telephony.apk com.android.phone 电话应用
短信/彩信/电话 TelephonyProvider.apk com.android.providers.telephony 电话记录 Content Provider
短信/彩信/电话 VoiceDialer.apk com.android.voicedialer 语音拨号器
短信/彩信/电话 InCallUI.apk com.android.incallui 拨号盘
短信/彩信/电话 CellBroadcastReceiver.apk com.android.cellbroadcastreceiver 小区广播
通讯录 Contacts.apk com.android.contacts 联系人
通讯录 ContactsProvider.apk ContactsProvider 联系人 Content Provider
浏览器 Browser.apk com.android.Browser 系统浏览器
浏览器 HTMLViewer.apk com.android.htmlviewer 简易HTMLView
计算器 Calculator.apk com.android.calculator2 计算器
日历 Calendar.apk com.android.Calendar 日历
日历 CalendarProvider.apk com.android.providers.calendar 日程表 Content Provider
邮件 Email.apk com.android.email 邮件应用
邮件 UnifiedEmail.apk com.android.mail 邮件
图库 Gallery2.apk com.android.gallery3d 图库
相机/录音/视频编辑 Camera.apk com.android.camera 相机
相机/录音/视频编辑 Camera2.apk com.android.camera2 相机
相机/录音/视频编辑 SpeechRecorder.apk com.android.speechrecorder 语音录制
相机/录音/视频编辑 SoundRecorder.apk com.android.SoundRecorder 音频录制
相机/录音/视频编辑 VideoEditor.apk com.android.VideoEditor 视频编辑器
桌面 Launcher2.apk com.android.launcher 原生launcher2
桌面 Launcher3.apk com.android.launcher3 原生launcher3
音乐 Music.apk com.android.music 音乐播放器
音乐 MusicFX.apk com.android.musicfx 音乐控制面板
桌面小工具 DeskClock.apk com.android.deskclock 时钟
桌面小工具 Protips.apk com.android.protips 桌面帮助提示
桌面小工具 QuickSearchBox.apk com.android.quicksearchbox 快速搜索框
其他 PartnerBookmarksProvider.apk com.android.providers.partnerbookmarks 书签Content Provider
其他 SpareParts.apk com.android.spare_parts 开发样例
其他 OneTimeInitializer.apk com.android.onetimeinitializer 首次安装Google app工具
其他 UserDictionaryProvider.apk com.android.providers.userdictionary 用户词典Content Provider
芯片自带应用 HiVideoPhoneTest.apk com.android.videophonetest 视频测试工具
芯片自带应用 Hdcp1.4KeyLoadTool.apk com.example.hidisplaytest 接口测试工具
芯片自带应用 MultiVideoTest.apk com.android.multivideotest 多路视频测试工具
芯片自带应用 HiFactoryTest.apk com.android.factorytest 厂测工具
芯片自带应用 HiGallery.apk com.hisilicon.android.gallery3d 图库
芯片自带应用 ServiceSettings.apk com.android.smart.terminal.iptv.aidl 中间件通信
芯片自带应用 HiGalleryL.apk com.android.nativeimage.gallery 4K图库
芯片自带应用 PicturePlayer.apk com.droidlogic.PicturePlayer 本地文件管理
芯片自带应用 Miracast.apk com.amlogic.miracast 无线传屏
芯片自带应用 NativeImagePlayer.apk com.droidlogic.imageplayer 图片播放器

2.2 system/bin

  该目录存放的是系统会使用到的脚本文件,该目录精简效果有限,主要的精简思路如下:
   1>检查是否有bin文件重复情况
    如xiriservice_All和xiriservice_tv,保留使用的bin文件即可。
   2>检查是否预置无效bin文件情况。
    比如未适配MediaAnalytics.apk时,就不用预置sqmloader、sqmpro.md5和sqm_setup.sh文件。

2.3 system/lib

  该目录存放的是系统自动编译出来的so文件及apk运行所需要的so。系统编译出来的so可以不用处理,但是当从app目录删除一个apk时,务必要检查该apk是否包含有so,如果有,则需要在lib目录删除对应的so。该目录精简效果最大,务必要进行

2.4 system/media

  该目录主要存放的是系统所需的媒体文件,如开机动画、开机视频、音频文件等。该目录的精简主要可以从两方面进行:
   1>bootanimation.zip
    此文件即开机动画,主要检查下该zip包里是否有重复的图片文件,如果有过多重复的图片文件,可以删掉部分图片,然后修改desc.txt,达到图片重复播放的效果即可。
    举个例子,将bootanimation.zip解压后,part0目录有五个图片文件,分别为boot0.pngboot1.pngboot2.pngboot3.pngboot4.png。desc.txt内容为:

    1280 720 1
    p 1 0 part0

    此时,可以将part0目录下的五张图片任意删除4张,然后修改desc.txt内容为:

    1280 720 1
    p 5 0 part0

   2>audio目录
    该目录下存放的是系统所需要的的音频文件,不用保留Android原生的所有音频文件。如在Hi3798MV300平台上,所使用的音频文件可以通过"getprop |grep ogg"查看,如下:

    [ro.config.alarm_alert]: [Alarm_Classic.ogg]
    [ro.config.notification_sound]: [pixiedust.ogg]
    [ro.config.ringtone]: [Ring_Synth_04.ogg]

    如以上属性,则系统中只需保留Alarm_Classic.ogg、pixiedust.ogg]及Ring_Synth_04.ogg三个音频文件,其余ogg文件则不用编译到update.zip。需要修改的文件为:

    frameworks/base/data/sounds/AllAudio.mk
    frameworks/base/data/sounds/AudioPackage10.mk
    frameworks/base/data/sounds/AudioPackage11.mk
    frameworks/base/data/sounds/AudioPackage12.mk
    frameworks/base/data/sounds/AudioPackage12_48.mk
    frameworks/base/data/sounds/AudioPackage2.mk
    frameworks/base/data/sounds/AudioPackage3.mk
    frameworks/base/data/sounds/AudioPackage4.mk
    frameworks/base/data/sounds/AudioPackage5.mk
    frameworks/base/data/sounds/AudioPackage6.mk
    frameworks/base/data/sounds/AudioPackage7.mk
    frameworks/base/data/sounds/AudioPackage7alt.mk
    frameworks/base/data/sounds/AudioPackage8.mk
    frameworks/base/data/sounds/AudioPackage9.mk
    frameworks/base/data/sounds/OriginalAudio.mk

    将别的ogg不编译进版本的修改方式,示例如下:

--- a/frameworks/base/data/sounds/AllAudio.mk
+++ b/frameworks/base/data/sounds/AllAudio.mk
-     $(LOCAL_PATH)/Alarm_Beep_01.ogg:system/media/audio/alarms/Alarm_Beep_01.ogg \
+  #    $(LOCAL_PATH)/Alarm_Beep_01.ogg:system/media/audio/alarms/Alarm_Beep_01.ogg \

2.5 system/preinstall

  该目录主要存放的是系统所需要预安装的应用,此目录与app目录下的应用安装机制有所不同:app目录下的应用,开机后自动安装,而该目录下的apk一般需要调用脚本去安装。检查一下系统中是否需要预安装某个应用,如果不需要,直接在该目录删除即可。

2.6 system/tts

  该目录主要存放了一些语音播报相关的文件。目前机顶盒ROM中,语音交互功能大都由科大讯飞进行实现,所以该目录可以删掉。具体的处理方式与处理音频文件相似,需要修改以下文件:

    external/svox/pico/lang/PicoLangDeDeInSystem.mk 
    external/svox/pico/lang/PicoLangEnGBInSystem.mk
    external/svox/pico/lang/PicoLangEsEsInSystem.mk
    external/svox/pico/lang/PicoLangItItInSystem.mk
    external/svox/pico/lang/PicoLangDefaultInSystem.mk
    external/svox/pico/lang/PicoLangEnUsInSystem.mk 
    external/svox/pico/lang/PicoLangFrFrInSystem.mk 
    external/svox/pico/lang/all_pico_languages.mk

  不生成system/tts目录的修改方式,示例如下:

--- a/external/svox/pico/lang/PicoLangDeDeInSystem.mk
+++ b/external/svox/pico/lang/PicoLangDeDeInSystem.mk
-PRODUCT_COPY_FILES += \
-	external/svox/pico/lang/de-DE_gl0_sg.bin:system/tts/lang_pico/de-DE_gl0_sg.bin \
-	external/svox/pico/lang/de-DE_ta.bin:system/tts/lang_pico/de-DE_ta.bin
+#PRODUCT_COPY_FILES += \
+#	external/svox/pico/lang/de-DE_gl0_sg.bin:system/tts/lang_pico/de-DE_gl0_sg.bin \
+#	external/svox/pico/lang/de-DE_ta.bin:system/tts/lang_pico/de-DE_ta.bin

2.7 芯片特殊文件

  如海思平台上的fastplay.img,即定制的开机视频播放文件,该文件可用一同名空文件替代。原因是:如果要指定开机视频,在system/media目录下直接预置boot.ts等视频文件即可,不要再制作该fastplay.img。

三、update.zip精简效果验证

  第二章节说的都是在源码中如何修改,其实在源码中进行修改之前,应该先用实际的update.zip进行精简的动作,验证效果,当验证删除一些文件对系统运行无异常影响时,再在代码中进行删减。具体的方法为:
   1>以zip方式打开update.zip,然后尝试删掉一些不需要的文件。
   2>对删掉一些文件后的update.zip进行签名,签名命令如下:

    java -Xmx2048m -jar signapk.jar  -w testkey.x509.pem testkey.pk8 update.zip update_signed.zip

  其中,所涉及的文件如下:

     signapk.jar :out/host/Linux-x86/framework/signapk.jar 
     testkey.x509.pem:build/target/product/security/testkey.x509.pem         
     testkey.pk8:build/target/product/security/testkey.pk8 
     update.zip:删除一些文件的升级包
     update_signed.zip:签名后的升级包

  至此,常见的机顶盒ROM体积精简方式介绍完毕。

上一篇:汉字字库存储芯片扩展实验——Logisim


下一篇:基本知识点