“自己不去努力,不去付诸行动,揪着对方的弱点不放,连自己也落得下作,这就叫做嫉妒”——《红鳉鱼》

当你的品味越小众,意味着你欣赏的事物,情感,艺术越不随波逐流,你对自己的认识越深刻,和你产生共鸣的人就越少,和人群的距离自然就越远。孤独是在所难免的,但你会欣然接受它,因为属于你的气质正在形成,你对自己的兴趣了解越多,对大众的喜好保持尊敬,错过灵魂相通的人概率越低,生活质量越高。——网易云《儿话》雁三

前言

最近编译了Android7.1.1的源码,将Android 7.1.1的源码拿来学习。

  • Android 编译Android 7.1.1源码

之前听说IDEA看源码很方便,不过由于Android 7.1.1导入到IDEA中需要编译一遍,才会生成idegen.jar文件,不然都没法执行make idegen && development/tools/idegen/idegen.sh命令生成android.imlandroid.ipr。其中android.iml是IDEA或者Android Studio的目录索引,可以includeexclude文件夹;android.ipr是导入IDEA或者Android Studio的关键文件,在IDEA或者Android Studio使用Open Project就可以将Android的源码导入到IDE中了。

试了一下,发现Android源码导入到IDEA或者Android Studio中并不是特别好用,IDEA不怎么支持C++,在C++的源码间跳转也有问题,全靠shift+shift的快捷键和一些命名规则来进行代码间的跳转,看起来不是很舒服。

今天突然间发现其实Sublime也是可以阅读源码的,仅仅需要的就是安装一些扩展的插件。

安装Sublime

安装Sublime:

  • 正常版本
wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://download.sublimetext.com/ apt/stable/" | sudo tee /etc/apt/sources.list.d/sublime-text.list
sudo apt-get update
sudo apt-get install sublime-text
  • Sublime Merge版本
wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -sudo apt-get install apt-transport-https# Stable
echo "deb https://download.sublimetext.com/ apt/stable/" | sudo tee /etc/apt/sources.list.d/sublime-text.list# Dev
echo "deb https://download.sublimetext.com/ apt/dev/" | sudo tee /etc/apt/sources.list.d/sublime-text.list# update and install
sudo apt-get update
sudo apt-get install sublime-merge

非Ubuntu请看这里:跳转

启动Sublime安装插件的功能可以从我的另一篇博文中看到。

  • Sublime Text 3的使用教程

安装完毕之后,我来推荐下用Sublime查看Android源码需要的插件和操作。

插件

看源码最核心的就是建立索引,能够进行代码间的跳转和搜索方法定位到文件。所幸的就是Sublime的CTags插件完全可以胜任,因此只需要安装这个就可以实现了。

Linux需要安装该环境:

sudo apt-get install exuberant-ctags

在Sublime中使用ctrl+shift+P输入install package搜索ctags,并安装。

安装后会在Sublime左边有文件栏,点击项目根目录,右键,会出现Ctag:Rebuild Tags的菜单。点击它,然后会生成.tags.tags_sorted_by_file的文件。【时间很长,大概1个小时多,我生成的文件的大小大概为.tags->2.6G和tags_sorted_by_file->2.6G】

然后在你代码中, 光标放在某个函数上, 点击ctrl+shift+鼠标左键 就可以跳转到函数声明的地方。

其他插件

插件 作用 使用
Reveal in Side Bar 定位打开文件到左侧目录结构 在打开的文件中右键选Reveal in Side Bar
SyncedSideBar 定位打开文件到左侧目录结构 -
DocBlockr 生成注释模板 -
Alignment 规格化代码的,常用的是将等号对齐。 -
Terminal 在Sublime中直接打开命令行。 详见下方说明。
  • 更多的插件请见
  • 更多Linux软件

Terminal

以下仅仅适用于Mac,其他详见:sublime 配置terminal终端

  • 使用command+shift+P输入install package打开Packages的安装入口,输入Terminal,安装该插件。

  • Preferences->Packages Settings->Terminal->Settings User中添加以下内容:

{"terminal": "iTerm2-v3.sh","parameters": ["--open-in-tab"] # 如果不需要新增tab可以去掉,默认新建一个Terminal
}
  • Preferences->Packages Settings->Terminal->Key Binddings User中添加以下内容:
[{"command": "open_terminal","keys": ["ctrl+shift+t"]},{"command": "open_terminal_project_folder","keys": ["ctrl+shift+alt+t"]}
]
  • 在Sublime中使用command+shift+t就可以打开Terminal了。

Other:Terminal: No place to open terminal to #91

主题

还是装个主题吧……

  • ctrl+shift+p,输入install package,查找Material Theme

打开设置面板,Preferences->Settings->User

{"color_scheme": "Packages/Material Theme/schemes/Material-Theme.tmTheme","font_size": 12,"ignored_packages":["Vintage"],"theme": "Material-Theme.sublime-theme"
}

配置

CTags

修改配置

  • 需要修改CTags的默认路径:

    • 将Preferences->Package Setting->CTags->Settings Default复制到Preferences->Package Setting->CTags->Settings User下。
    • 修改extra_tag_paths成你安装的CTags的安装路径,Linux可以使用which ctags查看。
"extra_tag_paths": [[["source.python", "linux"], "/usr/bin/ctags"]
],

