Android Studio导入Android平台源码
16lz
2021-01-23
作为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.sh
mmma 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文件。
更多相关文章
- android XML文件序列化
- Android各版本源码下载链接
- Android Studio(十二):打包多个发布渠道的apk文件
- [置顶] Android——4.2.2 文件系统目录分析
- [图解]Android源码分析——Service的启动和绑定过程
- Linux下 解包/打包 Android 映像文件 system.img, boot.img, ram
- android下面res目录使用
- AndroidManifest.xml 配置文件
- Android消息循环机制源码分析