當前位置:
首頁 > 最新 > 如何閱讀Android項目的源碼,快速梳理程序主線

如何閱讀Android項目的源碼,快速梳理程序主線

一、為什麼要梳理程序主線

在工作中,經常會遇到從別人手裡接手一個項目的代碼,只針對其中某一個功能修修補補,或者新增一個模塊這樣的工作。如果對方不能花太多時間幫助梳理,並且代碼缺少必要的注釋時,自己拿到這樣一個源碼,往往不知從哪裡下手,找不到需要修改的模塊在什麼位置。特別是工程比較大,代碼比較多時,把代碼一行一行讀下來很不現實,事倍功半。最近讀了一份Android studio工程的源碼,總結了一些規律和套路,同大家分享。

二、先把代碼跑通

首先要先把代碼跑通,這是一切工作開展的前提。代碼從一台開發機拷貝到另一台,由於編譯器設置的不同,或是環境配置的不同,一般來說不能一次性編譯通過,會報各種各樣奇怪的錯誤。常見的錯誤有:Android studio版本太低需更新;Android studio在國內的更新伺服器被牆,需要設置合適的鏡像代理;SDK、NDK等外部依賴的軟體開發工具包路徑配置不一致;SDK版本號設置與本機環境不匹配等。這個過程要根據所報的錯誤百度解決,一般來說自己遇到的問題都有別人遇到過,可以參考。

三、開始梳理主框架

在編譯器左側區域選擇Project視圖,可以看到工程的文件結構。一般來說,app > src > main > java 目錄下,是我們需要研讀的代碼。

首先打開AndroidManifest.xml,找到一堆下面的以及裡面所包含的,如下所示:

android:name=".base.MyApplication"

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:supportsRtl="true"

android:theme="@style/AppTheme">

android:name=".show.WelcomeActivity"

android:screenOrientation="portrait"

android:windowSoftInputMode="adjustResize|stateHidden">

android:name=".show.MainActivity"

android:screenOrientation="portrait"

android:windowSoftInputMode="adjustResize|stateHidden"/>

android:name=".show.LoginActivity"

android:launchMode="singleTask"

android:screenOrientation="portrait"

android:windowSoftInputMode="adjustResize|stateHidden"/>

android:name=".show.LocalActivity"

android:screenOrientation="portrait"

android:windowSoftInputMode="adjustResize|stateHidden"/>

以上截取了四個。每個activity可以理解為具有相對獨立功能的一個窗口,應用程序打開後,根據程序邏輯,在各個activity之間跳轉,以完成特定的功能。根據activity的android:name,可以大概猜測出這個activity所完成的功能。在這個程序中,我們可以根據字面意思來猜測:WelcomeActivity是歡迎界面;MainActivity是應用程序主界面,相當於根窗口;LoginActivity是用戶登錄界面,以此類推。其中,WelcomeActivity中包含這樣兩行代碼:

這表示,該activity是應用程序打開後第一個啟動的activity。

接下來,對應去閱讀WelcomeActivity的java代碼。

代碼的位置在哪裡呢?可以用文件名搜索的方法,也可以根據AndroidManifest.xml里指示的位置打開。

package="com.traffic.survey">

打開文件後,可以看到java代碼,可以看到有一些諸如onCreate,init等函數。因為我們的主要目的是梳理程序主框架,所以可以不用對代碼細節研讀太細,直接在文檔中ctrl+F,搜索關鍵字「startActivity」或者「Intent」,來快速定位到activity跳轉的代碼。

因為我們知道,在Android中實現窗口跳轉需要調用如下API:

startActivity(newIntent(this,newActivity.class));

用搜索關鍵字的方法,可以提高讀代碼的效率,快速梳理各窗口之間的關係。比如,在WelcomeActivity中的搜索結果是這樣的:

public voidonAnimationEnd(Animator animator) {

if(TextUtils.isEmpty(userId)) {

startActivity(newIntent(WelcomeActivity.this,LoginActivity.class));

}else{

startActivity(newIntent(WelcomeActivity.this,MainActivity.class));

}

finish();

}

通過這一小段,可以大概知道跳轉邏輯。歡迎動畫結束時,判斷userId是不是空。如果是空,則跳轉到LoginActivity(登錄窗口);如果非空,則跳轉到MainActivity(主窗口)。

此時按住ctrl鍵不放,用滑鼠點擊LoginActivity,可以直接跳轉到LoginActivity的java代碼。再用相同的關鍵字搜索方法,搜索LoginActivity的窗口跳轉邏輯。

這樣就可以快速梳理出整個程序的窗口跳轉邏輯,快速定位到自己需要修改的代碼在哪裡。

四、精讀所需修改的代碼的業務邏輯

通過梳理主框架,已經定位到自己所需修改的代碼位置時,需要精讀此處的代碼,徹底掌握這部分的業務邏輯,才能在此基礎上修改。在這裡不具體舉例如何修改代碼,只介紹如何找到該Activity對應的布局文件。

protected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initWidget();

initData();

}

以上代碼是MainActivity的onCreate函數。此處的紫色斜體字activity_main,就是布局文件的名稱。該布局文件的目錄位置在:app > src > main > res > layout > activity_main.xml。如下圖所示:

打開這個activity_main.xml文件,默認會打開Design視圖,能夠直觀地看到窗口的設計資源以及位置。在窗口左下角可以進行Design視圖和Text視圖的切換。

代碼中的R.id.xxx,則都是該布局文件中的資源ID,可對應查找。

五、最後

以上就是我讀代碼的心得。不對之處,請大家批評指正。或者還有什麼別的技巧方法,歡迎留言交流。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序媛王婷婷 的精彩文章:

TAG:程序媛王婷婷 |