【Android 应用开发】对Android体系结构的理解--后续会补充
1.最底层_硬件
任何Android设备最底层的硬件包括 显示屏, wifi ,存储设备 等. Android最底层的硬件会根据需要进行裁剪,选择自己需要的硬件.
2.Linux内核层
该层主要对硬件进行管理 , 包括显示驱动(Display Driver) , 相机驱动(Camera Driver) ,蓝牙驱动(Bluetooth Driver),共享内存驱动(Shared Memory Driver),USB驱动(USB Driver),键盘驱动(Keypad Driver),Wifi驱动(WiFi Driver),声音驱动(Audio Drivers),电源驱动(Power Management).
有的驱动是与真实的硬件对应的,用来驱动底层硬件的,而有的驱动是软件的抽象 , 是一种虚拟驱动.上面的共享内存驱动和Binder驱动就是软件驱动.LogCat也是一种软件驱动.
Android基于Linux2.6提供核心系统服务 , 例如 : 安全 , 内存管理 , 进程管理 , 网络堆栈 , 驱动模型 . Linux Kernel也作为硬件和软件之间的抽象层 , 该层隐藏具体硬件细节 , 为上层提供统一的服务 .
使用binder作为进程通讯机制 , 取代传统进程间通讯机制 ; 这种机制在Native层实现了一套 , 在Java层也实现了一套 .
3.硬件抽象层
该层是由不同的厂商实现的,该层实现了对底层驱动的调用 .
用户空间的C/C++库 ;
遵循Apache协议 ;
定义Android需要的linux driver实现的接口 ;
将Android彻底和硬件抽象出来 ;
4.Native库Libraries层
这个库是通过C/C++实现的,通过调用硬件抽象层的方法完成的.
Android系统的各个组件使用这些功能通过Android应用程序框架(Application framework)暴露给开发者的 ;
SurfaceManager :
Media Framework :
SQLite :
WebKit :
Libc :
OpenGL|ES : 在该层提供了一套C/C++函数库 , 但是在Framework层提供了一层Java的函数库 ;
Audio Manager :
FreeType :
SSL :
5.Android运行时环境Android Runtime
Core Libraries : 核心类库,提供大部分Java编程功能 , 与JavaSE不同,对JavaSE类库进行了精简.可以通过SDK中的doc目录下的帮助文档进行查询 .
Dalvik Virtual Machine : Android\虚拟机 , 基于寄存器的 . 大多数虚拟机所采用的基于栈的实现 . 该虚拟机依赖于Linux内核提供的基本功能 , 如线程和底层底层内存管理 .
Android所有的应用程序都是通过Java开发的,在Dalvik虚拟机上运行的.
6.Application Framework
提供了一组API,四大组件就是在该层提供的 , 这层框架还提供了一组服务,在手机开机的过程中会驻留在某个程序中 . 比如侦听电话,短信等开启对应的广播接受者的服务 . 在linux启动的时候,将该服务加载进来,每个服务都会占用一个Dalvik虚拟机.
通过提供开放的开发平台 , Android使用开发者能够编制极其丰富和新颖的应用程序 , 开发者可以自由的利用设备的硬件优势 , 访问位置信息 , 运行后台服务 , 设置闹钟 , 向状态栏添加通知等 ;
开发者可以完全使用核心应用程序所使用的框架APIs , 应用程序的体系结构旨在简化组件的重用 , 任何应用程序都能发布他的功能 , 并且任何其他的应用程序都可以使用这些功能 . 这个机制允许用户替换组件 , 所有的应用程序其实是一组服务和系统 .
点击adb shell 可以对连接的手机进行查看 , ps 命令可以查看所有的进程 , service list 命令可以查看所有已经启动的服务 , 系统的服务都可以通过getSystemService得到 .
在该层封装了进程间通信的机制 , 就是Binder机制 ;
7.应用层Applications
使用Java开发的应用程序.
对用户 : 良好的用户体验 , 强大的用户亲和力 .
对开发者 : 快速而灵活的开发平台 , 让开发者的灵感能快速转化为产品 .
8.Android开发种类
Android开发分为三种类型 :
(1)移植开发手机系统
将一个应用从不同的平台上进行移植 , 开发 .
例如 : 这个平台的底层可能不支持 , 这个移植可以是从底层驱动到上层应用的整体移植 , 也可以是不同SDK版本上的应用移植 .
(2)应用程序开发
(3)Android系统开发
例如开发浏览器 , 这个是基于WebKit的 , 需要该组件的C/C++代码看懂 , 将这个组件修改的能适用于自己开发 ;
开发手机电视 , 需要将数据进行视频解码 , 在Native完成一套视频解码库 , 在Framework层暴露API , 供开发者使用 ;
9.三种开发形式
(1)SDK开发 : 在windows , linux , mac 下开发 ;
Java语言知识 ;
应用程序架构 ;
(2)NDK开发 : 在windows , linux 下 开发
Java语言知识
应用程序架构 ;
JNI技术 ;
Linux下的C编程
(3)源码开发 : 完全源代码 , Linux中开发 ;
Android源码开发知识结构 :
Linux操作系统知识
Linux内核知识(C语言)
linux驱动知识 (C语言)
Android底层库(C语言 , C++)
Dalvik虚拟机(C++ , Java)
Android GUI系统(C++ , Java)
音频 , 视频 多媒体 (C语言 , C++ , Java)
电话部分(C , C ++ , Java)
传感器部分 (C , C++ , Java)
【Android 应用开发】对Android体系结构的理解--后续会补充的更多相关文章
- 对Android体系结构的理解--后续会补充
1.最底层_硬件 任何Android设备最底层的硬件包括 显示屏, wifi ,存储设备 等. Android最底层的硬件会根据需要进行裁剪,选择自己需要的硬件. 2.Linux内核层 该层主要对硬件 ...
- [Android Pro] 开发一流Android SDK
cp from : https://blog.csdn.net/dd864140130/article/details/53558011 本篇文章已授权微信公众号 guolin_blog (郭霖)独家 ...
- 【Android应用开发】Android 蓝牙低功耗 (BLE) ( 第一篇 . 概述 . 蓝牙低功耗文档 翻译)
转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/50515359 参考 : -- 官方文档 : https://develope ...
- 【Android 应用开发】Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组
. 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19913755 . 一. Android资源文件简介 1 ...
- 【Android 应用开发】Android之Bluetooth编程
Android Bluetopth 编程大牛文章 http://my.oschina.net/u/994235/blog?catalog=313604 ViewGroup 相关资料 : http:// ...
- 【Android 应用开发】Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载
19af543b068bdb7f27787c2bc69aba7f Additional Download (32-, 64-bit) Package r10 STL debug info androi ...
- 【Android 应用开发】Android 开发 之 JNI入门 - NDK从入门到精通
NDK项目源码地址 : -- 第一个JNI示例程序下载 : GitHub - https://github.com/han1202012/NDKHelloworld.git -- Java传递参数给C ...
- 简单的调用OpenCV库的Android NDK开发 工具Android Studio
前言 本博客写于2017/08/11, 博主非专业搞安卓开发, 只是工作的需要倒腾了下Android NDK相关的开发, 博文中有什么不正确.不严格的地方欢迎指正哈 本文后续也许还会有删改, 就 ...
- 【Android 应用开发】 Android 各种版本简介 ( Support 支持库版本 | Android Studio 版本 | Gradle 版本 | jcenter 库版本 )
初学者遇到 Android Studio, 导入工程后, 会出现各种奇葩错误, 如果管理好各个插件, gradle, SDK, SDK Tools, 各种官方依赖库 的版本, 会将错误大大的减少; 这 ...
随机推荐
- Hibernate之配置文件
可持久化对象有以下三种状态: 临时状态(Transient):对象在保存进数据库之前为临时状态,这时数据库中没有该对象的信息,如果没有持久化,程序退出后临时状态的对象信息将会丢失.随时可能被垃圾回收器 ...
- Spark技术内幕: Shuffle详解(一)
通过上面一系列文章,我们知道在集群启动时,在Standalone模式下,Worker会向Master注册,使得Master可以感知进而管理整个集群:Master通过借助ZK,可以简单的实现HA:而应用 ...
- FFmpeg源代码简单分析:libavdevice的avdevice_register_all()
===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...
- 转义字符\(在hive+shell以及java中注意事项):正则表达式的转义字符为双斜线,split函数解析也是正则
转义字符 将后边字符转义,使特殊功能字符作为普通字符处理,或者普通字符转化为特殊功能字符. 各个语言中都用应用,如java.python.sql.hive.shell等等. 如sql中 "\ ...
- Android异常:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original
Android异常:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that cr ...
- SDL2源代码分析8:视频显示总结
===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDL_Init()) SDL ...
- 1060. Are They Equal (25)
题目如下: If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are consi ...
- java linux ImageIO 验证码在一段时间以后出不来 问题总结
最近在测试上布署的项目经常性的出现验证码过了一段时间以后出不来的情况,耐心找了一下,最后在上级的指导下发现了报错,其实说真的,我自己也找到了这个报错,只是没有当一回事.因为这个验证码的东西不是我写的, ...
- JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine
JAVA之旅(二十五)--文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine 我们继续IO上个篇 ...
- Android LK Bootlaoder启动概览
LK - Little kernel 1. 起源地: bootable\bootloader\lk\arch\arm (1)rule.mk $(BUILDDIR)/trustzone-test-sys ...