引用:
主要涉及3個方面,作為Launcher源碼研究的入門:
1.源碼的下載下傳;
2.源碼的編譯;
3.結構初探。
[下載下傳源碼]
2.任一地方建立一個目錄(用于儲存下載下傳下來的源碼);
3.點選目錄右鍵,選擇Git Bash,這是會彈出一個指令輸入框;
5.按照網頁上部的提示,在指令視窗中輸入,這裡以Launcher.git為例:
git clone git://android.git.kernel.org/platform/pakages/apps/Launcher.git
*這樣下載下傳到的是最新更新版本的代碼,如果想指定下載下傳某個版本
<
1.
git clone git://android.git.kernel.org/ + project path
2. 進入到下載下傳目錄
cd <dir>
3.擷取分支
git branch
4.關聯
git checkout <branch_name> -b <your_branch_name>
5.同步資料
git pull
>
<貌似還有點問題,了解具體操作的麻煩說聲- -!>
6.等待下載下傳完畢。
-----------------------------------------
參考資料:
<a href="http://www.williamhua.com/2009/04/29/git-and-repo-for-dummies/">Git和Repo掃盲——如何取得Android源代碼</a>
[編譯和運作]
準備工作:
1. 下載下傳好的roject源碼(此處為Launcher);
2. 編譯好的Android源碼(下文給出編譯好的Launcher相關類庫的下載下傳連結)。
具體操作:
1.将下載下傳的Project源碼導入Eclipse
建立Android項目,選擇"Create project from existing source",并指定項目的路徑,如下圖:
下面的SDK你要根據你下載下傳的Project所支援的Android版本選擇,然後“finish”。
此時你會發現項目是布滿"紅叉"的:
接下來的任務就是去掉這些"紅叉",使項目能順利編譯。
PS:有的Project源碼可能丢失了R.java,可以通過以下方法解決:
第1種方法: 右擊工程->選擇Android Tools->選擇Fix Project Properties
第2種方法: 右擊工程->選擇Properties->選擇 Android->Apply
2.重名包名
為了避免與系統預設的包名沖突,是以需要進行修改。
在src/com.android.launcher上點選右鍵,"Refactor" -> "Rename...",名字可以自定義(我這裡改成com.study.launcher),選項如下圖選擇(全選上):
點選"Preview>",進行預覽(途中彈出警告的話,不用管,繼續"Countinue"),這裡要去掉一些不必要的修改,否則就會改亂了。
進入到這麼一個界面:
找到以下選項,去掉前面的鈎子:
點選"OK",等待處理完畢...
ps:過程中可能會彈出這樣一個錯誤提示,直接"Abort"就好:
*結束後可能會彈出這樣的提示框:
點“Yes”。
到此第一步操作完畢,但是你會發現"紅叉"依舊,我們接下來繼續處理...
3.導入Android類庫
導入jar,
這裡要注意的是,直接"Add To Library"好像有點問題,我這試了幾次都會導緻Eclipse卡着不動了...
1).建立一個User Library
在項目上右鍵,“Build Path” -> “Add Libraries...”,選擇"User Library","Next";
在彈出的新界面,點選右側的"User Libraries",彈出如下界面:
點選"New"建立一個名為"framework"的庫,然後點選"Add JARs..."指定到classes.jar。
2).添加User Library
确定後,傳回如下界面,打上"framework"前面的小勾:
點選"finish"。
調整類庫加載次序,
将"framework"調整到最上(項目右鍵,"Build Path"->"Configure Build Path..."):
點選"OK"傳回。
這時再重新整理下項目,
"紅叉"一下子消失很多了吧,但是在Launcher.java下還有錯誤。根據情況,将裡面的幾行代碼手動注釋掉即可。
PS:如果還是很多"紅叉",你點進類裡看看,估計就是因為R.java的包引用問題,将import去掉即可(或者通過組合鍵"ctrl+shift+o"來自動修複類的引用導入)。
*如果發現R.java沒有生成,可以試着将gen/下的目錄删了,再按上面的方式重新生成。
!!特别注意的是:
網上有些文章介紹說,直接通過自定義變量和手動調用相應的函數來跳過編譯錯誤,該種方法并不可取!因為這些内部變量在内部可能會在某個地方被指派的(具體我無從知道),但測試結果告訴我——如果Worksapce.java裡的mScrollX和mScrollY自己來提供的話,會導緻滑屏出現問題...是以麻煩點還是搞到編譯好的jar包好。
4.修改AndroidManifest.xml
去掉其中的"android:sharedUserId="android.uid.shared" ":
5.編譯,運作
試試編譯,通過了:
ps:Project源碼預設沒有指定minSDK,你可以手動設定,避免提示錯誤。
*如果編譯出現問題,請檢視LogCat中的提示,一般能快捷地定位到問題
打開模拟器運作看看,
按下"HOME"鍵:
啟動我們自己的Launcher,和系統的一模一樣吧~~
OK,大功告成!
[結構研究]
*詳細布局情況可以通過SDK_dir/tools/hierarchyviewer.bat進行檢視。
整個homescreen是一個包含三個child view的FrameLayout(com.android.launcher.DragLayer)。
第一個child就是桌面com.android.launcher.Workspace。這個桌面又包含三個child。每個child就對應一個桌 面。這就是你在Android上看到的三個桌面。每個桌面上可以放置下列對象:應用快捷方式,appwidget和folder。
第二個child是一個SlidingDrawer控件,這個控件由兩個子控件組成。一個是 com.android.launcher.HandleView,就是Android桌面下方的把手,當點選這個把手時,另一個子控 件,com.android.launcher.AllAppsGridView就會彈出,這個子控件列出系統中目前安裝的所有類型為 category.launcher的Activity。
第三個child是com.android.launcher.DeleteZone。當使用者在桌面上長按一個widget時,把手位置就會出現一個垃圾桶形狀的控件,就是這個控件。
在虛拟桌面上可以擺放四種類型的對象:
1. ITEM_SHORTCUT,應用快捷方式
2. ITEM_APPWIDGET,app widget
3. ITEM_LIVE_FOLDER,檔案夾
4. ITEM_WALLPAPER,牆紙。
類簡介:
AddAdapter:添加桌面元素的擴充卡。
AllAppsGridView:Icon清單的的主界面,繼承gridView。
DeleteZone:luancher的删除區域,繼承ImageView。
DragController:拖動控制接口。
DragLayer:整個launcher的父節點,繼承FrameLayout,實作接口DrayController。
DragSource:拖動源接口,定義了void onDropCompleted(View target, boolean success)。
DropTarget:拖動目标,定義很多拖動過程需要的方法:onDrop,onDragEnter,onDragOver,onDragExit,acceptDrop。
HandleView:launcher抽屜的開關,不過在android2.2已經沒用抽屜了。
Launcher:整個launcher的程式的入口,代碼量最大的一個檔案。
Workspace:整個界面layout,幾個視窗就是他下面的子節點。
Launcher中實作了MVC模式(M:launchermode , V:draglayer ,C: launcher),以此為主線,可以得到 Launcher對各個元件管理的細節(如drag的實作)。