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?答案是可以的,有心的同学可以自己探索一下。

目录
相关文章
|
28天前
|
SQL 人工智能 Dart
Android Studio的插件生态非常丰富
Android Studio的插件生态非常丰富
42 1
|
28天前
|
Ubuntu Linux Android开发
Android Studio支持多种操作系统
Android Studio支持多种操作系统
57 1
|
28天前
|
前端开发 数据处理 Android开发
Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍
本文深入探讨了Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍,以及具体操作步骤、常见问题解决、高级调试技巧、团队协作中的调试应用和未来发展趋势,旨在帮助开发者提高调试效率,提升应用质量。
45 8
|
28天前
|
数据可视化 开发工具 Android开发
Android Studio
Android Studio
85 1
|
2月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
32 1
|
2月前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异:从代码到用户体验
【10月更文挑战第5天】在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。它们在技术架构、开发环境及用户体验上有着根本的不同。本文通过比较这两种平台的开发过程,揭示背后的设计理念和技术选择如何影响最终产品。我们将深入探讨各自平台的代码示例,理解开发者面临的挑战,以及这些差异如何塑造用户的日常体验。
|
2月前
|
Java Unix Linux
Android Studio中Terminal运行./gradlew clean build提示错误信息
遇到 `./gradlew clean build`命令执行出错时,首先应检查错误信息的具体内容,这通常会指向问题的根源。从权限、环境配置、依赖下载、版本兼容性到项目配置本身,逐一排查并应用相应的解决措施。记住,保持耐心,逐步解决问题,往往复杂问题都是由简单原因引起的。
353 2
|
3月前
|
存储 Java Android开发
🔥Android开发大神揭秘:从菜鸟到高手,你的代码为何总是慢人一步?💻
在Android开发中,每位开发者都渴望应用响应迅速、体验流畅。然而,代码执行缓慢却是常见问题。本文将跟随一位大神的脚步,剖析三大典型案例:主线程阻塞导致卡顿、内存泄漏引发性能下降及不合理布局引起的渲染问题,并提供优化方案。通过学习这些技巧,你将能够显著提升应用性能,从新手蜕变为高手。
35 2
|
3月前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
166 1
下一篇
DataWorks