AndroidStudio查看AOSP的两种方法

作者:利维亚的杰洛特

本篇文章主要分享一些自己平时工作中使用AndroidStudio查看aosp的方法,同时抛砖引玉,希望知道其它便利有效的查看调试方式技巧的大佬们能够不吝赐教,大家互相分享,共同进步。

如果直接用AndroidStudio打开aosp根目录,那么打开任意一个Java类,默认情况可能是这样的:

Java文件的标签页显示图标为

,表示“Java class located out of the source root”,并且其内部的成员变量之类的也没有被语法高亮。

经过我们配置后,被识别后的Java文件被效果如下图所示:

Java文件的标签页显示图标为
,且成员变量也被高亮。

更重要的是,此时代码内部已经建立起了索引,比如可以进行代码补全(这里的代码不仅是补全定义在当前类中的域,也可以补全父类的域,以及其它类的域):

或查看某个域被哪些类调用了:

以及代码跳转等一系列便捷功能。

1 主流方法

1.1 设置步骤

第一种方法应该很多人都知道,我从接触Android开始的很长一段时间用的都是这种方法,该方法需要一套已经编译过的AOSP。

1)、首先确保已经执行过:

soruce build/envsetup.sh

等命令加载编译所需的环境变量。

2)、接着执行:

mmm development/tools/idegen/ -j16

编译成功后,会输出:

我这里编译之前设置了生成目录的环境变量为out_sys,所以生成文件在out_sys。

3)、此时可以执行命令:

./development/tools/idegen/idegen.sh

如果你的生成目录也和我一样在out_sys的话,可能需要新建一个out/host/linux-x86/framework/目录,然后将idegen.sh复制过去:

cp out_sys/host/linux-x86/framework/idegen.jar out/host/linux-x86/framework/

当看到有类似输出:

的时候便可以了,最终会在aosp根目录生成两个文件,android.ipr,android.iml:

4)、通过Android打开这个android.ipr。由于是第一次打开源码会为所有模块建立索引,所以耗时非常久,相当长的时间内AndroidStudio卡的都不能使用,这是我放弃使用这种方式查看aosp的主要原因。实不相瞒,我个人已经很久没用过这种方式了,这次是为了写这篇文章所以我又试了一次这种方法,怎么说呢,熟悉的感觉又回来了…慢的让人发指,有的时候你甚至分不清是到底是真的在建索引还是单纯卡死了。

1.2 优缺点

由于卡的时间太久不想等了,所以后面的步骤就不演示了,其实也没啥内容了,说一下这种查看方法下的可能有用的技巧:

  • 将你用不到的代码目录设置为excluded,这个操作在此种方式下似乎用处不大。
  • 在android.iml中将你用不到的代码目录,从sourceFolder改为excludeFolder,这个方法很有用,不论是在建立索引的时候,还是在你后续查看aosp的时候,都可以帮你过滤掉很多无关代码。
  • 将Project Structure -> Modules -> Dependencies下的jar包啥的都删掉,避免代码跳转的时候跳到其它乱七八糟的地方。

这种查看aosp的方式,优点就是一次性为所有模块建立索引,同时也是缺点,第一次加载因为要建立索引所以巨慢,后续再次打开虽然比第一次要快很多,但也是相对的,我个人觉得花的时间还是比较久。

另外之前说的修改android.iml的方法,的确是一个好方法,但是也不是没有缺点,比如配置这个可能比较麻烦,虽然这个配置操作是一劳永逸的,但是如果你换了另一个项目的代码看,那就又需要重新配置这个项目的android.iml,并且又需要经历一次巨TM久的建索引的熬人环节。我当时的做法是将android.ipr和android.iml进行了复用,比如我在项目A上配置过了这两个文件,那么当我重下了一套项目B的代码,我可以直接将项目A的android.ipr和android.iml复制到项目B中复用这两个文件。好处是的确省下了不少时间精力,缺点是如果两个项目中你想查看的文件的名字或所在目录碰巧不一样的话(比如Android平台升级了),可能比较麻烦,以及可能还有一些我没遇到过的未知问题。

