Android 如何从应用深刻到Framework (一)

image

今天,明哥想跟你们聊聊,如何从应用开发,转向Framework开发。java

系统应用开发,如今来讲,已经开始脱离系统,单独拿出来开发,系统定制接口,已提供给应用调用,用来加强功能。linux

原生的桌面,拨号,设置,已经无法作出差别化优点,所以都费尽心机,来进行应用深度开发。网络

对于以前维护系统应用模块的人来说,修修补补,真的没有什么成长。天天的工做来讲,没有很深的技术壁垒,很容易被别人攻陷。架构

好比设置,好比联系人,在小的改动,修改故障的时候,没有很是高的要求,作过应用开发的,均可以过来参合一脚,改改问题。而让一个应用开发得去修改系统接口,估计改的心累,而且犹豫不决。框架

技术壁垒,也即是本身的竞争优点。只有顽强的技术能力,并锲而不舍的学习,扩充本身的深度,广度,那么你的位置则牢不可破,不会轻易被替代。编辑器

这节,明哥从自身的角度,讲讲系统应用开发,该如何向Framework进军,进行学习,掌握更加核心的技术。工具

这里有人会说,我作应用风生水起,也游刃有余,不比大家作系统Framework的差,何须把系统应用开发的贬的一文不值。这里要说一下,文中没有这个意思,你的应用作的有声有色,赚的盆满钵满,这里确定有其因素。好比它的性能,它的界面绚丽,百变主题。或者它有智能识别,等等。这些都叫作差别化产品,有其亮点,特点,才能杀出重围。布局

而系统应用开发,我这里偏向于手机整机开发中的OEM厂商,主要作出系统,可以保证功能正常,不会花费大量人力精力去作应用深度开发,系统重构的。这里主要会以追求速度,同时知足客户的硬件要求,好比多个霍尔器件,多个温度传感器,多个皮套功能,等等,但不多去大量改动应用架构,以避免影响最终量产。性能

以上,就是特指的这个应用开发人员。随后,我来说讲,Framework须要掌握哪些知识呢?学习

①操做系统。

熟悉个人人都知道,我特喜欢把这个放在第一位,缘由很简单,它确实支撑了我随后的全部知识根基,让我可以从容不迫的,将一个个系统拆解出来。

咱们就拿安卓来说,启动过程

Android 启动过程框架

跟linux一模一样,因此很容易迁移过来,同时,差别化的init进程,完成初始任务,建立安卓世界的孵化器,既然这里要进入安卓世界,而安卓世界的基础语言是java,那么就须要一个Java虚拟机,因而孵化器就要构造一个虚拟机,用来解析执行Java编译出来的字节流。而孵化器自己是由c cpp语言实现,因而Java虚拟机就是由c cpp语言写出来的,linux操做系统也是c(还有一些汇编)写出来的,因而Java虚拟机运行的Java语言,就须要跟c cpp打交道,因而就有了JNI。

孵化器作了几件事情:

1完成Java虚拟机的构造

2完成JNI对接Java与c的桥梁

3加载公共的共享库

4等待别人给它发消息,建立新进程

在这期间,孵化器要作一件事情,即是建立system_server ,这个进程要作什么呢?咱们建立了一个能够运行Java的虚拟机,这时咱们就要提供一堆系统接口,用来协助应用开发,好比请求网络啦,好比建立界面啦,好比定位啦,获取存储卡啦,等等支持,方便用户开发功能。一个平台的好坏,每每取决于它的功能是否强大,是否有丰富的技术文档,以及开发调试工具。

因此就有了一堆线程,好比AMS,WMS,PMS,BT,WIFI,这些均可以在/proc/{ system_server_pid}/ tast找到记录。

有了这些线程,那么咱们就能够轻松的去实现不少功能啦。这时咱们就要配套的开发工具,好比AS编辑器,能够编辑,编译出来APK,安装到手机运行。

关于操做系统,须要掌握的知识点为:

1进程,线程概念

2互斥,死锁机制与原理,如何避免死锁

3内存管理机制,虚拟内存

4静态库与动态库的区别

5进程之间的内存屏障,如何通讯(IPC)

6binder的通讯优点

这里先想到这些,注意不是要完成懂全部机制,要的是总体理解便可。以下问题,请思考下,看是否可以答上来。

1 若是我写了一个应用,名字叫作,com.codegg.home 在主activity里面,加载一个布局,layout_main. xml,布局里面写入了一个TextView,那么我想调试这个TextView,要在com.codegg.home这个进程下断点,仍是在system_server进程下断点呢?若是是想调试ActivityThread. java的话?应该在哪一个进程下断点呢?

以上答案,都是com.codegg.home下断点,缘由是这两个当前的运行进程,都是在com.codegg.home里,因此要调试的话,要在com.codegg.home进程下断点。

那么咱们再来思考下,我如今要去追应用的启动过程,start Activity的流程,要在哪一个地方下断点呢?

咱们知道这个流程,最终核心的都在Activity manager server里面,而它是在system server进程里面,以一个线程的状态存在,因而咱们要调试,就要在system server上面下断点了。

若是你对这几个问题,没有疑惑,恭喜你,进程和线程,你已经有了概念了。

------------未完待续----------

相关文章
相关标签/搜索