android的换肤(theme)
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) 皮肤下载
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
皮肤。