如此种种,让我迫切希望寻找另一种查看aosp的方式。

2 简易方法

2.1 设置步骤

第一种方法的缺点我已经吐槽了很多了,但是还有一点也是不能忽视的,就是你需要一套已经编译过的aosp,很多时候我可能只拉了aosp中某一个库的代码,比如frameworks/base这个库,那么我就不能建立内部索引进行查看了吗。

现在的答案是可以,其实也很简单。不过这里还是拿整套aosp举例,操作是一样的:

1)、比如我现在下载了一套项目代码,接着直接将该项目的根目录在AndroidStudio中打开,初始所有的目录都是这样的:

2)、此时关闭掉右下角正在建立索引的操作:

3)、然后先将所有目录全部设置为Excluded:

目录被设置为Excluded后就像这样:

这一步也可以不做,我这么做只是希望一开始的时候就把无关模块排除掉,方便后续建索引和查看代码。

4)、然后重新再打开AndroidStudio,这个时候你会发现建索引的步骤没了,因为所有目录都被排除掉了。

5)、然后你想要查看哪些代码,就把这些代码所在的java目录或者src目录标记为Sources Root(这一步应该是基于IntelliJ IDEA的配置原理,但是我还没找到具体的理论支持内容),比如我经常看WMS相关的内容,在

frameworks\base\services\core\java\com\android\server\wm\

包中,那么我就可以把

frameworks\base\services\core\java

这个目录设置为Sources Root,就像这样:

目录被设置为Sources Root后,结果为:

此时便可以为这个目录重新建立索引了,比如我在WindowContainer.java这个类中,新建一个test方法,看看this都有哪些方法可以调用:

能看到代码补全的功能。

查看isDescendantOf这个成员方法都在哪些类里被调用了,也可以:

其它的就不过多介绍了,我个人目前使用的就是这种查看aosp的方式。

2.2 跳转到SDK的特殊情况

这里说一点可能会遇到的情况,即代码跳转可能会调转到SDK,而不是aosp,比如我通过Ctrl + 鼠标左键想要跳转到Rect这个类里去,发现跳转到了SDK里,而不是aosp中的Rect.java:

这个时候需要将Project Structure -> Modules -> Dependencies中的SDK依赖:

更换为本地的JDK包:

选择完就像这样:

此时再重新尝试跳转到Rect,就可以了:

如果不可以,可能是因为Rect.java位置为:

frameworks\base\graphics\java\android\graphics\Rect.java

你需要将Rect.java所在目录的的java目录:

frameworks\base\graphics\java

设置为Sources Root:

3 IntelliJ IDEA补充

Configure folder structure

Folder categories

Folders within a content root can be assigned to several categories.

This folder contains production code that should be compiled.

The IDE considers that files in the Generated Sources folder are generated automatically rather than written manually, and can be regenerated.

These folders keep code related to testing separately from production code. Compilation results for sources and test sources are normally placed into different folders.

The IDE considers that files in this folder are generated automatically rather than written manually, and can be regenerated.

(Java only) Resource files used in your application: images, configuration XML and properties files, and so on. During the build process, resource files are copied to the output folder as is by default. You can Change the output path for resource files in your project.

Similarly to sources, you can specify that your resources are generated. You can also specify which folder within the output folder your resources should be copied to.

These folders are for resource files associated with your test sources.

Files in excluded folders are ignored by code completion, navigation and inspection. That is why, when you exclude a folder that you don’t need at the moment, you can increase the IDE performance. Normally, compilation output folders are marked as excluded.

Apart from excluding the entire folders, you can also exclude specific files

Configure folder categories

Android 学习笔录

