Android源碼之DeskClock (一),androiddeskclock
一.概述
一直有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 timepickerdatetimepicker_dir := ../../../frameworks/opt/datetimepicker/resres_dirs := $(datetimepicker_dir) resLOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs))LOCAL_MODULE_TAGS := optionalLOCAL_STATIC_JAVA_LIBRARIES := android-support-v13LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4LOCAL_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