引言:最近被安排到android项目组中,从事起了android方面的开发。话说android上,也只是以前在它的应用之上去写一些小程序玩玩而已。还真没想到有一天,我也要从事这方面的开发。世事难料,但这也是一次成长的机会,从初期开始,这是一个很大的挑战。这个小团队对android全都不了解,我们开始的探索之旅。希望在接下来的时候里,我可以在这里记录下我的学习过程。
对于android的产品开发,有些不仅仅是对其上面的应用层做java上的开发,有很多东西android底层是无法实现给我们的需求。在这情况下,我们需要去适配,去添加实现等等的方式来解决自己碰到的问题。
已经开始这方面的探索三个星期左右了,是时候把自己的探索总结出来了。平时都写在公司内网上,也无法拷贝出来,现在努力在这里把自己的学习记录下来。
一、android框架概述
图1 android系统框架图
这是android的系统框架图,从这上面可以看动,android的系统结构分成了四层,由底向上分别为内核层、运行库层、应用框架层、应用层。
内核层:主要还是标准的linux,这里面android对其自身特有的一些硬件又做了相应的驱动开发,并把驱动抽象到了一个android HAL层(硬件抽象层)。致于为何这样做,有这样的一个说法是若是直接在linux内核上进行开发,需要遵守linux的开源策略,这对很多厂家来说,涉及到了商业秘密的问题。
系统运行库层:系统运行库层,主要是由C和C++语言开发,实现了系统接口调用和其他的运行模块。在这里面如libc实现的并不像平时的linux下的glibc,而是由android自己开发的一个llibc,称为bionic,只有200多k,运行速率明显比glibc实现的来得快多了。但这也就成了我工作一大困难点,因为在这里,libc是原有glibc下有所裁剪,有些功能不实现,如IPC上的接口,消息发送接口,及内存共享接口等没有接供,这让原本linux下源码中依赖这些ipc机制接口的代码移植碰到了一个问题,如何去解决这个问题,是对程序移植的一大挑战。
在运行库层中,还包含着如下:
Surface Manager:对应用层的显示子系统的管理,为应用层提供2D和3D的无疑的融合;
Media Framework:可以支持多种格式的音频和视频的录制和回放,包含对静态图像的读取;
Sqlite: 强大的轻量级的数据库引擎,这是第三方的支持,许多数据库都是以这个Sqlite来作为数据库引擎的,大小大概有500K左右;
OpenGL|ES:实现3D图像的硬件加速,及优化后的软加速;
FreeType:其于位图和矢量图形的字体支持;
WebKit: 功能强大的浏览器引擎,许多主流的浏览器也是基于该引擎的,如chrome,支持android浏览器,并支持内嵌的web视图。
SGL: 底层的2D图形引擎;
SSL:为网络通信提供安全及数据完整性的一种安全协议;
libc : 如一开始提到的,android开发的bionic,提供标准的系统C调用。
另外,在这里,还包含着core libraries和Davik虚拟机,corelibraries提供java的核心库,Davik虚拟机与Java的JVM不同在于,JVM是基于堆栈的,而Davik是基于寄存器,至于两者哪个好哪个坏,业界是一个争论的话题。
应用框架层:这里面,实现了对底层C/C++的调用封装,android为开发都提供了基本的应用接口,是java实现的,java调用底层的C/C++则是通过JNI机制来实现。在这里,好的应用框架开发,可以给上层的应用调用提供更好的帮助。
应用层:用户最直接感受到的一层,这里面实现了与用户交互的过程,不管从界面UI,或是功能上,都与用户相关系,这个好坏决定着用户对产品的认可底。否则,底层封装得再好,也没有用。
二、下一步的学习计划
在最近的三周下来,从一开始的下载android源码,到对它的编译过程、目录结构、添加C程序运行模块的学习,还有原有linux下的程序可移植性的分析。多多少少积累了一些,在接下来的日子里,我要把这些陆陆续续的总结到这上面。
下面列一下我做准备的主题:
1、android源码下载及开发环境的搭建
2、android编译过程的分析
3、如何在android源码上的运行库层,添加自己的静态库&动态库,包括可执行文件
4、如何解决在android的libc上不支持IPC的问题。(总结下之前做的一个linux环境下库的可移植性的分析过程)
5、分析Binder机制(android对IPC的实现方式是binder机制)
6、分析android中的JNI实现机制,并从源码中找一些相关的模块例子分析。
总结:
android源码的分析,碰到了许多的问题,但每次解决一个问题都是一次成长。在这个过程中,记录下问题就是一种成长。
分享到:
相关推荐
由于Android构建在开源代码的框架之上,而且提供了强大的SDK库和开放的理念,所以它为广大的没有任何移动应用程序开发经验的新手开辟了一条开发完美的移动应用程序的康庄大道。而富有经验的移动开发人员现在也可以...
Android系统开发工程师常常需要深入理解系统的运转过程,而本书所涉及的内容可能正是他们在工作和学习中最想了解的。那些对具体模块(如Audio系统和Surface系统)感兴趣的读者 也可以直接阅读相关章节的内容。 ...
Litepal——作为带我入行的第一本教学书籍《Android第一行代码》的作者郭霖老师所写出来的持久化框架,几乎算是我接触Android世界之后第一个遇到的框架,故将该框架列为一系列学习框架博客的首位。 根据Litepal的...
本次项目实现了一个简单的网络视频播放器,调用的是高度自定义的视频框架jiaozivideoplayer。通过gson解析网络视频的api,获取每个视频的url、点赞量和评论数。获取到数据源后,我们再创建适配器,给列表设置下...
在介绍Android中相关网络框架的时候,我们介绍过了Square公司制作的OkHttp和OKIo。事实上,这两个框架配合使用的时候,基本上已经可以完成大部分的网络业务需求了。不过,学习是永远没有尽头的。这篇博客中,我们将...
ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤。使用ButterKnife对性能基本没有损失,因为ButterKnife用到的注解并...
书名:《Android底层开发技术实战详解——内核、移植和驱动》(电子工业出版社.王振丽)。本书从底层原理开始讲起,结合真实的案例向读者详细介绍了android内核、移植和驱动开发的整个流程。全书分为19章,依次讲解...
(2)使用Java语言编写,采用了安卓开发的基础框架,包括活动(Activity)、意图(Intent)、广播接收器(Broadcast Receiver)等组件。通过此程序,初学者可以了解安卓开发的基本概念和基本操作,掌握如何使用Java...
(2)使用Java语言编写,采用了安卓开发的基础框架,包括活动(Activity)、意图(Intent)、广播接收器(Broadcast Receiver)等组件。通过此程序,初学者可以了解安卓开发的基本概念和基本操作,掌握如何使用Java...
(2)使用Java语言编写,采用了安卓开发的基础框架,包括活动(Activity)、意图(Intent)、广播接收器(Broadcast Receiver)等组件。通过此程序,初学者可以了解安卓开发的基本概念和基本操作,掌握如何使用Java...
(2)使用Java语言编写,采用了安卓开发的基础框架,包括活动(Activity)、意图(Intent)、广播接收器(Broadcast Receiver)等组件。通过此程序,初学者可以了解安卓开发的基本概念和基本操作,掌握如何使用Java...
书名:《Android底层开发技术实战详解——内核、移植和驱动》(电子工业出版社.王振丽)。本书从底层原理开始讲起,结合真实的案例向读者详细介绍了android内核、移植和驱动开发的整个流程。全书分为19章,依次讲解...
书名:《Android底层开发技术实战详解——内核、移植和驱动》(电子工业出版社.王振丽)。本书从底层原理开始讲起,结合真实的案例向读者详细介绍了android内核、移植和驱动开发的整个流程。全书分为19章,依次讲解...
(2)使用Java语言编写,采用了安卓开发的基础框架,包括活动(Activity)、意图(Intent)、广播接收器(Broadcast Receiver)等组件。通过此程序,初学者可以了解安卓开发的基本概念和基本操作,掌握如何使用Java...
源码地址 1.简介 在上一篇博客中,我们介绍了OkHttp的快速集成和使用,其中提到了有关于使用post请求提交字符串/文件/表单等需要使用到OkHttp中的底层传输框架OkIo。鉴于框架的功能划分,这篇博客专门讲解OkIo的常用...
(2)使用Java语言编写,采用了安卓开发的基础框架,包括活动(Activity)、意图(Intent)、广播接收器(Broadcast Receiver)等组件。通过此程序,初学者可以了解安卓开发的基本概念和基本操作,掌握如何使用Java...
(2)使用Java语言编写,采用了安卓开发的基础框架,包括活动(Activity)、意图(Intent)、广播接收器(Broadcast Receiver)等组件。通过此程序,初学者可以了解安卓开发的基本概念和基本操作,掌握如何使用Java...
(2)使用Java语言编写,采用了安卓开发的基础框架,包括活动(Activity)、意图(Intent)、广播接收器(Broadcast Receiver)等组件。通过此程序,初学者可以了解安卓开发的基本概念和基本操作,掌握如何使用Java...
(2)使用Java语言编写,采用了安卓开发的基础框架,包括活动(Activity)、意图(Intent)、广播接收器(Broadcast Receiver)等组件。通过此程序,初学者可以了解安卓开发的基本概念和基本操作,掌握如何使用Java...