Android源代码之DeskClock (一)
一.概述
一直有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下载
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbDJzaG93/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" align="middle" alt="">
3.导入project
将DeskClock源代码导入到Android studio中,编译发现有非常多错误,能够发现是缺少一些依赖库,主要是support v4 和 v13,在File -> Project Structure -> app -> Dependencies -> + 选择support-v4 和 support-v13. 然后rebuild
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbDJzaG93/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" align="middle" alt="">
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----一个错误都没有了,然后能够直接把程序跑到手机里面了.下面是执行效果图.
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" align="middle" width="375" height="650" alt="">
三.总结
Android源代码之DeskClock (一)的更多相关文章
- Android源代码结构分析
Google提供的Android包含了:Android源代码,工具链,基础C库,仿真环境,开发环境等,完整的一套.第一级别的目录和文件如下所示:----------------├── Makefile ...
- Android系统源代码目录结构 “Android源代码”“目录结构”
在讲述Android源码编译的三个步骤之前,将先介绍Android源码目录结构,以便读者理清Android编译系统核心代码在Android源代码的位置. Android源代码顶层目录结构如下所示: ├ ...
- 在线阅读android源代码
这两天一直在寻找android系统的源代码,但是直到一个小时之前,一直未能如愿.但是,令人欣慰的是,现在找到了. 网上有不少帖子介绍如何下载android源代码,包括在linux系统,windows系 ...
- 1、android源代码下载及目录分析,和eclipser的跟踪
1.在eclipse中跟踪源代码:假如对mainactivity.java里面的activity按Ctrl+鼠标左键(前提已经导入android源代码:方法1:在项目点击右键,然后找到properti ...
- Android 源码获取-----在Windows环境下通过Git得到Android源代码
在学习Android的过程中,深入其源代码研究对我们来说是非常重要的,这里将介绍如何通过在Windows环境下使用Git来得到我们的Android源代码. 1.首先确保你电脑上安装了Git,这个通过 ...
- MTK6577 Android源代码目录
MTK6577 Android源代码目录 1. MTKAndroid4.0 源代码目录 (1) makeMtk 整个工程编译或是构建(make/build)的入口. (2) abi 应用程 ...
- Android 源代码自动编译packages/apps
/*************************************************************************** * Android 源代码自动编译packag ...
- 1、android源代码下载与跟踪
学习Android源代码的目的 理解Android API查找API(Activity.Content Provider等) 高级应用开发(ROM定制) 在不同平台下载Android源代码 W ...
- Windows下载Android源代码
下载msysgit,安装 官方下载:http://code.google.com/p/msysgit/downloads/list, 打开Git Bash,运行命令 cd D: git clone h ...
随机推荐
- Centos安装编译环境
众所周知,在安装完Centos完了以后,是没有编译环境的,我自己挂上光盘,手动安装解决了几十的依赖关系,在配置些软件时,还是经常报些依赖软件包的缺失,很是头疼,后来百度了下centos需要装的编译环境 ...
- GridView获取单个单元格的值
0.GridView中的所有数据都存储在Rows集合中,可以通过Rows的Cell属性获取单个单元格的值:如果某个单元格包含其他控件,则通过使用单元格的 Controls 集合,从单元格检索控件:如果 ...
- Github、Jekyll 搭建及优化静态博客方法指南
尝试自己写 Blog 的人,一般会经历三个阶段. 第一阶段,刚接触 Blog,觉得很新鲜,试着选择一个免费空间来写. 第二阶段,发现免费空间限制太多,就自己购买域名和空间,搭建独立博客. 第三阶段,觉 ...
- 【UVA1416】(LA4080) Warfare And Logistics (单源最短路)
题目: Sample Input4 6 10001 3 21 4 42 1 32 3 33 4 14 2 2Sample Output28 38 题意: 给出n个节点m条无向边的图,每条边权都为正.令 ...
- heap表按字符串和数值型排序规则
SQL> create user scan identified by scan default tablespace users; User created. SQL> grant db ...
- FILTER优化
explain plan for select a.* from fxqd_list_20131115_new_100 a where (acct_no, oper_no, seqno, trans_ ...
- 2015第45周五IE11实用开发工具摘录及设置IE缓存
UI响应工具的作用 UI响应工具顾名思义就是查看UI响应时间的工具,通过这个工具可以帮助我们确定应用中的哪些组件占用了多少CPU时间,让我们之后可以更有针对性的进行优化,从而最大限度地改善应用性能,同 ...
- php5.4下安装ECshop出现错误的解决办法
转:http://www.programmernote.com/?p=65 1.安装是会提示 Warning: date_default_timezone_get(): It is not safe ...
- 关于将客户端移植到Lua的解决方案设想。
现在发行商都需要cp们做热更新,而对于unity制作的游戏来讲,这个恐怕是个噩梦,而项目已经进行到中后期,确实很麻烦,有UniLua,但是如果全部手动解决恐怕上不了线了工作量太大,初步设想如果做一个基 ...
- php 中 global 与 $GLOBAL 由引用产生的区别
很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然. 根据官方的解释是 $GLOBALS['var'] 是外部的全局变量$var本身. global $var 是外部$var的 ...