修改快捷键

  • 将Preferences->Package Setting->CTags->Key Bindings-Default复制到Preferences->Key Bindings下,修改成自己喜欢的快捷键就好了。

快捷键介绍

快捷键 说明
ctrl+P 搜索类名
ctrl+shift+P 查找某个功能
ctrl+shift+鼠标左键 跳转到引用/定义的位置

学习Android源码

  • 强烈推荐gityuan大佬的博客:Android系统架构开篇
  • 阅读ANDROID源码的一些姿势
  • Android内核学习笔记 - imyfriend的专栏 - 博客频道 - CSDN.NET

附录

  • Ubuntu下使用Sublime text 3阅读android源代码

Android Sublime源码阅读姿势相关推荐

  1. android alogd,Android调试源码正确姿势打开ALOGV

    Android调试源码正确姿势打开ALOGV 前言 当我沉浸在Android C++的世界中,准备通过其相关的ALOGV日志显示出来的时候,却发现怎么在logcat里面也找不到相关的日志,也许对And ...

  2. Android Framework源码阅读计划(2)——LocationManagerService.java

    Android Framework源码阅读计划 Android Framework源码阅读计划(1)--LocationManager.java Android Framework源码阅读计划(2)- ...

  3. Android aosp源码阅读

    前言 最近因为找工作,需要频繁查阅Android源码.因此,打算在本地硬盘上下载Android源码,通过Android Studio来阅读. Android 源码构建:https://source.a ...

  4. Android Pie源码阅读 -----深入理解init(一)

    在阅读源码之前,我们应要熟悉整个Android的系统架构,在针对某一层进行深入理解,否则东看西看没有方向没有目标会导致思绪紊乱,这样读源码的效果不佳 这篇文章主要参考gityuan阅读Android ...

  5. android sensor源码,阅读android有关sensor的源码总结 - JerryMo06的专栏 - CSDN博客

    虽然这篇文章写得很差,因为赶时间,所以就匆匆忙忙地写出来自己作一个笔记.但是我想对大家应该有一点帮助. 1.有关sensor在Java应用程序的编程(以注册多个传感器为例,这程序是我临时弄出来的,可能 ...

  6. Android Linkage-RecyclerView源码阅读

    当前版本 1.9.2 项目地址 概述 自定义LinkageRecyclerView控件,该控件布局中含有两个RecyclerView控件,左边为主Rv,右边为次Rv. 次Rv顶部有一个悬挂头View, ...

  7. 大牛们是怎么阅读 Android 系统源码的?

    转载自https://www.zhihu.com/question/19759722 作者:王宇龙 链接:https://www.zhihu.com/question/19759722/answer/ ...

  8. android源码阅读笔记1-配置源码路径/阅读源码方法讨论

    开始之前 android studio中配置android源码路径 android studio中有源码的路径,你只需要打开SDK Manager下载源码然后重启android studio即可查看源 ...

  9. 12.源码阅读(app启动流程-android api 26)

    activity的启动流程之前已经通过源码了解了,那么app的启动流程是怎样的,从我们按下app的图标,到应用启动起来显示出画面,中间都经历了什么? 安卓是基于java的,所以和java有一定的相似性 ...

  10. Android系统源码在线阅读(Android4.4~Android13.0)

    原文链接 ​Android系统源码在线阅读(Android4~Android13) Android系统源码下载.编译.刷机 玩转Android10(二)刷机操作 Android系统镜像刷机方法(一) ...

最新文章

  1. moco 搭建接口mock环境入门
  2. E. Number Challenge
  3. [LeetCode] Power of Two 判断2的次方数
  4. C++学习之路 | PTA乙级—— 1047 编程团体赛 (20 分)(精简)
  5. clickhouse 获取几天前的日期
  6. java 重力脚本_Java中非常简单的脚本解析器
  7. 关于NSStringFromClass的一点见解
  8. 【读书笔记《Android游戏编程之从零开始》】13.游戏开发基础(Paint 画笔)
  9. 深究C语言4.链表和结构体
  10. 尼古拉斯.海伦.波特
  11. 可视化全链路日志追踪
  12. DDD之实体与值对象区别
  13. axure 授权码,试用期过了也可以用
  14. Thinkpad e450c 如何关闭触控板
  15. 《Microduino实战》——第1章 开 源 硬 件
  16. 软阴影(PCF、PCSS)
  17. 微信小程序踩坑记录 ------- canvas 生成带小程序码的微信朋友圈分享图
  18. 利用Word的邮件合并功能,自动发送工资表邮件(亲自实践)
  19. XX项目的现状与对策
  20. htonl, ntohl两种实现

热门文章

  1. ROW_NUMBER() OVER()函数用法;(分组,排序),partition by (转)
  2. 裴(pei)蜀定理 知识点
  3. Sharepoint对List增删改操作
  4. 茴香豆的n种写法之①——linQ Join写法
  5. 送走2007 ^_^ 迎来2008
  6. 现代语音信号处理之线性预测分析
  7. mysql用户管理设置权限_mysql 用户管理和权限设置
  8. Qt 21行实现 十六进制字符串互转QByteArray QString Hex互转QByteArray
  9. mysql 执行顺序_MySQL 基础知识掌握
  10. C++/Qt中文显示乱码与string/wstring/wchar_t转换