Android 性能优化篇:https://qr18.cn/FVlo89
Android 车载篇:https://qr18.cn/F05ZCM
Android 逆向安全学习笔记:https://qr18.cn/CQ5TcL
Android Framework底层原理篇:https://qr18.cn/AQpN4J
Android 音视频篇:https://qr18.cn/Ei3VPD
Jetpack全家桶篇(内含Compose):https://qr18.cn/A0gajp
Kotlin 篇:https://qr18.cn/CdjtAF
Gradle 篇:https://qr18.cn/DzrmMB
OkHttp 源码解析笔记:https://qr18.cn/Cw0pBD
Flutter 篇:https://qr18.cn/DIvKma
Android 八大知识体:https://qr18.cn/CyxarU
Android 核心笔记:https://qr21.cn/CaZQLo
Android 往年面试题锦:https://qr18.cn/CKV8OZ
2023年最新Android 面试题集:https://qr18.cn/CgxrRy
Android 车载开发岗位面试习题:https://qr18.cn/FTlyCJ
音视频面试题锦:https://qr18.cn/AcV6Ap

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/18675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决一个Sqoop抽数慢的问题,yarn的ATSv2嵌入式HBASE崩溃引起

新搭建的一个Hadoop环境,用Sqoop批量抽数的时候发现特别慢,我们正常情况下是一个表一分钟左右,批量抽十几个表,也就是10分钟的样子,结果发现用了2个小时: 查看yarn日志 发现有如下情况: 主要有两…

【iOS】GCD深入学习

关于GCD和队列的简单介绍请看:【iOS】GCD学习 本篇主要介绍GCD中的方法。 栅栏方法:dispatch_barrier_async 我们有时候需要异步执行两组操作,而且第一组操作执行完之后,才能开始执行第二组操作,当然操作组里也可以包含一个或者…

HTTP——一、了解Web及网络基础

HTTP 一、使用HTTP协议访问Web二、HTTP的诞生1、为知识共享而规划Web2、Web成长时代3、驻足不前的HTTP 三、网络基础TCP/IP1、TCP/IP协议族2、TCP/IP的分层管理3、TCP/IP 通信传输流 四、与HTTP关系密切的协议:IP、TCP和DNS1、负责传输的 IP 协议2、确保可靠性的TCP…

Gartner:2022年全球IaaS公有云服务市场增长30%,首次突破1000亿美元

根据Gartner的统计结果,2022年全球基础设施即服务(IaaS)市场从2021年的928亿美元增长到1203亿美元,同比增长29.7%。亚马逊在2022年继续排在IaaS市场的第一名,其次是微软、阿里巴巴、谷歌和华为。 最新消息,…

制砖机系统比例控制阀放大器

制砖机系统是一种生产砖块的机器设备系统。该系统由多个部分组成,包括压力系统、模具和振动系统、烘干和烧制系统等。压力系统是制砖机的主要组成部分之一,它通过压力将原料压缩成一定形状和尺寸的块状,然后经过烘干和烧制等步骤,…

解决单节点es索引yellow

现象 单节点的es,自动创建索引后,默认副本个数为1,索引状态为yellow 临时解决 修改副本个数为0 永久解决 方法1、修改elasticsearch.yml文件,添加配置并重启es number_of_replicas:副本分片数,默认…

【数据结构】——线性表的相关习题

目录 题型一(顺序表的存储结构)题型二(链表的判空)题型三(单链表的建立)题型四(顺序表、单链表的插入删除) 题型一(顺序表的存储结构) 1、线性表的顺序存储结…

解决Git下载失败太慢

解决Git下载失败太慢 Git 官网下载地址: https://git-scm.com/downloads Windows 下载地址: https://git-scm.com/download/win 用官网的地址下载, 需要从github上下载, 由于国内某些原因, 下载速度缓慢, 还经常失败. 国内用户, 可以通过镜像的方式, 提高下载速度. 阿里镜…

Linux - 进程地址空间

引入 在学习C语言的时候,内存包括栈区、堆区、静态区 这个布局是内存吗? 不是!! 这是进程地址空间! 下面测试一下: 11540是bash进程 我们修改一下源程序,在观察下结果 发现父进程的g_value的值不…

gitee修改代码提交操作步骤说明

