ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Android Studio导入Android 源码

2021-01-06 11:01:10  阅读:732  来源: 互联网

标签:intermediates vendor 源码 Studio Android packages android out


作为Android平台开发者,需要阅读和编写Android平台源码,一个好的工具可以事半功倍。

本文介绍如何通过Android Studio 导入Android平台源码。

平台和软件信息

  • Android Studio: 4.1.1
  • Ubuntu 20.04
  • Android 10.0 源码
  • Android根目录:/home/tanfuhai/data/code/android/

一键生成Android.ipr文件

通过Android Studio打开工程需要生成一个Android.ipr文件,笔者封装了一个shell脚本命令,请按照如下方法下载脚本并执行即可:

  1. 下载脚本点击下载android_studio_ipr,解压缩,比如存放于:/home/tanfuhai/Downloads/
  2. 进入Android源码根目录,执行:
chmod a+x /home/tanfuhai/Downloads/generate_android_studio_ipr/studio_impl.sh
/home/tanfuhai/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
  1. 打开Android Studio->File->Open 打开生成的android.ipr文件。
  2. 导入源码就完成了,等待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 的过滤

  1. 选中SecureElement
  2. 右键-》mark directory as-》cancel exclusion
  3. 点击src目录-》右键-》mark directory as-》source root
  4. 经过如上步骤,SecureElement就可以进行代码跳转以及文件搜索导航了。

![image.png](https://www.icode9.com/i/ll/?i=img_convert/6f84b477e5e31a50d1783bad5ca05dc2.png#align=left&display=inline&height=224&margin=[object Object]&name=image.png&originHeight=447&originWidth=735&size=77114&status=done&style=none&width=367.5)

生成android.ipr文件的详细步骤。

  1. 将excluded-paths文件拷贝到Android源码根目录,比如: /home/tanfuhai/data/code/android/
  2. source build/envsetup.sh
  3. mmma development/tools/idegen/会生成idegen.jar,google默认的jar不会过滤掉不需要的文件和目录,所以笔者更改了一下源码,生成了一个自己的jar。
  4. 执行development/tools/idegen/idegen.sh,会生成如下三个文件:
    1. android.iml
    2. android.ipr 用Android Studio打开这个文件。
    3. android.iws
  5. 打开Android Studio->File->Open 打开生成的android.ipr文件。

标签:intermediates,vendor,源码,Studio,Android,packages,android,out
来源: https://blog.csdn.net/xiaosayidao/article/details/79023369

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有