AndroidStudio源碼開發環境搭建

一. 準備

本文介紹採用Android Studio來搭建源碼調試環境

1.1 下載Android Studio

**調整內存大小: ** Android Studio需要大量的內存來加載Android源碼,所以經常會遇到內存不足的問題, 需要加大內存. 點擊Help-> Edit Custom VM Options, 比如 “-Xms4096m -Xmx4096m”

更多資料:

1.2 下載Android系統源碼

1.2.1 安裝repo

mkdir ~/bin PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

1.2.2 初始化repo

mkdir ~/aosp //創建目錄,可自己定義
cd ~/aosp
git config --global user.name "Gityuan" //配置git的用戶名
git config --global user.email "[email protected]" //配置git的郵箱

1.2.3 下載原生Android源碼

如下第一條是下載master分支代碼;如果需要下載某條指定分支,可通過第二條命令,比如指定分支android-7.0.0_r1, 其他分支信息可查看https://source.android.com/source/build-numbers.html#source-code-tags-and-builds.

repo init -u https://android.googlesource.com/platform/manifest
repo init -u https://android.googlesource.com/platform/manifest -b android-7.0.0_r1

初始完成後,可以開始同步代碼,其中如下第一條是同步所有可用的project,第二條只同步當前初始化的分支,第三條是隻同步frameworks/base庫。

repo sync
repo sync -c -j4
repo sync platform/frameworks/base -c -j4

相關資料:

1.2.4 編譯Android源碼

以build aosp的eng版本爲例:(當然build前需要先配置jdk環境)

make clobber    //刪除所有先去build所產生的output文件
source build/envsetup.sh    //創建環境變量
lunch aosp_arm-eng          //選擇build target
make -j4                    //build源碼

二. 搭建源碼環境

2.1 生成IDE相關文件

idegen專門爲IDE環境調試源碼而設計的工具, 依次執行如下命令:

soruce build/envsetup.sh  
mmm development/tools/idegen/  
./development/tools/idegen/idegen.sh

以上3個步驟的含義依次如下:

Step 1: 用於初始化環境變量
Step 2: 生成文件out/host/linux-x86/framework/idegen.jar
Step 3: 源碼根目錄生成文件android.ipr(工程相關設置), android.iml(模塊相關配置)

2.2 源碼導入Android Studio

打開Android Studio, 點擊File -> Open,選中前面生成的android.ipr文件即可, 該過程較耗時

(a) 加載前配置文件提速:

打開android.iml文件,有大量excludeFolder,是指不會導入到AS的模塊,默認除了以下14個文件夾之外的所有文件都會導致到AS工程, 這顯然還會非常龐大的,那麼我們可以有選擇的導入 如下:

<excludeFolder url="file://$MODULE_DIR$/.repo"/>
<excludeFolder url="file://$MODULE_DIR$/external/bluetooth"/>
<excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs"/>
<excludeFolder url="file://$MODULE_DIR$/out/host"/>
<excludeFolder url="file://$MODULE_DIR$/prebuilt"/>

(b) 加載後提速:

如果已經把全部項目導入到Android Studio,又想刪除怎麼辦,其實有一個簡單的方法就是進入目錄Project Structure -> Modules, 可快速去除某些模塊, 其中紅色代碼Exclueded選項(即代表已刪除的目錄), 如下圖:

as_modules

2.3 配置源碼正確跳轉

這裏的配置JDK/SDK,是用於解決在分析和調試源碼的過程,能正確地跳轉到目標源碼,而非SDK中的代碼。 點擊File菜單下的Project Structure.

Step 1 新建JDK

Project Structure -> SDKs, 新建 JDK(None), 其中JDK目錄可選擇跟原本JDK一致即可, 然後刪除其classpath和SourcePath的內容,確保使用Android系統源碼文件

jdk_none

Step 2 配置SDK

Project Structure -> SDKs, 選中Android API 25 Platform, 然後選擇其Java SDK爲前面新建的JDK(None)

sdk_none

Step 3 選擇SDK

Project Structure -> Project -> 選中Project SDK, 選擇前面的Android API 25 Platform

project_sdk

Step 4 建立依賴

Project Structure -> Modules -> android -> Dependencies: 先刪除Android API 25 Platform之外的所有依賴, 然後點擊下圖綠色的+號來選擇Jars or directories,將frameworks添加進來, 也可添加其他所關注的源碼;

project_dependencies

下圖便是添加後的結果圖:

project_result

三. 在線調試

前面已搭建好了Android的源碼調試環境, 接下來可以在線調試源碼. 首先,需要一臺具有debug版的手機, 打開開發者選項, 允許USB調試.

3.1 attach系統進程

frameworks各大核心服務運行在system_server進程, 在調試器上名字爲system_process,通過如下操作attach到我們要調試的目標進程, 同理, 要調試其他app進程也是這個方式.

as_attach

3.2 進入調試

首先需要設置斷點, 一旦進入斷點便會停下來, 可以查看當時各個線程/變量值. 關於調試下一步等快捷鍵, 只需點擊Tools即可看到.

 

四. 相關知識點

搭建源碼過程涉及一些知識點,這裏再進一步說明,在源碼開發過程一定離不開repo和git命令,其中關於Git命令的用法,大家可以看如下:

4.1 build類型

build類型有eng, userdebug, user這3者的區別:

類型 eng userdebug user
ro.debuggable 1 1 0
ro.kernel.android.checkjni 1 0 0
ro.secure 0 0 1
adb(默認狀態) 打開 打開 關閉

eng/userdebug版本會開啓不同的debug屬性以及默認打開adb; 而user版本則關閉debug屬性且默認關閉adb功能。

4.2 Repo命令說明

Android系統源碼是有非常多的git庫組成的,爲例更加便捷方便地管理所有的git庫,便有了repo存在的價值。 Repo是一個庫管理工具,是建立在git之上,爲了更好的管理具有多個git庫的工具。

init:

repo init -u <URL> [<OPTIONS>]
  • -u: manifest所在URL,例如 https://android.googlesource.com/platform/manifest;
  • -b: 指定版本,例如 android-7.0.0_r1
  • -m: manifest名,默認爲 default.xml.

sync:

repo sync //同步所有的可用project
repo sync PROJECT0 PROJECT1 ... //同步一個或多個project

upload:

repo upload [<PROJECT_LIST>]

diff:

repo diff

download: 從review系統 下載指定的change, 到本地project.

repo download <TARGET> <CHANGE>

例如:從庫platform/build中將change 23823 拉到本地:

repo download platform/build 23823

forall: 讓每一個git庫都執行相應的command

repo forall [<PROJECT_LIST>] -c <COMMAND>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章