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下載




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的源碼.

發佈了66 篇原創文章 · 獲贊 15 · 訪問量 78萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章