引言:最近被安排到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源码——应用开发揭秘》是一本深入解析Android应用开发背后原理和技术的书籍,其源码对应压缩包提供了丰富的实践案例和详细注解,是开发者深入理解Android系统及应用开发的重要参考资料。通过分析这些...
通过研究源码和相关文档,开发者可以掌握如何在Android平台上创建逼真的火焰动画,同时加深对Android开发框架的理解。对于希望提升自己Android游戏开发或者UI设计技能的程序员来说,这是一份非常有价值的学习资料。
描述部分与标题相同,"安卓Android源码——Android高级应用源码和思维导图.zip",它再次强调了这个压缩包的内容,主要关注的是Android平台上的高级应用开发。虽然描述简洁,但我们可以推测其中可能包括了各种不同...
"Android源码——365手机秘书源码.zip" 是一个与Android应用程序开发相关的资源,其中包含了365手机秘书这款应用的完整源代码。这个标题暗示了我们将深入研究Android操作系统下的软件开发,特别是针对移动设备的个人...
总的来说,这份"安卓Android源码——网络视频播放器源码"是学习Android视频播放技术的宝贵资料,涵盖了Android多媒体处理、网络编程、UI设计、事件处理、错误调试等多个方面的知识点,对于提升Android开发者的专业...
通过对《安卓Android源码——植物大战僵尸源码》的深入研究,开发者不仅可以学习到游戏开发的基本流程,还能掌握Android系统的高级特性,提升自己的编程技能和解决问题的能力。无论是对个人成长还是团队协作,这都是...
【标题】"安卓Android源码——EOECN网站客户端源码.zip" 提供的是一个用于分析和学习的Android应用程序源代码。这个项目可能是EOECN(假设是一个网站或在线服务的名称)的移动客户端实现,专门针对Android操作系统...
《安卓Android源码——英文电子词典源码》是一个针对Android平台开发的开源项目,它提供了构建一个功能完备的英文电子词典应用的基础框架。这个项目对于学习Android开发,特别是对移动应用中本地数据存储、用户界面...
从源码的角度来看,我们可以期待学习到关于Android应用程序开发、UI设计、数据存储、网络通信等多个方面的知识。 【描述】描述中的"安卓Android源码——花香短信大全源码.7z"进一步确认了这是一套基于Android系统的...
【标题】"安卓Android源码——太空保卫战源码.zip" 涉及的是一个基于Android平台的游戏开发项目,名为“太空保卫战”。这个压缩包很可能是包含了这个游戏的全部源代码,供开发者学习、研究或者进行二次开发。下面将...
这个游戏源码是学习和研究Android游戏开发的理想资源,它能帮助开发者深入理解Android游戏的架构设计、图形渲染、用户交互以及游戏逻辑等方面的知识。 1. **Android游戏开发基础**:Android游戏开发通常使用Java或...
本篇将针对"Android源码——仿大众点评网源码"进行详细解读,旨在帮助Android开发者更好地理解和掌握应用开发技巧。 一、UI设计与布局 1. 主界面设计:源码中的主界面模仿了大众点评网的风格,采用了Material ...
描述中的"Android源码——afinal开源框架实例源码_new_03.zip"与标题内容一致,进一步确认了这是一个关于Afinal框架的源码集合,可能是用于学习、研究或者二次开发。"zip"格式表明文件是一个压缩包,包含了多个文件...
通过分析和修改源码,开发者可以深入理解Android的工作原理,定制自己的系统或开发特殊功能。 2. **短信服务**:Android 中的短信服务是基于SMS(Short Message Service)和MMS(Multimedia Messaging Service)...
本篇将基于"Android源码——模仿酷狗播放器源码"这一主题,探讨在Android开发中实现音乐播放功能的关键知识点。 首先,我们需要理解Android的多媒体框架。Android提供了Media Framework,这是一个用于处理音频、...
综上所述,"Android源码——荒村鬼话电子书源码.7z"为我们提供了一个学习Android应用开发,特别是电子书应用开发的宝贵资源。通过深入研究和实践这个源码,开发者可以掌握Android UI设计、数据存储、网络请求、性能...
本篇将基于"Android源码——饭否客户端源码.zip"这一资源,深入探讨Android源码在实际应用中的实现方式,特别是针对饭否客户端的开发细节,帮助读者提升对Android系统和应用开发的理解。 首先,我们要明白,源码是...
源码是了解一个软件工作原理的最直接途径,对于开发者来说,能够访问并理解Android源码,有助于他们优化应用性能,解决兼容性问题,以及开发独特的功能。 【文件名解析】 DisplayAudioTheme,这个文件名可能是项目...
总的来说,分析和学习这个驴友社交系统的源码,不仅可以提升Android开发技能,还能深入了解社交应用的实现原理,为开发类似项目提供宝贵的参考。在实际操作中,我们需要结合源码、文档和调试工具,一步步解析并理解...