Android框架源代碼下載與調試技巧

    由於對Android底層框架源代碼比較感興趣,所以想自己下載底層代碼然後進行Debug,主要參照http://source.android.com/source/building.html進行整理。

    相關環境:Windows8,  VMware Workstation9.0.2,  Ubuntu 12.04.3,

    注意:如果是在虛擬機上跑ubuntu,至少需要16GB ram/swap和至少30GB的disk才能完成以下以及後續操作。對於Android2.3.x以上的版本,需要64-bit的環境。Python2.6-2.7,GNU make 3.81-3.82,JDK6,Git 1.7或者更新,不推薦用虛擬機裝ubuntu,後面repo init的時候會出現問題,最好直接安裝ubuntu。

    Python和GNU make都已經包含在Ubuntu12.04.3中了。

    首先安裝JDK:

$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk

    然後安裝Git:

$ sudo apt-get install git-core
然後設置USB Access,具體作用我也不太清楚,先按照說明設置:
創建文件 /etc/udev/rules.d/51-android.rules 文件內容如下,記得把 <username>替換爲能通過USB訪問手機的認證用戶名,我猜測這裏可能是爲了連接手機進行調試所進行的設置
# adb protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"
# fastboot protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"
# adb protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"
# fastboot protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"
# adb protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"
# fastboot protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"
# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"
# fastboot protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"
# adb protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"
# fastboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard ES)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>"
# adb protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0600", OWNER="<username>"
# fastboot protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0600", OWNER="<username>"
# adb protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", MODE="0600", OWNER="<username>"
# fastboot protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee0", MODE="0600", OWNER="<username>"
官網有ccache的設置,我沒這個需求,就沒有設置。然後安裝repo:
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
這裏要注意,我的機器上出現了network unreachable的錯誤,解決辦法是:打開/etc/hosts
添加紅色部分
127.0.0.1 localhost
127.0.1.1     ubuntu
74.125.237.1   dl-ssl.google.com
然後可以新建一個自己的工作目錄並打開:
$ mkdir AndroidSourceCode
$ cd AndroidSourceCode
緊接着,以下命令中的android-4.0.1_r1可以換爲你所需要的版本,具體名稱參見http://source.android.com/source/build-numbers.html,以下是一部分的版本名稱:
JRO03Dandroid-4.1.1_r1.1Nexus 7
JRO03Eandroid-4.1.1_r2Nexus S
JRO03Handroid-4.1.1_r3 
JRO03Landroid-4.1.1_r4Nexus S
JRO03Oandroid-4.1.1_r5Galaxy Nexus
JRO03Randroid-4.1.1_r6Nexus S 4G
JRO03Sandroid-4.1.1_r6.1Nexus 7
JZO54Kandroid-4.1.2_r1Nexus S, Galaxy Nexus, Nexus 7
JZO54Landroid-4.1.2_r2
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
最後,下載代碼:
$ repo sync
這個過程比較漫長,請耐心等待,關於怎麼在eclipse中利用Android源代碼進行編譯和調試,下一篇文章裏將會提到。這裏會遇到一個很大的問題:repo sync會卡住,在這個鏈接裏http://stackoverflow.com/questions/2091474/repo-sync-problem有解決方案,將虛擬機裏的ubuntu內存設置得更大一些,最關鍵的是將VMWare Workstation的Network Adapter設置爲橋接方式上網。但是由於網絡環境的限制,我的機器不能設置橋接,讀者可以嘗試一下橋接方式上網,這裏有一篇文章關於怎麼設置VMware爲橋接上網,http://blog.csdn.net/gavin_dinggengjia/article/details/6325904 。還有一個解決方法是輸入以下命令,可以嘗試不一定百分百成功:
$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
最後給大家推薦一個Android官網上可以下載的Eclipse,集成了ADT與Android SDK,用起來很方便,http://developer.android.com/sdk/index.html。以及源列表:http://wiki.ubuntu.org.cn/%E6%BA%90%E5%88%97%E8%A1%A8

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