android 的换肤

#移动开发 #Android/theme

1. 相关概念

1) 换肤

变换应用的背景,控件样式,应用图标及应用内部版式等与风格相关的界面元素

2) 资源

资源由字串,图片,版式等元素组成,通常存放在 res 目录中,apk 打包时利用 aapt 工具 (实现见

frameworks/base/tools/aapt) 对资源进行解析,并生成 apk 文件。

打包时资源分成两个部分,一部分完全写入 resources.arsc 文件(如 values*),另一部分的索引信息写入 resources.arsc,而自身内容也做相应变化(如:将 9patch 的 png 图其中的 9patch 信息从图片中可见变为记录在文件内部)

3) 相关文件

公用资源存放在 /system/framework/framework-res.apk 包中,应用资源存放在各个应用的 apk

包中(含应用图标,内部图片及布局),有的 android 产品可在设置中换背景图

4) 换肤思路

apk 是以 zip 压缩格式打包的文件,把它解开,然后把其中的图片换成新图片,再打包,替换原系统中的 apk 包,即可完成换肤。

2. 当前的换肤方法

1) 使用 update.zip 升级

a) 原理

update.zip 通常包含一个 update-script 脚本,用以决定更新 zip 中的哪些包到系统中,一般分为全部更换和部分更换,全部更换为更换 system, userdata, boot 个分区的全部内容,部分更新可以更新单个或多个系统中的文件

b) 方法

下载 theme 的压缩包,放入 SD 卡,关机后启动到烧写模式,然后用 update.zip 升级系统

c) 特点

  • 全部更换等于完全重装了系统,用户数据都找不到了,影响很大
  • 部分更新只替换部分内容,而替换的部分可能和其它部分冲突,造成变慢或无法启动等严重的问题
  • 无论全部更新或者部分更换,只能更换到文件层(即使用 adb shell 时用 ls 可看到的文件)无法替换 jar 包或 apk 包内部的内容
  • 网上可下载的皮肤包各式各样,有大有小,没有一定的规范,基于各个版本,需要一个一个试
  • 安装后无法恢复,所以试验前一定要使用 nandroid 备份原分区

d) 皮肤下载

  1. http://forum.xda-developers.com/forumdisplay.php?f=450

  2. http://android-themes.net
    其中的 Blue_Star_5_ADP1.zip,cm4.281-theme-update.zip,LBP-0[1].4.5.zip,Rex3WixCSDI.zip 等

2) 使用 metamorph 工具

a) 原理

更换 jar/apk 包中内容

b) 方法

得到 root 权限,安装 metamorph 工具(可从 market 下载的 apk 包)及其依赖工具,下载皮肤的 zip 包到

sd 卡,然后通过 metamorph 应用程序选择安装

c) 特点

  • metamorph 为开源软件,可下载调试其源码
  • 格式规范,有一些 theme 可用
  • 用此方法,不只能换资源,也能改程序,不安全
  • 需要 root 权限,不是一般用户可以操作的
  • 不能回退到之前资源,只能通过 nandroid 备份原分区
  • 由于可以只替换部分资源,所以换几次后可能出现上一资源残留的问题
  • 资源包太大或有问题,会影响系统正常使用,甚至无法启动

d) 皮肤下载

http://www.androidin.net/bbs/thread-34043-1-1.html

3. 说明

由于至今 android 源码中还未提供友好的换肤接口,使得我们只能使用即麻烦又不安全的方法换肤。即使如此,网上还是能下载到大量 android

皮肤。