关闭

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

标签: 源码androidhook
4469人阅读 评论(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!


4
1
查看评论

正在学习autocad vba 请高手发表看法谢谢

我会将学习成绩的发上的,请高手发表理论或代码。
  • zhrgood1
  • zhrgood1
  • 2009-07-19 00:00
  • 88

我对无人驾驶/无人车的看法

我2006年硕士毕业以后就一直从事ADAS相关工作,直到今年2015年,我才发现ADAS在国内一下子火了,尤其是百度展出无人车之后,到网上一查,看看汽车相关的微信,才发现好像一夜间冒出了很多相关的公司,maxieye、mineye、中科慧眼、好好开车、美图没讯、知远电子等等,像我们这些老牌的汽车零部...
  • ADAS_LOVER
  • ADAS_LOVER
  • 2016-01-20 17:06
  • 2020

我对计算机专业的看法及对未来的计划

期初我对计算机专业了解就是什么做PPT,打个word等,之后就知道有编程这个东西,许许多多枯燥的英文字母。 而现在我是一名大学生,学习的是计算机专业,到现在有三个月的时间了,接下来就说说自己对计算机专业的认识。 老师曾说过:对于我们本科生来说,计算机课程开始就得从基础课程学起,这些看似没用,可是...
  • daiyao0122
  • daiyao0122
  • 2014-12-01 21:58
  • 2087

关于大学考试的一点看法

最近学了两门课,叫做计算机网络和编译原理有个老师使用的是英文课件,非常蹩脚,但他又说中文,英文不好的我看不懂课件,所以我感到非常的别扭 编译原理主要是课程太抽象,并且老师没有布置习题,所以会显得特别单薄无奈之下我就只能看书了,然而教材是种抽象的东西,并且答案一般都很难找到,所以看书这种方案舍弃了,...
  • qq_23100787
  • qq_23100787
  • 2015-10-20 01:55
  • 371

对JQuery的认识

Jquery 是一套脚本库,是JavaScript +Query的缩写,以强大的选择器为基础,选择查找DOM对象,包装成JQuery对象,然后对其进行操作(Jquey里面有提供很多函数和事件)。 1:提供了强大的功能函数:使用这些功能函数,能够帮助我们快速完成各种功能,而且会让我们的代码异...
  • Sany_chen
  • Sany_chen
  • 2010-04-19 17:09
  • 628

关于我自己对自己的一些看法

(*^__^*) 嘻嘻……  那就这样开始吧!今天为止,我对程序的看法是,只要不是太狠的条件,基本上功能都能实现,看你是不是去努力,是不是去尝试过,只要多做,就一定就会有进步,不管是多少,你就会比别人技术更加强一点,就我目前遇到的问题来说,许多问题都是别人会,但我不会的工作,别人交给我...
  • u010286871
  • u010286871
  • 2014-03-24 18:46
  • 396

侯捷:我对“程序人生”的看法

<br /> <br />这几天和侯捷在一起,转载一篇以前他对程序人生的看法,以示支持<br />------------------------------------------------------------------------------...
  • beyondhenry
  • beyondhenry
  • 2011-04-17 19:12
  • 981

我对信仰的看法

前一段时间因为某些原因接触到基督教,之后就开始读过圣经,去教堂,几乎每周都去,还有一位信了20多年的基督徒朋友解答我在信仰方面的疑惑,自己也去查过资料了解了信仰,所以想借此博客谈谈自己对信仰的看法以及发生在我自己身上的事,作为一个IT民工,码农,屌丝程序猿只有CSDN一个博客,也不想因为这一篇文章去...
  • itjavaer
  • itjavaer
  • 2017-03-09 15:23
  • 441

关于大数据的一些个人理解

前几天商学院的校友问了我几个关于大数据的问题,一看都是非常专业且典型的问题, 相信大家听这个词听得太多了也有很多疑问,于是我总结了下自己的理解,欢迎一起讨论。 1. 现在大数据很时髦,多大的数才能叫大数据? 一般网站大概几TB的数据量,这个数量级用mysql这样传统的数据库还ok, 但如果...
  • witforeveryang
  • witforeveryang
  • 2014-12-23 20:02
  • 1088

对于技术的一些看法.

自己是学计算机的,当自己对计算机科学真正有所理解的时候,不禁为国内和国外的差距感到心寒.我相信中国的其它学科和国外相比差距也差得太远.说个看过的故事.太平天国期间,清军主帅之一胡林翼视察军情,策马登山,举目四望,不禁踌躇满志:“此处俯视安庆,如在釜底,贼虽强,不足平也。”于是纵马驰至江边,忽见两艘西...
  • duduhaha
  • duduhaha
  • 2006-01-11 02:18
  • 1772
    我的微信公众号

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

    凡人机器学习

    机器学习微信交流群
    为了方便大家学习与交流,凡人云近日已开通机器学习社群! 分享“凡人机器学习”公众号名片到40人以上的大群并截图给小助手,小助手就会拉你入群 在这里你可以得到: 1.各种学术讨论 2.最新的资料分享 3.不定期的征文以及联谊活动! 小助手微信号:meiwznn
    作者新书《机器学习实践应用》

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

    机器学习实践应用

    京东地址

    个人资料
    • 访问:839756次
    • 积分:11222
    • 等级:
    • 排名:第1685名
    • 原创:235篇
    • 转载:40篇
    • 译文:0篇
    • 评论:460条
    博客专栏
    统计