版权声明:本文为作者原创,转载必须注明出处。
转载请注明出处:https://www.jianshu.com/p/e86d33a61bcb
最近一段时间总有一些做App的同学会问,Android源码也可以像App工程一下导入到Android Studio中方便查看吗?当然答案是肯定的。这边文章主要回答如下几个问题:
1. 如何将android源码导入到android studio中查看?
2. 代码跳转如何在源码中,而不是跳转到android sdk中?
3. 如何打断点调试代码?
注:编译系统Ubuntu14.04
如果你还没有编译源码成功,建议你先了解一下上一篇文章Ubuntu 14.04 Android源码编译介绍
这样有助于你接下来的学习!
一、环境配置
- 去Google 官网下载 android studio
- 安裝Android Studio: https://developer.android.com/studio/install.html
2.1 解压缩安装包
2.2 执行studio.sh
2.3 最重要不能忘! 安裝一些会用到的Libraries
$ sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 lib32bz2-1.0 - 打开Android Studio, 就跟Windows版本一样, 更新一下platform-tools, SDK
第一个问题,AndroidStudio中导入源码
编译idegen模块
这里如果你之前还没有编译过源码,请移步到上一篇文章Ubuntu 14.04 Android源码编译介绍。
如果你已经了解了,那么请继续往下看:
编译源码idegen模块及生成AS配置文件(*.ipr)
$ source build/envsetup.sh
$ mmm development/tools/idegen/
这行命令的意思是编译idegen这个模块项目,然后生成idegen.jar文件。
当你看到如下信息,代表已经生成了idegen.jar。
#### build completed successfully (06:35 (mm:ss)) ####
接下来就需要通过执行idegen.sh这个脚本生成*.ipr,android.iml 等工程配置文件。
sh development/tools/idegen/idegen.sh
等待片刻得到类似如下信息说明OK:
Read excludes: 42ms
Traversed tree: 132882ms
该命令行會生成三個文件在root folder: android.iml android.ipr .classpath
android.ipr
: 一般保存了工程相关的设置,比如modules和modules libraries的路径,编译器配置,入口点等
android.iml
: 用来描述modules, 它包括modules路径, 依赖关系, 顺序设置等, 一个项目可以包含多个 *.iml 文件,
所以想要少加一些module進到Android Studio可以修改此檔案。所以,在导入之前,我们可以做一些简单的配置。
注:特殊情况下,当执行上述命令时,发现会报如下错误:
Couldn't find idegen.jar. Please run make first.
通过查看idegen.sh这个脚本的代码,发现其实就是通过find命令去查找idegen.jar,然后运行main方法。这时你可以在根目录去查找一下idegen.jar有没有生成。如果已经存在,就可以按照如下代码中注释掉判断,直接去执行就ok了。
#!/bin/bash
if [ ! -d development ]; then
echo "Error: Run from the root of the tree."
exit 1
fi
#if [[ -z ${OUT_DIR_COMMON_BASE} ]]; then
idegenjar=`find out -name idegen.jar -follow | grep -v intermediates`
#else
#idegenjar=`find $OUT_DIR_COMMON_BASE/$(basename "$PWD") -name idegen.jar -follow | grep -v intermediates`
#fi
if [ "" = "$idegenjar" ]; then
echo "Couldn't find idegen.jar. Please run make first."
else
java -cp $idegenjar Main
fi
接下来我们打开android.iml这个文件,如下:
此时,我们可以通过编辑工具,比如sublime Text3 通过ctrl_H命令批量将sourceFolder替换为excludeFolder。然后再将需要查看的project改为sourceFolder。此时就可以打开Android Studio通过找到android.ipr开始导入项目即可。
其实还有另外一种办法来减少扫描构建的项目,在android stuido里打开project structure,选择Sources页面,将不需要scan的模块选中点击Excluded。最后点击apply。如下图所示:
ok ,经过差不多几十秒的scan(根据电脑配置不同而有差异)项目基本构建完成。
第二个问题代码自动跳转到指定类
如上图所示,我们在Dependencies Tab中只保留图中的两项,其他全部删除即可。最后点击Apply,保存退出。
好啦,大功告成,此时你可以试着双击shift。输入ActivityManagerService,然后尝试跟在app中跳转代码的操作一样再试一下,ok,可以完美跳转啦,是不是很简单!!!
第三个问题如何打断点调试源码
如果你想调试源码并准确对应,最好要保证如下两点:
- 用你编译好的源码生成
boot.img,system.img,vendor.img(8.0才有),userdata.img
,
通过命令adb shell reboot bootloader进入fastboot
依次使用命令
sudo fastboot flash boot boot.img
sudo fastboot flash system system.img
sudo fastboot flash vendor vendor.img
sudo fastboot flash userdata userdata.img
最后sudo fastboot reboot
重启手机。 - 保证Rom编译的版本为
userdebug
版本,这样才能保证可以调试系统各个进程。编译userdebug版本的rom是在编译阶段,通过lunch命令来选择userdebug版本的。
好啦,如果你已经保证满足了上面的条件,此时你就可以开始打断点调试了。比如我们以调试ActivityManagerService为例,看看app启动过程是如何的?这时你肯定会想到startActivityAsUser函数。
大功告成,你也去试试吧!!!