Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發者上手寶典(二)

Android開發者上手寶典(二)

編輯:關於Android編程

13.如何全編譯代碼?

由於上面介紹了如何連接真機進行調試,因此必須趕緊補充上全編譯的方法。因為要進行聯機調試,之前首先得將對應的代碼進行全編譯。很多新人在進行聯機調試的時候會有很大的疑惑:為什麼手機運行時Eclipse就知道,它就能讓代碼一起跑動運行?解答這些問題必須先了解全編譯

全編譯就是告訴整個開發環境這各工程裡有些什麼代碼,有些什麼資源,將我們的Java代碼轉為機器/環境所理解的格式,並事先告訴它。這樣,Eclipse在連接真機的時候就知道手機裡到底是怎麼回事了。當然,手機所使用的系統版本和Eclipse裡的代碼版本當然需要一致(有時候只是調試一個模塊的話,保持模塊代碼版本一致大部分情況下也是可行的,為什麼是大部分?因為一個模塊難免和其他模塊其他部分的代碼有關聯,如果恰好其他部分的代碼沒有保持相同版本卻在調試運行中調用到了,就會出現Eclipse不知道的錯誤)。最後解釋一下Eclipse通過什麼來使代碼和手機一起跑動運行的,這樣就基本能解釋清楚新人的疑惑了:通過ADB和DDMS。

源碼分MTK提供的baseline(基線代碼)和Google提供的Android原生代碼,區別為前者在後者的基礎上加了很多MTK自己的定制功能和代碼。因此,全編譯的方法也分兩種:全編MTK平台代碼、全編Google源碼。

下面先講MTK平台代碼全編譯的方法:

1.打開終端,進入源碼根目錄(這裡以eyelike-v1.0-dint為例):

$cd /local/eyelike-v1.0-dint/

2.輸入命令:

$./makeMtk listp

3.此時會出現下圖內容:
這裡寫圖片描述
圖x 全編譯項目示意圖

特別說明<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPqO6ztLDx7/J0tS/tLW90ru49s/uxL/D+8HQse2jrLHtyr7U2rjDtPrC67fW1qfPwsPmo6zTtdPQwdCx7dbQ1eLDtLbgtcTP7sS/o6jSsr7NysfLtdXi0KnP7sS/try5stPD1eLSu8zXtPrC66OszqrKssO0v8nS1Lmy08PE2KO/0vLOqs7Sw8fT0Lao1sa7+tbGo6y/ydLUzai5/VBlcnNvvfjQ0L/Y1sajrLTTtvjC+tfjsrvNrM/uxL+1xNDox/OjqaGjztLDx9XStb3L+dDo0qq1xM/uxL/D+7y0v8mjrLG+wP3Oqs/Cw+bTw7rsz9+x6sq2tcRqcmRoejcyX3dlX2piM6OozqrKssO0ysfV4rj2w/vX1rb4srvKx8bky/vE2KO/1eLKx9LyzqrV4rj2w/vX1srHz+7Ev76twO278tXfudzA7bT6wuu1xLyvs8nX6c2sysLQtLXEo6yyu9aqtcC1xMqxuvLP8sv7w8fRr87K1qq1wNXiuPbQxc+ivs2/ydLUwcujrLKiw7vT0Mbky/vM2Mri1K3S8qGjtbHIu8Tj0rK/ydLUyrnTw8HQse3W0Mbky/vD+9fWvfjQ0MirseDS66OstavP1Mi7xOOx4NLrtcS+zcrHxuTL+8P719bL+bbU06a1xM/uxL/By6OpoaM8L3A+DQo8cD40Lr3Tz8LAtMrkyOvIq7Hg0uu1xMP8we6jujwvcD4NCjxwcmUgY2xhc3M9"brush:java;"> $./makeMtk -t new jrdhz72_we_jb3

5.回車後,即可開始編譯。根據平台不同,要花費半小時到數小時不等。

然後講Google源碼的全編譯方法:

1.打開終端,進入源碼目錄(這裡以kitkat-v1.0-dint為例):

$cd /local/kitkat-v1.0-dint/

2.輸入命令:

$make

說明:Google源碼使用make命令即可進行全編譯,如果需要多線程進行編譯,可以使用下面命令:

$make -j8

說明:-j表示線程,8表示是8線程,多線程編譯可以縮短一些編譯時間,但有時候會出現可能因為線程按非線形運行而造成的編譯錯誤。因此,在時間充裕的情況建議直接使用make命令。

14.什麼是adb?

ADB全稱叫做Android Debug Bridge,它本來就是進行Android debug通信的橋梁,它就像一個負責任的中間人一樣,保持Eclipse(開發環境)和手機的代碼運行同步狀態。借助這個工具,我們可以管理設備或手機/模擬器的狀態 。還可以進行以下的操作:

