android告别篇-对于源码我的一些看法

标签: 源码 android hook
4522人阅读 评论(11) 收藏 举报
分类:

1.背景

        即将结束在sony移动的实习了,在最后的日子有一些伤感有一些感触,对于android这个倾注一年心血的技术有太多话要说。感谢sony移动的各位大牛们给我这个机会,让我彻彻底底的看清了android的本质。没有这次工作经历,我对android的印象可能会一直停留在sdk层。这一年陆陆续续的写关于android方面的博客,算上这一篇应该正好20篇。从最初的介绍一些小控件的使用,到现在写一些简单的源码操作,是时候写一篇总结了。。。

2.需要的资料   

      胡乱扯一下学习android源码所需要的便利条件吧。
    (1)多套android源码
       因为android系统是开源的,所以源码都是比较容易获得的。我这里要说的是我们在学习源码的时候不要光盯着最新版本或是跟我们手机适配的版本来学习。看看以前的版本的源码,我们就知道android的源码的进化过程,在这之中,更可以体会到google的严谨。
       举一个源码进化的例子。在4.2之前的版本,surfaceview的功能都是写在surfaceview这一个类中的,但是在之后的版本对于surfaceview的操作都专门写了一个新的类-surfaceControl。

    (2)linux操作系统
        如果在windows下搞android源码是及其可怕的。因为我们在生成sdk或是手机系统的时候要用到make,mm等指令。。源码中每层的makefile文件将零散的类连接在一起,而这些操作都需要在linux环境下完成。

    (3)opengrok
        不懂的可以google一下,这个软件让你查看源码更方便,上万的文件,总不能一个文件夹一个文件夹找吧。。上个图

                                 2-1 opengrok视图
           
     (4)刷机工具以及一部可刷的root手机
        最低要求是有root权限。因为操作系统级的app这是必须的,而且不root的话也不能用adb shell。

3.adb shell

          搞源码一定会用到的,这个是sdk中自带的google提供的一个操作手机内部资源的工具。具体能使先很多功能,像是抓取log,push/pull一些东西,增加一些service等。有兴趣可以看看这个【android-tips】adb 常用命令汇总(持续更新中)


4.android系统的层次以及之间的关系

    

                                                     4-1   android源码结构

            

       这张图已经看得很清楚了,在源码中有三层:linux kernel(c语言和汇编),native函数(c和c++),framework(java)。

             linux-kernel我没涉及过,不知道怎么改。。一般的操作主要是集中在native层和framework层。

           

        先上一张源码内部文件的组成图。

                                                           4-2 源码文件夹结构

             

       framework层的函数就是在图中的frameworks文件夹中。里面就是平时我们在代码中import的那些包。比如说我们常用的所有view类,都在这里

                                                             4-3 view的位置

                    

                 framework层的大多功能都是从native的函数中来的。只是在framework层做成sdk中可以直接调用的接口,native层函数和framework层函数的桥梁就是jni。


5.ndk

            很多做android的人都知道ndk,ndk的功能可以用一句话概括,就是“越过framework层直接调用native函数”。具体的安装和用法可以参见。android图文介绍NDK安装及简单jni demon的实现


6.关于hook

             hook就是源码钩子,很多人听说过但没有用过。我尝试过搞过一个hook,hook其实就是提取一些源码中没有提供接口的功能。比如说当系统渲染界面的显示的时候,google没有提供方法来得知每个字应该画到哪,我们要想知道每个字的坐标,就要去看它的渲染文件,然后在里面加上自己的方法然后把需要的信息提取出来。



写到最后:对于android系统的理解,我还停留到比较肤浅的水平。不过对于系统再熟,也只是了解一个系统,最重要的是明白它的结构的原理,知道它处理数据的算法,说白了就是设计模式和算法。写给曾经那个停留在app层拿着android入门摆弄各种控件的自己,you are still  too naive too simple!


查看评论

对中国反腐的一些看法

中国2012年来进行了五年反腐,取得了很大成就,例如周永康、薄熙来、徐才厚、孙政才、宁计划等一批高官落马, 还有不计其数的厅官和县官被依法处理,让政治风气和社会风气取得了好转 中国的反腐不仅有政府还有...
  • piaochongfale
  • piaochongfale
  • 2017-11-05 16:09:51
  • 46

我对于创业公司的看法

前几天和朋友们一起吃饭,其中一个朋友谈起了创办公司的想法,是个人力资源公司,他家境也是挺优越的,爸爸有自己的公司,但他也不希望靠他爸爸,想先靠自己,这一点我觉得值得称赞。但的确在南京市场上,各种创业公...
  • G114211312
  • G114211312
  • 2017-03-08 14:51:47
  • 426

关于拖延症的一些观点

来源: http://www.zhihu.com/question/20929126  李松蔚       从广义的层面来讲,拖延现象的成因既可以是无穷尽的,但也可以只用一句话来概括:个人选择而已—...
  • shuzjd
  • shuzjd
  • 2013-04-11 11:32:12
  • 1060

对大学的想法

对大学生涯的回顾与想法为什么会想写这么个东西呢?? 原因有两点 1. 练练markdown 2. 吐槽一下自己虚度的光阴 对大学生涯的回顾与想法 大学做了什么 对于各个方面的看法 应该...
  • qq_16468937
  • qq_16468937
  • 2016-03-30 22:56:54
  • 1095

对软件行业的一些认识

1、软件即技术,做软件就是做技术。这点永远是这个行业的入行门槛。只有掌握了基本的技术,才能在这个行业中拥有自己吃饭的本钱。也只有在此基础上,才可以考虑软件管理等其他职业发展规划。对技术而言,掌握基本的...
  • morwind_01
  • morwind_01
  • 2009-08-16 17:34:00
  • 4331

我对于互联网发展的看法和一些理解

现在互联网的几个趋势都有那些? 移动的趋势 智能化的趋势
  • charlesliu2216
  • charlesliu2216
  • 2014-07-16 00:33:35
  • 985

我对计算机的认识

这篇文章并不是我在翻阅大量书籍和资料得出来的学习领悟,而是我根据自己的认知猜测出来的东西。 也是我以后慢慢看书寻找答案的开始。 大学学了计算机基础还有微机原理等课程,每当讲到一些系统啊一些...
  • iweiwei520
  • iweiwei520
  • 2015-10-17 15:44:34
  • 375

对电工的认识

  电在现在看来是那么的简单和美丽,但它的出现给人类带来了光明等等,从而演变成了现在这个样子,而且从中引出电工这一行业的规则及从业人员。  电的分类有很多,我只是举例说下,在工厂中它有电工,它所维修的...
  • baixue669
  • baixue669
  • 2011-03-11 15:14:00
  • 328

我对大数据的看法

大数据   大数据(bigdata),或称巨量资料,指的是所涉及的资料量规模巨大到无法透过目前主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。 ...
  • ly471911182
  • ly471911182
  • 2015-02-28 17:03:59
  • 2019

我对信仰的看法

前一段时间因为某些原因接触到基督教,之后就开始读过圣经,去教堂,几乎每周都去,还有一位信了20多年的基督徒朋友解答我在信仰方面的疑惑,自己也去查过资料了解了信仰,所以想借此博客谈谈自己对信仰的看法以及...
  • itjavaer
  • itjavaer
  • 2017-03-09 15:23:10
  • 604
    统计

    主要讲述算法和业务的结合,适合初学者

    机器学习实践应用

    京东地址

    作者公众号:凡人机器学习

    凡人机器学习

    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 89万+
    积分: 1万+
    排名: 1617
    博客专栏