一,简介 本文主要介绍如何从gitee仓库下载文件,本地修改,本地提交,然后再push到远程服务器的操作步骤。供参考,欢迎一起讨论交流~ 二,操作步骤 总的操作步骤分为以下几步 1,远程服务器下载文…

TI的IWR6843跑3D People Tracking(3D人体检测追踪实验)demo的上手教程

1.硬件准备 1.IWR6843板子 2.两个USB转串口模块(因为我的是自己做的板子,板子上没有集成USB转串口芯片) 2.软件准备 1.最新版本的CCS,注意后缀没有THEIA https://www.ti.com/tool/CCSTUDIO?DCMPdsp_ccs_v4&HQSccs 2.最新…

Linux(三)---------网络路由命令(route路由命令)

一.route路由命令 1.什么是route路由? 计算机之间的数据传输必须经过网络,网络可以直接两台计算机,也可以通过一个一个的节点去连接。路由可以理解为互联网的中转站,网络中的数据包就是通过一个一个的路由器转发到目的地的。 路…

微信小程序 - 解析富文本插件版们

一、html2wxml 插件版 https://gitee.com/qwqoffice/html2wxml 申请使用注意事项 插件版本解析服务是由 QwqOffice 完成,存在不稳定因素,如对稳定性有很高的要求,请自行搭建解析服务,或在自家服务器上直接完成解析。对于有关插…

私人网盘搭建(利用阿里云oss搭建)

1、个人网盘场景说明 个人网盘架构 使用ECS安装Cloudreve提供网盘服务,OSS提供存储服务。当用户使用个人网盘时,访问部署Cloudreve ECS的公网IP地址即可完成文件上传、下载、删除、分享等服务。 什么是Cloudreve Cloudreve可帮助您即刻构建出兼备自用…

视频太大怎么压缩变小?视频压缩技巧快来学

我们都知道,视频分辨率越高,文件体积也就越大,为了更好的存储、传输和播放,我们需要适当压缩视频的大小,那么怎么才能轻松的将视频文件压缩变小呢?下面就给大家分享几个简单的方法,一起来看看吧…

利用尺度因子方法恢复GRACE水储量变化

1.背景 重力恢复与气候实验(GRACE)观测地球重力势的时间变化。在考虑了大气和海洋效应后,每月到年际尺度上剩余的信号主要与陆地水储存(TWS)的变化有关。水储存变化的估计受到测量误差和噪声的信号退化影响&#xff0…

11年编码经验程序员惨遭淘汰解雇,原因竟是不会使用AI工具

近日,Twitter 上一名技术人分享了一个事件,即拥有11年Java编码经验、会 100% 手写代码的程序员因拒绝使用辅助代码工具,只想写可控的代码,竟败给一位仅有4年经验、却善用编码工具的后辈,惨遭面试淘汰。 当「拒绝使用编…

PHP代码审计——实操!

ctfshow PHP特性 web93 八进制与小数点 <?php include("flag.php"); highlight_file(__FILE__); if(isset($_GET[num])){$num $_GET[num];if($num4476){die("no no no!");}if(preg_match("/[a-z]/i", $num)){die("no no no!")…

建网站一般使用Windows还是liunx好?

建网站一般使用Windows还是liunx好&#xff1f; 1&#xff1b;服务器配置比较低时&#xff0c;最好使用linux系统。 对于一个电脑新手&#xff0c;刚开始做网站时&#xff0c;都会选择入门级的服务器&#xff0c;我刚开始做网站时&#xff0c;就是这样的。我购买了一台入门级服…

CS5265 USB-C to HDMI 4k@60Hz单转方案

CS5265AN是一款高性能Type-C/DP1.4至HDMI2.0b转换器芯片&#xff0c;集成了DP1.4兼容接收机和HDMI2.0b兼容发射机&#xff0c;还配备了CC控制器用于CC通信&#xff0c;实现DP Alt模式。DP接口包括4条主通道、辅助通道和HPD信号&#xff0c;接收器支持每通道最大5.4Gbps数据速率…