1、快速更新設備或手機模擬器中的代碼,如應用或Android系統升級;
2、在設備上運行shell命令;
3、管理設備或手機模擬器上的預定端口;
4、在設備或手機模擬器上復制或粘貼文件;

我們一般在終端中輸入adb xxx(命令)來使用。具體可在後面的示例操作中進行學習。DDMS全稱叫做Dalvik Debug Monitor Service,它專門為 Android 開發環境中的Dalvik虛擬機調試監控服務。

15.什麼是DDMS?

DDMS 的全稱是Dalvik Debug Monitor Service,是 Android 開發環境中的Dalvik虛擬機調試監控服務。它為我們提供例如:為測試設備截屏,針對特定的進程查看正在運行的線程以及堆信息、Logcat、廣播狀態信息、模擬電話呼叫、接收SMS、虛擬地理坐標等等。因為我們在進行實際開發維護工作中,DDMS使用頻率簡直太高了,太重要了,所以必須詳細解釋一下DDMS。

在集成開發環境中,有DDMS控制台窗口。如,MyEclipse中,有個叫DDMS的Console。

1.如何啟動DDMS

  這個工具存放在SDK-tools路徑下,啟動方法:
  
  1) 直接雙擊ddms.bat運行;
  2) 在Eclipse調試程序的過程中啟動DDMS,在Eclipse如下:
  Window-Open Perspective-DDMS,點擊啟動就可以了
  
  DDMS對Emulator和外接測試機同等效用,如果系統檢測到它們(VM)同時運行,那麼DDMS將會默認指向Emulator,以上兩種啟動後的操作有些不一樣,建議分別嘗試下;

2.DDMS的工作原理

DDMS將搭建起IDE與測試終端(Emulator或者connected device)的鏈接,他們應用各自獨立的端口監聽調試信息,DDMS可以實時監測到測試終端的連接情況.當有新的測試終端連接後,DDMS將捕捉到終端的ID,並通過adb建立調試器,從而實現發送指令到測試終端的目的;

DDMS監聽第一個終端APP進程的端口為8600,App進程將分配8601,如果有更多的終端或者更多App進程將按照這個順序依次類推.DDMS通過8700端口接收所有終端的指令.

3.通過GUI詳細了解DDMS的一些功能

  Devices:
  在這個面板可以看到所有與DDMS連接的終端的信息,以及每個終端正在運行的App進程,每個進程的右邊相對應的是與調試器鏈接的端口,因為Android是基於Linux內核開發的操作平台,同時也保留了Linux中特有的進程ID,它介於進程名和端口號之間;
  Emulator Control:
  通過這個面板的一些功能可以非常容易的使測試終端模擬真實手機所具備的一些交互功能比如:接聽電話,根據選項模擬各種不同網絡情況,模擬接受SMS消息和發送虛擬地址坐標用於測試GPS功能等;
  Telephony Status:
  通過選項模擬語音質量以及信號連接模式.
  Telephony Actions:
  模擬電話接聽和發送SMS到測試終端.
  Location Control:
  模擬地理坐標或者模擬動態的路線坐標變化並顯示預設的地理標識,可以通過以下3種方式:
  Manual:
  手動為終端發送二維經緯坐標。
  GPX:
  通過GPX文件導入序列動態變化地理坐標,從而模擬行進中GPS變化的數值.
  KML:
通過KML文件導入獨特的地理標識,並以動態形式根據變化的地理坐標顯示在測試終端

16.怎麼預研PR?

在對模塊代碼有了初步認識和熟悉後,就可以穿插進模塊相關PR的演練。PR是什麼?在本文中PR(Problem Request)代指Bug,可以理解為軟件開發工程師所解決的問題。學習別人解決的問題,是非常好的一種方式,可以快速理解未來可能要遇到的問題,並掌握解決的方法。

可以找個早前的項目,比如yarism,搜索出它上面藍牙(以藍牙模塊為例)相關的PR,嘗試自己去理解PR描述的問題,然後自己去找解決的代碼位置和方式。自己本來就不熟悉模塊,也不清楚哪些PR有代表性,因此可以請資深同事幫助篩選一些PR出來。請資深同事或TeamLeader幫忙吧!再次好好感謝他們吧!

然後,先不要看別人的修改方法(怎麼能看到?不會後面有教),自己獨立思考摸索。是的,一定要自己獨立思考,如果時間實在有限,也一定要在自己思考後實在沒辦法的情況下再看別人的修改。而且,看別人的修改也要盡量理解清楚來龍去脈,為什麼能解決或為什麼要這麼解。當自己也有思路而與別人的修改不一樣時,一定不要放過它,放馬去問修改的那位同事,問他當時是怎麼想的,為什麼這麼改,最後才將你自己的想法告訴他,這時往往他會告訴你的方法的缺陷!是的,你這樣的新手想法往往是有缺陷的!不過,這正是你飛躍的時刻啊!天吶,你每遇到一次這樣的機會,就是一次強有力地升級!

