一.概述
一直有read the fucking source code的计划,但是实行起来都是断断续续的.到现在也没有真正得读过多少Android的源码(主要是懒的).现在回想起来实在是很惭愧,再加上好久没有写博客了,经过几天的琢磨准备在CSDN博客开两个长时间更新的系列博客(Android 源码和Android设计模式),每周更新最少一篇.以此来督促自己,并且跟其他小伙伴一起分享这个过程.
之前是直接读的framework层的源码,读起来比较枯燥和生涩,碰巧上周写了一篇MVP在Android中应用的博客,就萌生了想要了解Android原生应用会用哪种设计风格的想法.经过考虑后就决定Android源码系列就先从Android原生应用源码开始最后到framework层.这一篇就从DeskClock程序开始.
二.移植出DeskClock
1.环境平台
博主目前的环境配置
系统:Ubuntu 14.04 LTS
IDE:Android Studio 1.2.1.1
JDK:1.8
SDK:所有版本 (有百度云资源)
Android源码:Android kitkat 4.4 & Android lollipop 5.0(有百度云资源)
2.准备源码
这个系列分析的是Android kitkat(4.4)版本的DeskClock程序.用4.4版本来分析主要原因是博主的手机是4.4的,之前有移植lollipop的DeskClock程序到手机上,结果不兼容,后来就用kitkat的DeskClock程序了.
既然分析参考DeskClock的内容,当然需要有源码才行,还必须得原汁原味的.大家可以去官方直接git clone代码下来(当然需要翻墙)https://android.googlesource.com/platform/packages/apps/DeskClock,懒得翻墙的童鞋也可以从博主这里下载,博主是从官网clone的代码,然后摘的kitkat-release分支,从下图可以看到这个节点上打了所有4.4版本的tag.所以只要是Android
4.4版本的原生钟表程序都是这个源码.CSDN下载
3.导入工程
将DeskClock源码导入到Android studio中,编译发现有很多错误,可以发现是缺少一些依赖库,主要是support v4 和 v13,在File -> Project Structure -> app -> Dependencies -> + 选择support-v4 和 support-v13. 然后rebuild
rebuild完之后发现错误少了一批,主要还剩下一个 package com.android.datetimepicker.time does not exist,在刚在的依赖选择那里根本没有这个库,分析主要原因就是DeskClock在源码环境中是系统级app,他的编译环境也是在源码环境下,所以他依赖的其他的库都在源码路径下,我们也可以从DeskClock源码下的Android.mk文件中看出结果.
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) # include res directory from timepicker datetimepicker_dir := ../../../frameworks/opt/datetimepicker/res res_dirs := $(datetimepicker_dir) res LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs)) LOCAL_MODULE_TAGS := optional LOCAL_STATIC_JAVA_LIBRARIES := android-support-v13 LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4 LOCAL_STATIC_JAVA_LIBRARIES += android-opt-datetimepicker
从Android.mk文件中可以看到DeskClock依赖了三个库,分别是android-support-v13,android-support-v4和android-opt-datetimpicker.之前v13和v4的依赖已经加进去了,选择就差datetimpicker这个库,而这个库的位置也是知道的,在上面有加载一个路径到环境里面:/frameworks/opt/datetimepicker.这个文件别的地方就找不到了,只能去Android源码里面去找了,幸好有Android
4.4的系统源码,在opt路径下找到这个datetimepicker库源码.
把datetimepicker以module的形式导入到DeskClock的项目中去,并且添加项目依赖.没有系统源码的童鞋可以点击下载:datetimepicker CSDN
这个时候项目的结构是这样的.
再rebuild----一个错误都没有了,然后可以直接把程序跑到手机里面了.以下是运行效果图.
三.总结
这一篇先把DeskClock从源码环境和各种依赖关系里剥离到Android Studio中,可以让其以第三方应用的形式跑到手机中,下一篇将会开始分析DeskClock的源码.
转载请注明出处:http://blog.csdn.net/l2show/article/details/46709863