(6)Android之路====Android上层DEBUG与调试

本文详细介绍了如何在Android系统中进行DEBUG和调试,特别是针对frameworks和packages的调试。首先,通过从清华服务器下载AOSP源代码,然后进行编译环境的搭建,包括删除.repo文件、配置Android Studio加载源码、设置SDK。最后,通过运行Android模拟器并附加调试器到进程,实现了对源码的调试,以org.chromium.webview_shell为例展示了调试过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DEBUG和调试在日常工作中是一个很常用的方式.当对软件某一部分不是很了解时,DEBUG是一种很好的学习方式,下面就以Android系统为例,介绍并使用这些功能.我们先来看一下Android的框架:

在AOSP工程中,我们这里粗略地把它们看做三层:
①由Linux构成的核心层;
②由frameworks和packages构成的应用层;
③连接内核层和应用层的中间件层.

本博文的重点是调试frameworks和packages,首先我们需要构建环境:

1),下载AOSP源代码

国内的网络环境大家都清楚,所以,这里是从清华服务器下载代码,下载方法可以参考官方网站教程(官网),这里,我直接贴出来了:

1,下载repo工具:

mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod a+x ~/bin/repo


vim ~/bin/repo
# 将这行
REPO_URL = 'https://gerrit.googlesource.com/git-repo'
# 改为这行
REPO_URL = 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

2,下载源码

下载方式有两种,1种是直接下载更新包(https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar),下载完后解压到一个目录,然后执行repo sync -j4,以进行同步一下代码,同步完之后,我们在此目录执行rm -rf .repo删除".repo"文件,源码就是从这个文件中解析出来的,正常编译不需要此文件夹,如果后续不需要同步代码或者计算机磁盘容量有限,建议删除,这个文件比源码大,几十个G.

还有一种方式是传统方式下载源码,建议用传统模式,因为上面的更新包只是最新的代码,我前些天下载的更新包是Android R(11.0)的,现在是2019年5月,Android Q都没有正式上市,Android R有点超前,建议下载Android O的代码,原因如下:

首先,Android O(8.1)是一个里程碑,和前面的版本有很大改进,这个后续有机会可能会讲,且衍生了Android Go,Android P上的Go性能比不上Android O上的Go版的性能,且在P上明显可以感受到进一步收缩权限代码的一些开发上的麻烦,因为Google正在一步步地收回Android的一些客制化权限,特别是Framework这个层次,另外就是,版本越新,代码可能会更复杂一些,我们学习,需要代码相对容易理解,并且又跟得上步伐.另外,我用的老款thinkpad,编了Android P,模拟器有点卡顿,Android O的比较流畅.

传统方式:

# 建立工作目录
mkdir aosp
cd aosp

# 初始化仓库,下载七八十个G,看网速,我这3~7MB/s左右,也下载了很久
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r35
repo sync -j4

下载完之后(建议删除".repo"),开始编译Android系统:

cd aosp
source ./build/envsetup.sh
# 建议选x86,选别的,比如arm64,x86_64什么的,可能比较卡
lunch aosp_x86-eng
# 编译,看电脑性能,编个把小时,我用服务器-j28时也要1个多小时
make -j4
# 编译完成后输入下面命令会出现手机模拟器,后边可以跟一些参数,比如指定ram容量
emulator

下面,我们为Debug做一些源码上的适配,我们基于Android Studio工具进行说明,用eclipse也是可以的,在AOSP源代码中做如下编译

mmm development/tools/idegen/
source development/tools/idegen/idegen.sh

运行完成后会在根目录生成android.ipr和android.iml文件,android.ipr是Android Studio用来加载的文件,android.iml是配置文件,用来显式标注加载哪些文件,不加载哪些文件,因为我们只调试应用层,所以只加载frameworks和packages这两个文件,其它的都不加载,我们对android.iml做如下配置(根据实际情况来,有可能还有一些其它文件,也加上):

<excludeFolder url="file://$MODULE_DIR$/.repo" />
<excludeFolder url="file://$MODULE_DIR$/abi" />
<excludeFolder url="file://$MODULE_DIR$/art" />
<excludeFolder url="file://$MODULE_DIR$/bionic" />
<excludeFolder url="file://$MODULE_DIR$/bootable" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/cts" />
<excludeFolder url="file://$MODULE_DIR$/dalvik" />
<excludeFolder url="file://$MODULE_DIR$/developers" />
<excludeFolder url="file://$MODULE_DIR$/development" />
<excludeFolder url="file://$MODULE_DIR$/device" />
<excludeFolder url="file://$MODULE_DIR$/docs" />
<excludeFolder url="file://$MODULE_DIR$/external" />
<excludeFolder url="file://$MODULE_DIR$/hardware" />
<excludeFolder url="file://$MODULE_DIR$/libcore" />
<excludeFolder url="file://$MODULE_DIR$/libnativehelper" />
<excludeFolder url="file://$MODULE_DIR$/ndk" />
<excludeFolder url="file://$MODULE_DIR$/out" />
<excludeFolder url="file://$MODULE_DIR$/pdk" />
<excludeFolder url="file://$MODULE_DIR$/prebuilt" />
<excludeFolder url="file://$MODULE_DIR$/prebuilts" />
<excludeFolder url="file://$MODULE_DIR$/sdk" />
<excludeFolder url="file://$MODULE_DIR$/system" />
<excludeFolder url="file://$MODULE_DIR$/tools" />

另外,添加完上述配置信息后,还可以把android.iml中非frameworks和非packages的配置都删除,这样就可以不加载那些不必要文件.

做完上述修改之后,用Android Studio加载文件,File-->Open-->找到aosp源码路径,加载android.ipr,之后,等待加载完毕,如下图:

加载完后,我们进行配置, File-->Project Structure,首先添加SDK,如下图:

Android 8.1对应的API是27,所以,确保我们这里有加载API 27的SDK,这个SDK是通过Android Studio在创建手机模拟器时下载的,之后,如如下配置:

选择项目的SDK为Android API 27,然后为了能够在调试源码时,加载我们下载的AOSP源码,我们还需要做如下配置:

做完这些步骤之后,我们就可以调试源码了,我们先运行AOSP代码编译出来的Android手机模拟器(不是Android studio创建的),运行起来后,Android Studio会自动检测到模拟器的存在,我们随便调试一个代码作为演示,我们选择Run-->Attach Debugger to Android process,我们选择org.chromium.webview_shell这个进程,如下图:

然后,WebViewBrowserActivity.java这个文件,在loadUrlFromUrlBar()这个方法的第一行,打一个断点,之后,在手机模拟器的WebView中输入一个,比如www.baidu.com,然后点击回车,如下图:

回车之后,就会进入Android Studio的Debug流程,如下图:

之后点击调试箭头或者快捷键调试即可,比如F8是单步调试等.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值