Android STB ROM体积精简

  本系列文章:
    Android STB 遥控器适配
    Android STB ROM体积精简
    Android STB 添加系统接口
    Android STB 高效调试技巧
    Android STB 海思平台调试
    Android STB HDMI开发
    Android STB 编译自定义jar

  在目前的机顶盒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.1 boot.img

    boot.img是更新boot分区所需要的文件,主要包括kernel+ramdisk。

1.2 system目录

    system目录的内容在升级后会放在系统的system分区,主要用来更新系统的apk、so、bin等,在系统源码中对应着out/target/product/xxx/system/中的所有文件。

1.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.apkcom.android.wallpaperBasic动态墙纸
墙纸Galaxy4.apkcom.android.galaxy4Galaxy4 动态墙纸
墙纸HoloSpiral.aapkcom.android.wallpaper.holospiralHoloSpiral动态墙纸
墙纸LiveWallpapersPicker.apkcom.android.wallpaper.livepicker动态墙纸选择器
墙纸MagicSmoke.apkcom.android.magicsmokeMagicSmoke动态墙纸
墙纸MusicVisualization.apkcom.android.musicvisMusicVisualization动态墙纸
墙纸NoiseField.apkcom.android.noisefieldNoiseField动态墙纸
墙纸PhaseBeam.apkcom.android.phasebeamPhaseBeam动态墙纸
屏保BasicDreams.apkcom.android.dreams.basicBasic屏保
屏保PhotoTable.apkcom.android.dreams.phototablePhotoTable屏保
屏保WebViewDream.apkcom.android.dreams.webWebView屏保
短信/彩信/电话BasicSmsReceiver.apkcom.android.basicsmsreceiver基础短信接收
短信/彩信/电话Mms.apkcom.android.mms彩信
短信/彩信/电话Telephony.apkcom.android.phone电话应用
短信/彩信/电话TelephonyProvider.apkcom.android.providers.telephony电话记录 Content Provider
短信/彩信/电话VoiceDialer.apkcom.android.voicedialer语音拨号器
短信/彩信/电话InCallUI.apkcom.android.incallui拨号盘
短信/彩信/电话CellBroadcastReceiver.apkcom.android.cellbroadcastreceiver小区广播
通讯录Contacts.apkcom.android.contacts联系人
通讯录ContactsProvider.apkContactsProvider联系人 Content Provider
浏览器Browser.apkcom.android.Browser系统浏览器
浏览器HTMLViewer.apkcom.android.htmlviewer简易HTMLView
计算器Calculator.apkcom.android.calculator2计算器
日历Calendar.apkcom.android.Calendar日历
日历CalendarProvider.apkcom.android.providers.calendar日程表 Content Provider
邮件Email.apkcom.android.email邮件应用
邮件UnifiedEmail.apkcom.android.mail邮件
图库Gallery2.apkcom.android.gallery3d图库
相机/录音/视频编辑Camera.apkcom.android.camera相机
相机/录音/视频编辑Camera2.apkcom.android.camera2相机
相机/录音/视频编辑SpeechRecorder.apkcom.android.speechrecorder语音录制
相机/录音/视频编辑SoundRecorder.apkcom.android.SoundRecorder音频录制
相机/录音/视频编辑VideoEditor.apkcom.android.VideoEditor视频编辑器
桌面Launcher2.apkcom.android.launcher原生launcher2
桌面Launcher3.apkcom.android.launcher3原生launcher3
音乐Music.apkcom.android.music音乐播放器
音乐MusicFX.apkcom.android.musicfx音乐控制面板
桌面小工具DeskClock.apkcom.android.deskclock时钟
桌面小工具Protips.apkcom.android.protips桌面帮助提示
桌面小工具QuickSearchBox.apkcom.android.quicksearchbox快速搜索框
其他PartnerBookmarksProvider.apkcom.android.providers.partnerbookmarks书签Content Provider
其他SpareParts.apkcom.android.spare_parts开发样例
其他OneTimeInitializer.apkcom.android.onetimeinitializer首次安装Google app工具
其他UserDictionaryProvider.apkcom.android.providers.userdictionary用户词典Content Provider
芯片自带应用HiVideoPhoneTest.apkcom.android.videophonetest视频测试工具
芯片自带应用Hdcp1.4KeyLoadTool.apkcom.example.hidisplaytest接口测试工具
芯片自带应用MultiVideoTest.apkcom.android.multivideotest多路视频测试工具
芯片自带应用HiFactoryTest.apkcom.android.factorytest厂测工具
芯片自带应用HiGallery.apkcom.hisilicon.android.gallery3d图库
芯片自带应用ServiceSettings.apkcom.android.smart.terminal.iptv.aidl中间件通信
芯片自带应用HiGalleryL.apkcom.android.nativeimage.gallery4K图库
芯片自带应用PicturePlayer.apkcom.droidlogic.PicturePlayer本地文件管理
芯片自带应用Miracast.apkcom.amlogic.miracast无线传屏
芯片自带应用NativeImagePlayer.apkcom.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体积精简方式介绍完毕。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值