活动报道:友盟与小米工程师解码Android系统资源访问与换肤(CMDN CLUB 14期)

2月29日,CMDN Club第十四期活动在北京丽亭华苑酒店举行。本次活动是开春以来CMDN俱乐部的首场主题交流会,友盟Android SDK工程师徐仙明和小米科技MIUI系统工程师董红光为大家带来了Android资源访问与MIUI底层换肤技术的主题演讲。现场观众热情饱满,会场大厅内座无虚席。在CMDN俱乐部为大家精心准备的开场问答环节后,两位对Android资源访问有着深刻理解的工程师为开发者们带来了一场精彩纷呈的演讲。

图:CMDN Club第十四期活动现场

友盟Android SDK工程师 徐仙明:Android系统资源访问机制的探讨

徐仙明首先对友盟产品进行了一个简短介绍:友盟是一家针对开发者的平台式服务公司,它为开发者提供统计分析工具、开发工具以及类似于“应用联盟”的SDK。

在Android系统中,资源主要指图片和MP3类型的文件,也是用户UI包含的所有元素。谷歌在设计Android系统时,将UI界面和逻辑代码分开组建:界面设计通过XML的形式描述,具体的程序和应用逻辑则通过代码来实现;前端工程师只负责HTML和CSS的设计与架构,后端工程师则专门考虑JSP和Java的代码执行。

图:友盟工程师徐仙明在讲解Android资源访问机制

资源访问在Android性能架构中处于何种地位?在进行Android开发时,开发者经常用到Framework提供的资源包Framework.jar与Framework-res.apk,以及与核心资源相关的组件“Resource Manager”文件系统。

图:观众针对资源加载效率向嘉宾提问

APK本身是一个简单的文件格式,也是一个压缩文件包。通过解压文件包可以释放APK文件:首先需要APK的原数据Meta INF、Manifest以及RES目录。一部分包含图片资源的应用,在资源释放时也会用到Layout。

图:前排观众席地而坐

在安装文件时,系统会将文件取出、解压后放在Dalvik Cache中。该缓存下有许多dex文件,当用户打开应用时系统会自动加载相应的类。在加载过程中,系统如需访问APK,则需对其进行解压,这样通常导致效率较为低下。而如果将dex文件放入Dalvik Cache中,则能够令加载的效率大大提升。

图:观众向工程师请教如何实现Android换肤

每个进程都有一份关于Framework的共享类和共享资源,但物理内存空间中的系统级别资源只有一份。Framework类和资源是只读的,而Android操作系统设计之初并没有硬盘的虚拟内存和换进换出机制,所以节省内存空间是非常重要的工作。

说到应用级别的换肤,徐仙明提到了墨迹换肤的实现办法:墨迹有一个工具页面,开发人员 在SDK中建立了一个文件夹,然后下载文件名为103.zip的皮肤资源包,再将该资源包解压到Skin103目录之下。定义文件名时必须与系统默认的文件名保持一直,一旦找不到这些系统资源,可以选择到系统默认中查找。

图:分享会现场座无虚席

小米科技MIUI系统开发工程师 董红光:Android系统如何实现换肤及MIUI

MIUI主题风格,简言之是一种Android系统换肤工程的设计思路。要了解Android的资源管理机制首先需要了解资源的类型。Android开发者最常用到的资源类型主要为Drawable、Layout、Style、String等,而最底层也最核心的是Context.getresources。

图:董红光在阐释“小米一代与一袋小米”

原生Android系统有自己的资源管理机制,它也提供了相应的解析逻辑,开发者如果需要指定主题包,独立解析Android的逻辑管理是必备要素。原生Android在Drawable之下设置了许多目录,不同的目录中放置针对不同屏幕分辨率的图片,这是Android系统自主执行的操作,当然也是Android开发者不可能丢弃的操作。

图:主持人听得是有多认真

PackageManager能够读取第三方为Android专门制作的主题,这些主题也都是APK格式的,开发者如果将这些主题安装到自己的手机上便可获取第三方的资源,同时也获取到了第三方的RES,并且这种获取不受签名的影响,因为它是跨作者、跨签名访问的。

图:观众对于底层资源整合发表见解

如何才能真正实现Android系统换肤?董红光幽默地打了个比方:别人向我要一个小米一代,而我给他一袋小米。假设资源ID是以0X01开头的,如果将“1”改为“7”,也就是将自己的APK文件资源ID的开头设置为0X07,再结合PackageManager将APK文件发送出去,如此一来便实现了系统的换肤功能。

图:答对问题就送《程序员》杂志

在底层整合过程中也许会出现一些问题,主题包资源缺失时怎么办?某些地方出现空白甚至图片无法显示时怎么办?有两种解决办法:一种是将资源包完全解开,一旦发生资源缺失便直接调用相应的文件,全部打包后再重新发送,这个办法对主题包的负担是很重的。第二个办法是在底层和上层同时进行文件处理,在资源缺失后寻找缺失的文件,这个方法虽能解决问题,却耗时耗力。

在资源缺失时MIUI又会采取何种策略呢?董红光为大家给出了答案:MIUI采取重定向资源文件路径的方法,对RES类入口逻辑进行修改,这样便能截获所有对资源的请求。小米工程师进行了预先设定,如果有请求便执行操作,没有请求则交付系统执行。MIUI对每个APP都进行了相应设置,如果主题包内没有对应资源,则返回执行原生资源。

图:MIUI的实现方式是重定向文件路径

当天到场的嘉宾还有球球搜的工程师冯和创业者刘金瑞,他们和两位工程师一同探讨了关于屏幕分辨率主题设置、资源加载以及运行效率的问题。现场观众也踊跃提问,四位工程师一一作出详细解答并推荐了压力测试工具Markettest以及网站androiduipatterns,后者提供大量UI素材,可供Android开发者学习和使用。

图:冯与刘金瑞向嘉宾提问

第十四期CMDN Club在友盟团队和小米科技的支持以及观众的积极响应下圆满结束。演讲嘉宾与现场观众进行了问答互动,相互促进了各自的Android开发技术。了解更多详情,请关注新浪微博@CSDN移动;加入CSDN移动开发者交流:149841439,共同关注移动互联网最新资讯。

欢迎大家加入CMDN Club,参与#创新应用#的评测、讨论,还可以在这个平台上与国内上千个移动应用团队和移动开发者沟通、交流。

移动开发者俱乐部(CMDN Club)是全球最大中文IT社区CSDN专门为移动开发者打造的实名邀请制网络平台,是移动开发者线上交流和线下活动的专属社区。

CMDN Club线上社区http://cmdn.net/

CMDN Club线下活动http://cmdn.csdn.net/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值