作為Android平臺開發者,需要閱讀和撰寫Android平臺原始碼,一個好的工具可以事半功倍,
本文介紹如何通過Android Studio 匯入Android平臺原始碼,
平臺和軟體資訊
- Android Studio 4.1.1
- Ubuntu 20.04
- Android 10.0 原始碼
- Android根目錄:/home/tanfh/data/code/android/
一鍵生成Android.ipr檔案
通過Android Studio打開工程需要生成一個Android.ipr檔案,筆者封裝了一個shell腳本命令,請按照如下方法下載腳本并執行即可:
- 下載腳本點擊下載android_studio_ipr,解壓縮,比如存放于:/home/tanfh/Downloads/
- 進入Android原始碼根目錄,執行:
chmod a+x /home/tanfh/Downloads/generate_android_studio_ipr/studio_impl.sh
/home/tanfh/Downloads/generate_android_studio_ipr/studio_impl.sh
如上命令執行完成之后,會生成:
- android.iml 模塊組態檔,可以配置模塊的資源**目錄和過濾目錄等,詳細可以參考A module file (the .iml file)
- android.ipr 工程相關的設定,詳細可以參考 ipr
- android.iws 作業區的設定,
關于這幾個檔案的官方介紹:
- *.iml and *.ipr files were project wide and could go into source control
- *.iws manages workspace settings specific to a user so shouldn’t go into source control
- 打開Android Studio->File->Open 打開生成的android.ipr檔案,
- 匯入原始碼就完成了,等待AS Indexing完成即可,
技巧
如下內容詳細分析腳本的原理以及高級用法,如果沒有特殊需求,本文后續內容可以不用在關注,
過濾檔案
google開發了一套工具來方便生成, AS可以識別的android.ipr檔案,原始碼位于:
development/tools/idegen
如果將所有的檔案都載入Android Studio,會導致indexing非常慢,讀者可以根據自己的模塊需求過濾掉不需要的檔案和目錄,
idegen可以通過excluded-paths 檔案來過濾不參與indexing的檔案和目錄,
詳細介紹可以查看excluded-paths檔案內部開頭介紹,全部是正則運算式,一個運算式一行,摘取片段介紹如下:
^(?!frameworks|packages|libcore|vendor|out|wingos|external)
^frameworks/(?!base|native|support|ex|opt|webview|av|minikin)
- 第一句含義:不過濾frameworks、packages、libcore、vendor、out目錄
- 第二句含義:不過濾frameworks/base等
讀者有任何需要過濾的可以按照如上方法進行撰寫即可,由于筆者作業集中在framework和apps,所以默認有如下的組態檔,讀者可以根據自己的需要進行定制,
^(.*/tests/.*)$
#exclude all jar
^(?!.*android-support-.*_intermediates/.*).*\.jar$
^(?!.*androidx.*_intermediates/.*).*\.jar$
^(?!frameworks|packages|libcore|vendor|out|wingos|external)
#ssl : apache-http|conscrypt|bouncycastle
^external/(?!apache-http|conscrypt|bouncycastle|jsr330|dagger2)
^frameworks/(?!base|native|support|ex|opt|webview|av|minikin)
^frameworks/base/(?!core|libs|services|packages|policy|media|telephony|graphics|cmds|telecomm|keystore|tools)
^frameworks/base/packages/(?!SettingsProvider|SystemUI|Keyguard|)
# package
^packages/(?!screensavers|WingUI|apps|providers|services)
^packages/apps/(?!Settings|SamSungCamera2|Launcher3)
#####for android 5.1
#^packages/apps/Email/(?!.*)
^packages/experimental
^packages/inputmethods
^packages/wallpapers
^out/(?!target|soong)
^out/target/(?!common|product)
^out/soong/(?!.intermediates)
^out/soong/.intermediates/(?!frameworks)
^out/soong/.intermediates/frameworks/(?!base)
^out/soong/.intermediates/frameworks/base/(?!core|framework|packages)
^out/soong/.intermediates/frameworks/base/framework/(?!android_common)
# android o add gen
^out/target/common/(?!obj|R|gen)
^out/target/common/obj/(?!JAVA_LIBRARIES|APPS)
^out/target/common/obj/APPS/(?!Email_intermediates|framework-res_intermediates|SystemUI_intermediates|wos-framework-res_intermediates)
^out/target/common/obj/JAVA_LIBRARIES/(?!framework_intermediates.*|framework2_intermediates|framework-base_intermediates|com.android.emailcommon_intermediates|mediatek-common_intermediates|uiautomator_intermediates|telephony-ext_intermediates|android-support.*_intermediates.*)
#y360
^mediatek/packages
#g628
^mediatek/operator
######################mediateck###########################
######################mediateck###########################
^vendor/(?!mediatek|qcom|wingos)
^vendor/widevine
#^vendor/lenovo
^vendor/mediatek/proprietary/(?!frameworks|packages)
#^vendor/mediatek/proprietary/packages/app(?!frameworks|packages)
^vendor/mediatek/proprietary/packages/(?!apps)
^vendor/mediatek/proprietary/packages/apps/(?!BackupRestore|Mms|Calendar|SamSungCamera)
^vendor/qcom/(?!proprietary)
^vendor/qcom/proprietary/(?!qrdplus)
^vendor/qcom/proprietary/qrdplus/(?!ChinaMobile|Extension|DataMonitor)
^vendor/qcom/proprietary/qrdplus/ChinaMobile/apps/(?!Backup|BackupReceiver)
通過AS exclude檔案和標記檔案為source root
除了根據腳本生成相關檔案之外,還可以可以通過Android Studio直接取消過濾和標記過濾,
比如想取消 packages/apps/SecureElement 的過濾
- 選中
SecureElement - 右鍵-》mark directory as-》cancel exclusion
- 點擊src目錄-》右鍵-》mark directory as-》source root
- 經過如上步驟,SecureElement就可以進行代碼跳轉以及檔案搜索導航了,

生成android.ipr檔案的詳細步驟,
- 將excluded-paths檔案拷貝到Android原始碼根目錄,比如:
/home/tanfh/data/code/android/ source build/envsetup.shmmma development/tools/idegen/會生成idegen.jar,google默認的jar不會過濾掉不需要的檔案和目錄,所以筆者更改了一下原始碼,生成了一個自己的jar,- 執行
development/tools/idegen/idegen.sh,會生成如下三個檔案:- android.iml
- android.ipr 用Android Studio打開這個檔案,
- android.iws
- 打開Android Studio->File->Open 打開生成的android.ipr檔案,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/246198.html
標籤:其他
上一篇:南郵安卓期末復習2021-1
下一篇:iOS自定義相機(帶拍攝區域邊框及半透明遮罩層): 1、身份證正反面相機(加一個長方形的框框并裁剪身份證照片) 2、手持證件照 相機(含demo原始碼)
