美文网首页
Ubuntu14.04 Android Studio源码导入调试

Ubuntu14.04 Android Studio源码导入调试

作者: 凡星轨迹 | 来源:发表于2018-11-22 14:00 被阅读0次

版权声明:本文为作者原创,转载必须注明出处。
转载请注明出处: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

相关文章

网友评论

      本文标题:Ubuntu14.04 Android Studio源码导入调试

      本文链接:https://www.haomeiwen.com/subject/hhlcqqtx.html