Ubuntu14.04 Android Studio源码导入调试

版权声明:本文为作者原创,转载必须注明出处。
转载请注明出处: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源码编译介绍
这样有助于你接下来的学习!

一、环境配置

  1. 去Google 官网下载 android studio
  2. 安裝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
  3. 打开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这个文件,如下:


android.iml

此时,我们可以通过编辑工具,比如sublime Text3 通过ctrl_H命令批量将sourceFolder替换为excludeFolder。然后再将需要查看的project改为sourceFolder。此时就可以打开Android Studio通过找到android.ipr开始导入项目即可。
其实还有另外一种办法来减少扫描构建的项目,在android stuido里打开project structure,选择Sources页面,将不需要scan的模块选中点击Excluded。最后点击apply。如下图所示:


modules settings

ok ,经过差不多几十秒的scan(根据电脑配置不同而有差异)项目基本构建完成。

第二个问题代码自动跳转到指定类

Dependencies

如上图所示,我们在Dependencies Tab中只保留图中的两项,其他全部删除即可。最后点击Apply,保存退出。
好啦,大功告成,此时你可以试着双击shift。输入ActivityManagerService,然后尝试跟在app中跳转代码的操作一样再试一下,ok,可以完美跳转啦,是不是很简单!!!


Screenshot from 2018-11-21 19:59:13.png

第三个问题如何打断点调试源码

如果你想调试源码并准确对应,最好要保证如下两点:

  1. 用你编译好的源码生成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重启手机。
  2. 保证Rom编译的版本为userdebug版本,这样才能保证可以调试系统各个进程。编译userdebug版本的rom是在编译阶段,通过lunch命令来选择userdebug版本的。

好啦,如果你已经保证满足了上面的条件,此时你就可以开始打断点调试了。比如我们以调试ActivityManagerService为例,看看app启动过程是如何的?这时你肯定会想到startActivityAsUser函数。


ActivityManagerService.java

大功告成,你也去试试吧!!!

参考文章:

1.https://blog.csdn.net/yanbober/article/details/48846331

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容