大鹏一日同风起,扶摇直上九万里。这篇文章主要讲述Android Internals.A第一章相关的知识,希望能为你提供帮助。
这一章主要是介绍安卓从Linux分支而来却又具有自己特有特性如Dalvik,framworks,JNI,bionic等。
- 1.1 主要是安卓的发展历史 每个版本的变更
文章图片
wiki也有相应的更新 目前android已更新到8.1(注意每个版本代表性的更新特性) https://zh.wikipedia.org/wiki/Android
文章图片
可以明显的看到区别在于 GlibC替换成了Bionic和HAL (主要是为了避开开源协议) 然后Android删除了Linux上特有的那些特有的X-Windows和Gnome/KDE/etc等,增加了Dalvik JNi Frameworks等
- Android的Frameworks层
Package Name | API | Contents |
android.app | 1 | Application Support |
android.content | Content providers | |
android.database | Database support, mostly SQLite | |
android.graphics | Graphics support | |
android.opengl | OpenGL Graphics support | |
android.hardware | Camera, input and sensor support | |
android.location | Location support | |
android.media | Media support | |
android.net | Network support built over java.net APIs | |
android.os | Core OS Service and IPC support | |
android.provider | Built-in Android content-providers | |
android.sax | SAX XML Parsers | |
android.telephony | Core Telephony support | |
android.text | Text rendering | |
android.view | UI Components (similar to ios\'s UIView) | |
android.webkit | Webkit browser controls | |
android.widget | Application widgets | |
android.speech | 3 | Speech recognition and Speech-to-Text |
android.accounts | 4 | Support for account management and authentication. |
android.gesture | Custom gesture support | |
android.accounts | 5 | User account support |
android.bluetooth | Bluetooth support | |
android.media.audiofx | 9 | Audio Effects support |
android.net.sip | Support for VoIP using the Session Initiation Protocol (RFC3261) | |
android.os.storage | Support for Opaque Binary Blobs (OBB) | |
android.nfc | Support for Near Field Communication | |
android.animation | 11 | Animation of views and objects |
android.drm | Digital Rights Management and copy protection | |
android.renderscript | RenderScript (OpenCL like computation language) | |
android.hardware.usb | 12 | USB Peripheral support |
android.mtp | MTP/PTP support for connected cameras, etc | |
android.net.rtp | Support for the Real-Time-Protocol (RFC3501) | |
android.media.effect | 14 | Image and Video Effects support |
android.net.wifi.p2p | Support for Wi-Fi Direct (Peer-To-Peer) | |
android.security | Support for keychains and keystores | |
android.net.nsd | 16 | Neighbor-Service-Discovery through Multicast DNS (Bonjour) |
android.hardware.input | Input device listeners |
Package Name | API | Contents |
android.hardware.display | 17 | External and virtual display support |
android.service.dreams | "Dream" (screensaver) support | |
android.graphics.pdf | 19 | PDF Rendering |
android.print[.pdf] | Support for external printing | |
android.app.job | 21 | Job scheduler |
android.bluetooth.le | Bluetooth Low-Energy (LE) support | |
android.hardware.camera2 | The new camera APIs | |
android.media.[browse/projection/session/tv] | Media browsing and TV support | |
android.service.voice | Activation by "hot words" (e.g. "OK Google") | |
android.system | uname(), poll(2) and fstat[vfs](2) | |
android.sHUYLFHFDUULHU | 22 | SMS/MMS support (CarrireMessageingService) |
文章图片
编译android源码时会使用NDK-toochains来交叉编译
文章图片
5. Bionic Android使用自己的C运行库,Bionic Bionic是开源的,但是使用aBSD许可证(这对于第三方链接更加宽容)以及Android的混合体自己的执照。 6. 增加的特性 抛开法律问题,bionic比GLibC更轻量化,对于Android来说效率更高。 bionic的系统调用存放在 bionic/libc/SYSCALLS.TXT,当然也有些系统调用是不导出的。 不支持System V IPC,有限的Pthread功能:一方面,Pthread支持内置于Bionic有限的C ++支持:虽然支持C ++(的确,大部分Android的代码都是 用C ++编写),例外情况不是。同样,标准模板库(STL)不是包括,但没有限制手动链接它(一个端口可以找到外部/ stlport项目)。 增加了功能: 系统属性:属性是Android的独特功能,它允许系统以及提供各种配置和操作参数的应用程序在一个简单的键/值存储中。这与Java属性的概念类似(实际上是通过Java的System.properties可访问)。 Android严重依赖于此机制,通过共享内存区域提供,可访问且只读到系统上的所有进程,但只能通过/ init进行设置。 硬编码了UID/GID的实现:而不是依赖于password和group.
内置DNS解析:Bionic集成了DNS名称到IP解析代码 (一般在libresolv.so中)。 硬编码的服务和协议:彻底解决libresolv.so。移除了*nux上部分对文件和协议的支持 7.移植中的挑战: 在移植中主要的问题点在Bionic,虽然在某种程度上于GUN libc兼容,但是上一些功能如notably multithreading
,则不会移植。 Android 与Linux有着相同的系统调用,静态二进制文件完全兼容。 除了bionic之外Android还包含了一些其他重要运行时的库来支持Dalvik,frameworks和系统进程。
system / core中的库通常提供内核Androidisms的包装,或实现 用户模式中的附加功能,包括:
文章图片
文章图片
看到这个zipfile的时候感觉这些库都可以来fuzz下 看能不能找出些问题
frameworks/ provide 为Android框架提供本机支持服务。
文章图片
这些都是病毒常注入的系统库 如libandroid_runtime.so
文章图片
额外的本地库
文章图片
Android有150多个额外的本地库一旦部署在设备上,外部库与很大程度上无法区分与AOSP的区别 他们都在system/lib目录下(有些也在/verndor/lib)
硬件抽象层(Hardware Abstraction Layer)
由于Android要运行在各种不同的设备上,底层的硬件规范件差距肯呢个很大,所以android定义了(HAL)统一标准来提供给硬件提供商自由的创造他们在内核模式下的驱动程序
他只需要一个二进制文件放置与system / lib / hw目录下 libhareware.so会主动加载他们(我们编译安卓系统刷机时也会需要下载对应设备的驱动放于指定的目录下)
文章图片
硬件抽象层自然是Android的一个非常重要的方面 - 都是 因为它代表了与Linux的分歧,并且因为它有助于支持 大量Android设备。
The Linux kernel
Linux内核由于其开放源代码和免费许可证性质,提供了极好的性能Android *基板。
从Linus Torvalds的初始版本开始内核继续以惊人的速度发展,每个星期或几个月增加新功能。
Android自己的内核的性能受到显着影响,并且显着的例子被压缩RAM和64位支持。它将内核版本3.10作为Lollipop的最低版本:内核从3.7开始正式支持ARM64(AArch64)。
Android内核的编译方式与Linux的配置文件略有不同通过合并Android的基础和推荐的配置模板来生成那些默认的内核分发版本(如source.android.com网站内核所示) 部)
Android将自己的特质或Androidisms引入到核心。这些内核中的一些内核由#ifdef语句为条件守护编译,其余的在drivers / staging / android目录下。
文章图片
匿名共享内存,binder,Logger,IO内存分配器,低内存清除,
文章图片
RAM控制台(内核panic就找他,存放着dmsg的log),驱动同步,定时输出,睡眠锁(电源管理)
【Android Internals.A第一章】
推荐阅读
- @RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别
- 安卓(自定义字体)
- 安卓sqlite数据库的使用
- Android视频播放和横竖屏切换
- Node.js MongoDB查询记录
- Node.js MongoDB过滤器查询
- Node.js MongoDB删除
- Node.js控制台程序实例
- Node.js MongoDB插入记录