动态换肤框架原理解析

版权声明:转载需注明出处,万分感谢! https://blog.csdn.net/sunyao19940708/article/details/79961553

阅读该文(动态换肤框架原理)你会了解:

1、 网易云换肤的由来

2、 换肤框架的编写




一 、 首先了解一下换肤的主要APP

目前市场上主要换肤的APP有网易云音乐作为代表:

换肤前 换肤后
网易云首页 未换肤 这里写图片描述

另外还有高德地图同样也有换肤,但是换肤比较特殊,只有默认的几套皮肤供选择,这里不再赘述。

二 、 网易云音乐换肤过程

1. 下载皮肤包
① 可以在看到网易云包中的数据

root@android:/data/data # cd com.netease.cloudmusic/ 
root@android:/data/data/com.netease.cloudmusic # ls
app_mpcd
cache
code_cache
databases
files
lib
shared_prefs
root@android:/data/data/com.netease.cloudmusic #

可以看到网易云音乐包中包含  files 文件夹,我们再来看看其中的数据:
<pre><code>root@android:/data/data/com.netease.cloudmusic # cd files

root@android:/data/data/com.netease.cloudmusic/files # ls
MAMStatistic
RecentMusic
Session.Account
Session.Profile
Statistic
banner_cache
com.netease.cloudmusic:play
main_page_content_cache_4.3
main_page_content_head_cache_4.3
theme

其中theme文件夹顾名思义是主题的意思,我们看看其中的数据:

<pre><code> 

root@android:/data/data/com.netease.cloudmusic/files # cd theme
root@android:/data/data/com.netease.cloudmusic/files/theme # ls
681050.skin411

这里我们看到了681050.skin411这个文件,其实这个文件就是一个常用的apk文件,只是对后缀进行了修改,我们从手机中获取到该文件:

<pre><code> 

root@android:/data/data/com.netease.cloudmusic/files/theme # ls
681050.skin411
root@android:/data/data/com.netease.cloudmusic/files/theme # cp 681050.skin411 /sdcard
127|root@android:/ # exit
C:\Users\HP>adb pull /sdcard/681050.skin411
/sdcard/681050.skin411: 1 file pulled. 1.8 MB/s (2380116 bytes in 1.236s)

解压出皮肤包,可以看到,这就是我们熟悉的apk文件:

文件 内容
解压后的文件 res中的文件

这里解释一下,为什么要用到apk,而不是直接是用压缩包的形式: 因为需要修改的是资源文件中带有 src 或者 background 的控件,获取到的是资源ID,所以需要一个映射表来对应,必须要有 resources.arsc 这个文件


2. 获取所需换肤的控件

    观察app中的变化,可以获取到如下需要换肤的属性
<pre><code>
View : background
TextView : textColor    drawableLeft、    drawableRight、    drawableTop、    drawableBottom、
ImageView : src
自定义view
</code></pre>
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页