开发者社区> 宋金时> 正文

Android Studio在线调试Android Framework Java代码

简介: 一、准备工作 1、下载最新的Android Studio版本 https://developer.
+关注继续查看

一、准备工作

1、下载最新的Android Studio版本

https://developer.android.com/studio/index.html

当前最新的大版本是2.2
下载页面

2、下载Android系统源码

这里比较灵活,可以下载公司内部机型的代码,也可以下载原生AOSP的代码

环境配置参考

https://source.android.com/source/initializing.html

源码下载参考

https://source.android.com/source/downloading.html

编译运行参考

https://source.android.com/source/building.html

全部编译整个代码工程,中间如果有什么问题可以参考

https://source.android.com/source

二、配置Android Studio

1、配置vm options

一个完成Android源码会非常大,所以为了避免导入和生成index时OOM,最好提前配置一下Android Studio的vm options,可以参考下图是我的配置
配置vm option

2、配置最大打开文件数

在导入过程中会同时打开非常多的文件,为了避免too many files open错误,提前在profile文件中配置一下打开文件的数量,我这里是配置的2048
配置打开文件数量

三、创建Android Framework工程

整个Android源码全编成功之后,还需要编译idegen模块,用以生成Android studio的工程配置文件,对于高通有modem源码的项目这里有个坑,就是有一个hlos下的有一个android的软连接会链接到源码根目录,导致递归死循环,最终栈溢出而无法生成工程配置文件,所以需要删除这个软链接
删除递归链接

1、单独编译idegen模块

Vincent$ mmm development/tools/idegen/

编译成功之后就生成了idegen.jar

host Java: idegen (out/host/common/obj/JAVA_LIBRARIES/idegen_intermediates/classes)
Install: out/host/darwin-x86/framework/idegen.jar

2、运行idegen脚本

Vincent$ development/tools/idegen/idegen.sh
运行成功之后就会看到如下信息打出

Read excludes: 5ms
Traversed tree: 85308ms

同时在源码的根目录下生成android.ipr等工程配置文件

3、提升导入代码的速度

对于不关注的代码目录,可以通过修改android.iml来去除无用的源码和相关目录,用来提升加载速度
配置排除目录

四、导入和配置Android Framework工程

1、导入工程

打开Android Studio,然后找到根目录下生成的android.ipr文件并打开
打开工程
耐心等待index建立,预计需要10分钟左右,根据硬件配置不同时间略有差异
等待建立index

2、配置工程

导入完成之后右上角会有一个提示
配置framework
然后点击Configure
配置framework2
点击OK,然后点击左上角的Project并选择Project视图模式
配置framework3
然后按照下图进入工程配置
配置framework4

配置framework5
按照如下设置把JDK的classpath和sourcepath下的内容都删掉,使其能在debug时定位到项目中的源码
配置framework6
然后把Android SDK的classpath和sourcepath也删除,同时将Java SDK选为刚刚配置JDK1.8
配置framework7
设置Modules的依赖,将依赖中除了下图所示的之外全部删除
配置framework8
然后点击左下角的+选择Jars or directories添加framework相关的源码文件夹
配置framework9
点击OK,等待其建立index完成后工具栏的Attach debugger to Android process就会变成可点击状态
配置framework10

五、在线调试Android Framework

上面的配置工作完成后就可以开始在线调试了,但是前提是手机中的ro.debuggable要为1,或者是userdebug,eng版本的系统软件

1、attach到system_process进程

attach到调试进程

2、设置断点

成功attach后就可以打开想要设置断点的源码文件,然后在行号右边的空白处左键点击设置断点
设置断点

3、查看运行时状态

设置完成后就可以操作手机,当代码运行到断点处就可以停下来,这时就可以查看运行时的状态,包括变量的值,backtrace等
查看运行时状态
还可以在watches窗口添加想要查看的表达式的值
查看运行时状态2

4、获取backtrace快照

另外attach后,在不设置断点的情况下也可以实时的获取所有线程的backtrace的快照,作用类似于kill -3,但是只有Java层的trace
获取backtrace快照

六、在线调试其他APP进程

细心的同学可能会想,通过上面的设置我是不是可以attach到其他APP进程,然后把相关源码添加到依赖里面并设置断点debug,或者在framework的公共代码处设置断点debug?答案是可以的,有心的同学可以自己探索一下。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java:MyBatis Generator自动生成代码
Java:MyBatis Generator自动生成代码
42 0
阿里云AIoT低代码开发工具IoT Studio用户数已经突破10万!
IoT Studio面向各个行业提供场景化解决方案模板,企业可以直接利用现有的解决方案模版来开发自己的业务
1361 0
visual studio编写C#代码时“未能从程序集.....中加载类型”和“找不到方法”的一种可能的解决办法
编译前报错:$exception    {"未能从程序集“XSW.MySQLDAL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“XSW.MySQLDAL.EnterpriseLibraryProductDAL”。
1364 0
MyBatis Generator 代码生成器 快速入门指南
要使用MyBatis Generator(MBG)快速启动并运行,请按照下列步骤操作:1、适当地创建并填写配置文件。至少必须指定:一个元素来指定如何连接到目标数据库一个元素来指定生成的Java模型对象的目标包和目标项目用于指定生成的SQL映射文件的目标包和目标项目的元素(可选)一个元素来指定生成的客户端接口和类的目标包和目标项目(如果不希望生成Java客户端代码,则可以省略元素)至少有一个数据库元素有关配置文件的示例,请参阅XML配置文件参考页面。
843 0
Visual Studio 2010“.NET技术” 中的代码约定设置
  软件约定称为代码约定,通过这一约定可以表示代码正常工作所需的正式条件。 如果方法未按预期收到数据或生成的数据不符合预期的后置条件,代码约定将导致代码引发异常。 有关前置条件和后置条件的概述,您可能需要查看我上个月发表的文章 (msdn.microsoft.com/magazine/gg983479)。
702 0
我也来说说Entity Frame Work 4中的数据库优先和代码优先两种方式(1)
在 Entity Frame Work (后面直接简称其为EF) 中,支持两种方式创建,一种是数据库优先,另外一种是代码优先; EF是微软推出的一个ORM框架,而在这之前,Java早就有非常成熟的ORM框架了,比如Hibernate(当然,人家也有.NET版本的,叫NHibernate,多了个N),我这次只谈EF,NHibernate下次有时间再讲;   先讲数据库优先吧,数据库优先指的是先创建数据库,包括表和字段的建立,然后根据数据库生成ORM的代码,它是先创建数据库,再创建相关程序代码; 下面,我来看看如何具体操作。
666 0
MyBatis Generator (MBG) 代码生成器简介
MyBatis Generator(MBG)是MyBatis MyBatis和iBATIS的代码生成器。它将生成所有版本的MyBatis的代码,以及版本2.2.0之后的iBATIS版本。它将内省数据库表(或许多表),并将生成可用于访问表的工件。
1423 0
C#中与Oracle连接的代码(原创)
注意:一定要添加这个: 项目->添加引用->.NET->System.Data.OracleClient.dll     using System;using System.Data;using System.
887 0
+关注
宋金时
小米Android Framework及系统稳定性专家,专注Android系统改进及增强,研究跟进最新Android系统及特性,提升系统稳定性和用户体验
261
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载