今天,明哥想跟大家聊聊,如何从应用开发,转向Framework开发。

系统应用开发,现在来说,已经开始脱离系统,单独拿出来开发,系统定制接口,已提供给应用调用,用来增强功能。

原生的桌面,拨号,设置,已经没法做出差异化优势,因此都费尽心机,来进行应用深度开发。

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

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

技术壁垒,也便是自己的竞争优势。只有顽强的技术能力,并持之以恒的学习,扩充自己的深度,广度,那么你的位置则牢不可破,不会轻易被替代。

这节,明哥从自身的角度,讲讲系统应用开发,该如何向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上面下断点了。

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

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

Android 如何从应用深入到Framework (一)相关推荐

  1. android l camera no panorama,Android Camera从App层到framework层到HAL层的初始化过程

    Android camera 从上到下能够分为四个部分: Application层. framework层. HAL(hardware abstract layer)层. Kernel层 通常面向开发 ...

  2. Android 关机流程 从kernel到framework

    Android6.0关机流程 Android系统关机有如下方式:1.定时关机.2.命令行输入reboot重启.3.长按电源键出现关机对画框等,本文以长按电源键为例来分析基于Android 6.0的高通 ...

  3. Android Q notification创建发送流程-framework篇

    基于Android10源码分析notification创建到添加到systemui的流程 本篇主要分析framework部分 以下是发送一个简单notification的示例代码: public st ...

  4. Android 5.1 - 7.1 系统(framework)定制、修改、移植、总结 - 上篇

    目录 1:修改开机logo 2:Framework(SysteimUI) Android在状态栏增加耳机拔插图标 3:Android--隐藏状态栏图标

  5. 字节跳动Android三面视频解析:framework+MVP架构+HashMap原理+性能优化+Flutter+源码分析等

    前言 对于字节跳动的二面三面而言,Framework+MVP架构+HashMap原理+性能优化+Flutter+源码分析等问题都成高频问点!然而很多的朋友在面试时却答不上或者答不全!今天在这分享下这些 ...

  6. android 5.1.1开机优化(framework层)

    转自:http://blog.csdn.net/xxm282828/article/details/49095839 Android原生系统中对于开机这一块并未做深度的优化,由于领域的限制,这里仅仅对 ...

  7. android源码解析------Media多媒体framework层分析

    1.packages\providers\MediaProvider :含以下 java 文件 MediaProvider.java MediaScannerReceiver.java MediaSc ...

  8. Android wifi探究二:Wifi framework层源码分析

    上一篇博客初步认识了wpa_supplicant的作用和使用方法,并且尝试着梳理了wifi的大框架,不过,java层的框架我们忽略了,没有分析,也就是说上一篇博客简单的指出了wifi代码的大框架,那么 ...

  9. android资源加载流程6,FrameWork源码解析(6)-AssetManager加载资源过程

    之前一段时间项目比较忙所以一直没有更新,接下来准备把插件化系列的文章写完,今天我们就先跳过ContentProvider源码解析来讲资源加载相关的知识,资源加载可以说是插件化非常重要的一环,我们很有必 ...

最新文章

  1. 娃哈哈信息部李钒助阵FBS2017 共探食品饮料信息化之路
  2. 西南这座城,脸,比北上广还有用
  3. 高可靠芯片搭配视觉演算法,影像式ADAS满足车规要求
  4. 【数据挖掘】分类任务简介 ( 分类概念 | 分类和预测 | 分类过程 | 训练集 | 测试集 | 数据预处理 | 有监督学习 )
  5. 产品「工具人」如何破局?
  6. Android零基础入门第33节:Android事件处理概述
  7. python线程(二)代码部分Threading模块
  8. Java默认类型,类型转换,常量与变量笔记
  9. 限时秒杀│中科院推荐!6个引自美国NASA盒子,玩转科学
  10. leetcode 455. 分发饼干(贪心算法)
  11. 当年叱咤风云的框架Struts2,你可知Struts2内功如何修炼之体系结构
  12. Using APIs in Your Ethereum Smart Contract with Oraclize
  13. python网络爬虫学习笔记(三):urllib库的使用
  14. 32位/64位WIN2003各版本支持内存列表 彻底解决XP系统无法支持4G内存的问题
  15. 计算机组成原理期末总结
  16. html 酷狗音乐教程,仿酷狗html5手机音乐播放器主要部分代码_html5教程技巧
  17. Android 中WebView的使用详解
  18. 密码系列-Base16
  19. 【Linux】万字总结Linux 基本指令,绝对详细!!!
  20. 笔记 ~ 第二章 - 2.2 关系操作、关系完整性、关系代数、关系演算

热门文章

  1. 当你问ChatGPT一些奇奇怪怪的问题
  2. 详细说明百度竞价排名价格计算公式
  3. 麦块我的世界java_麦块我的世界盒子使用教程
  4. FBE 加密手机修改密码最后点确定时,马上拔电池掉电出现开机进入recovery
  5. 链上富人寻「隐私」记(一:Mixer 篇)
  6. android 开源图片合成,Android 图像合成技术Xformodes图片剪裁
  7. 集成电路CAD设计:芯片焊盘及版图布局设计
  8. Visio Studio Code 图标美化
  9. 短视频流量好也可以赚钱
  10. EasyDSS流媒体服务器软件支持HTTPS-启用https服务申请免费证书