17.怎麼查看別人的修改記錄?

我們的PR(Bug/問題)通過Bugzilla(問題管理工具,對於使用者來說就是一個網站)來管理。我們可以在Bugzilla上面查看所有項目的所有PR(其實還分RR/CR/FR,不過本文全部以 PR代替描述)記錄(只要權限足夠)。搜索任何一個已有的PR號碼,就可以進入它的詳細信息界面,能夠看到它的問題簡介、問題詳細描述、復現步驟、修改歷史、修改備注(Comments)、項目名、最後解決時間、當前解決狀態等等。學習一個PR最重要的便是閱讀它的問題描述,理解問題所在,然後查看Comments中的備注。我們為了更好地管理PR和修改記錄的關系,使用了腳本工具,使得每次提交解決方案後,Bugzilla都會自動將解決方案的鏈接以Comments的方式插入到該PR下面。因此,我們一般可以在Comments中找到一些鏈接,它就是我們所需!而這些鏈接,就是Gerrit網站的修改歷史鏈接,上面記錄了代碼的修改等等信息。

18.什麼是Git/Gerrit?

這時,就引出了Git。我們的代碼都是通過Git(代碼分布式管理工具)管理的,而存放都是存放在專門的代碼服務器上的(在集成組的辦公室裡,有集成組同事專門負責維護)。我們在真正解決了一個問題後,所有的代碼修改均要提交到Git服務器上面,以Git庫的形式進行保存。

說明:很多人之前可能聽過CVS和Subversion等,它們也是代碼管理工具。我們這裡以Git進行說明,而且作者本來也更傾向於Git。一方面是作者所在部門使用它進行代碼管理,另一方面火爆異常的xxx網站即主導Git,個人覺得是潮流所趨。

18.1釋義

Gerrit(代碼審核服務器)對於代碼提交者來說就是一個網站。為了保證代碼質量,一般情況代碼提交後均需要有資深工程師進行代碼審核,審核通過後方可最終提交到Git庫中。

代碼提交者將代碼通過 git 命令(或 repo 封裝)推送到 Gerrit 管理下的 Git 版本庫,然後去Gerrit網站設置該代碼更改的審核者(Reviewer),將提交轉化為一個一個的代碼審核任務,審核任務可以通過 refs/changes/ 下的引用訪問到。代碼審核者可以通過 Web 界面查看審核任務、代碼變更,通過 Web 界面做出通過代碼審核或者打回等決定。測試者也可以通過 refs/changes/ 引用獲取(fetch)修訂對其進行測試,如果測試通過就可以將該評審任務設置為校驗通過(verified)。最後經過了審核和校驗的修訂可以通過 Gerrit 界面中提交動作合並到版本庫對應的分支中。

前面在講到下載代碼的小節中,曾提到下載代碼的權限問題,其實有下載代碼的權限,就同時對應提交代碼的權限。由於這兩個操作均是在Git/Gerrit服務器上進行,因此,我們接下來詳細講講怎麼開通這些權限。

18.2開通Git/Gerrit權限

第一次登陸Gerrit
1.在ubuntu中,進入~/.ssh,查看有沒有id_rsa.pub文件,若沒有,執行命令:

$ssh-keygen -t rsa

說明:命令執行過程中會詢問key要保存的路徑,選擇默認即可。

2.繼續執行命令:

$git config --global user.email 

說明:是在公司所用的郵件地址,在提交代碼時Gerrit需要驗證用戶的Email地址,不執行這個命令可能無法提交代碼。

3.在浏覽器中,輸入如下網址訪問Gerrit服務器:http://gerrit.eyelike.com:8081/。

4.打開網頁後點擊右上角的Sign in,使用登錄Windows時所用的用戶名跟密碼(域賬號)來登錄,如下圖所示:
Gerrit網站登陸界面示意圖
圖x Gerrit網站登陸界面示意圖

5.登錄進去後點擊Add Key,把id_rsa.pub中的內容粘貼進輸入框裡面,點擊Add。這個key是將來push代碼時git認證要用到。如下圖所示:
這裡寫圖片描述
以後使用中如果要更改或者增加其他的ssh key可以在登錄到gerrit之後進入Settings->SSH Keys來操作。

6.然後發送郵件給集成組管理Git/Gerrit網站的同事,同時將id_rsa.pub作為附件發送給他,並抄送給TeamLeader,請求開通代碼下載和提交權限,即可。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved