概述 记录编译Cronet for Android 的过程和步骤.
准备工具 install depot_tools 1 2 ## 下载 $ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git 添加进path,或者 .bashrc/.zshrc 1 2 ## 将 /path/to/depot_tools 天换成自己安装的目录即可 $ export PATH="$PATH:/path/to/depot_tools" 如果安装的位置是home目录下,上述命令切勿使用 ~,使用绝对路径或者 HOME 替代.
1 $ export PATH="$PATH:${HOME}/depot_tools" 我的安装路径是 ~/ide/depot_tools
所以,我执行的命令是
1 $ export PATH="$PATH:${HOME}/ide/depot_tools" 下载代码 找个目录,clone代码,我选择的是 ~/workspace/chromium 拉取代码,因为我不想要history,如果想要history,去掉 –no-history 即可. 1 2 ## 这个命令是第一次拉取代码使用 $ fetch --nohooks --no-history chromium 根据网速,快的话办小时,慢的话,数小时之后完成. 20G的东西,我的网速很慢,过了一夜吧,也没具体看多久,这个工具有个问题,没有进度条。。。 当命令结束之后,目录下就会出现隐藏文件.gclient 和 文件夹 src. 假如中间中断过,或者直接拷贝了一份已有的源码,非第一次拉取代码,可能会提示如下内容。 非初次同步,则执行同步代码的命令 1 $ gclient sync 进入漫长的等待…
概述 回顾一下 OKHttp 这个优秀库,画了张思维导图.
override 最近给电脑换了块SSD,装了Ubuntu 18.04。之前的aosp也不想copy过来了,直接重新编译一份,顺带看下新的SSD带来的提效。 因为手机是 nexus 6p,aosp 最后支持到 8.1. 记录下编译需要的操作。
步骤 open jdk(https://openjdk.java.net/install/) 1 sudo apt install openjdk-8-jdk repo(https://gerrit.googlesource.com/git-repo/) AUTO 1 sudo apt-get install repo MANUALLY 1 2 3 4 $ mkdir -p ~/.bin $ PATH="${HOME}/.bin:${PATH}" $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo $ chmod a+rx ~/.bin/repo AOSP mirror 1 mkdir aosp 1 2 3 4 5 6 7 8 9 10 11 12 git config --global user.email "tinggengyan@gmail.com" git config --global user.name "Tinggeng Yan" sudo apt install python cd aosp ## 切换指定版本分支 repo init -u https://mirrors.
概述 花了点时间,debug了一下系统,跟踪了一下Activity的启动流程.画了一张图,作为综述. 分析的 compileSdkVersion 为 28. 用的是 draw.io 画的,源文件.
概述 debug 是学习流程最快的方式,也是验证想法最好的方法.记录 Androidstudio 如何debug Android framework的代码.
使用无 AOSP 的代码(Java层) 这是最简单方便的方式了.
下载某个版本的 Android Source code 确认 Source code 正确下载了.
新建项目,所用的 compile SDK 版本为需要调试的代码版本 1 2 3 4 5 android { // 设置成需要需要分析的,且已下载源码的版本 compileSdkVersion 29 ...... } 新建并启动对应版本的模拟器. 打断点; 这里以系统的 ActivityManagerService 为例. 因为ActivityManagerService 并未导出到Android.jar,所以无法直接搜索定位到 .java文件,所以采用双击shift的方式,检索文件. attach 到对应的进程,运行,查看断点. ActivityManagerService 这个类是在系统 system_process 进程中的,所以,需要对system_process 进程进行 attach 操作. 小结 至此,经过如上操作,就可以对某个类进行debug操作了.对于分析framework代码也是方便的很.
可能遇到的问题 有时候还是会遇到代码行号不匹配,debug定位的代码行号不对,目前原因未知,应该是source code 和生成模拟器镜像的代码有出入. 没有好的解决办法,有个替代的方案.
断点后,有明确的thread stack信息; 找到最早一个可以定位准备行号的函数; 针对这个函数进行 findByUsage,在查出的结果中,查找stack信息指引的函数. 使用 AOSP 的源码进行调试 上述的方法基本能满足常见的debug需求了.但是有个前提是,debug的设备基本只能是模拟器或者装了官方release镜像的亲儿子. 对于有修改ROM需求的情况下,debug 则需要导入 aosp 中framework 的代码.
概述 之前一直寻找一款类似于windows上的sourceinsight的软件,后来无意发现 Understand,感觉挺好,熟悉一下,可以用来看代码.体验不错.
导入流程 和sourceinsight一样,都是新建一个project,在此基础上进行代码的阅读和修改; new project import project files 部分实用快捷键 command + F: 在侧边的文件栏可以按照文件名进行搜索; 在打开的文件内可以搜索匹配的关键词; command + G: 在搜索的基础上可以查找匹配的结果的下一项;
command +shift + G: 在搜索的基础上可以查找匹配的结果的上一项,即反向查找;
command + F3 搜索选中的内容
command + option + p/n 返回前一个/下一个修改的地方 部分实用的操作 绘图能力 uml 类图 在类名上右击,Graphical Views -> UML Class Diagram 查看选中类调用其他类的关系图(单向的调用) 在类名上右击,Graphical Views -> Cluster call 查看选中类和其他之间关系图(单向和双向的调用都会列出) 在类名上右击,Graphical Views -> Cluster callby Butterfly 查看选中类内部的调用关系 在类名上右击,Graphical Views -> Cluster callby Internal 查看选中类被哪些其他的类调用(单向的被调用) 在类名上右击,Graphical Views -> Cluster callby 预览能力,非常好用的功能 在类名上,右击 View Information -> Reference by Flat List: 查看类被引用的列表.