Android Internals.A第一章

大鹏一日同风起,扶摇直上九万里。这篇文章主要讲述Android Internals.A第一章相关的知识,希望能为你提供帮助。
这一章主要是介绍安卓从Linux分支而来却又具有自己特有特性如Dalvik,framworks,JNI,bionic等。
 
 
 

  • 1.1    主要是安卓的发展历史 每个版本的变更
 
Android Internals.A第一章

文章图片
 
wiki也有相应的更新  目前android已更新到8.1(注意每个版本代表性的更新特性) https://zh.wikipedia.org/wiki/Android  
Android Internals.A第一章

文章图片
 
可以明显的看到区别在于  GlibC替换成了Bionic和HAL (主要是为了避开开源协议)   然后Android删除了Linux上特有的那些特有的X-Windows和Gnome/KDE/etc等,增加了Dalvik  JNi Frameworks等    
  1. Android的Frameworks层
  安卓的很大一部分成功来源于他丰富的framworks,不然它也只是一个简单的嵌入式设备。   同时Android也允许开发人员使用更高级别的java ,而不是低级别的C/C++; 主要原因是得益于android丰富的API   通过Java的包命名方式,Android框架被分为独立的命名空间,   Table 1-2: The Android Frameworks(API 1~22)
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)
    frameworks是以jar包的形式存在于设备的/system/framwork 下  最终被打包成boot.art文件。              2.Dalvik虚拟机        随着本书的印刷,Dalvik正在被Android RunTime(ART)所取代, 如本章后面所述。然而,与普遍的看法相反,这并不意味着 Dalvik正在消失:只有Just-In-Time(JIT)编译方面 取而代之,但文件格式(DEX)仍然非常活跃,关键架构也是如此 概念。因此,我们在第二卷中详细讨论了Dalvik DnG ART。               3.JNI    虽然Android程序在虚拟机中运行,但通常为了访问硬件或者其他设备需要使用JNI在程序代码中创建库。             Google 提供了NDK供我们使用。在处理图形界面和对抗反编译时很有效。同时为了适配Arm intel自己做了一个仿真器   Intel provides a closed-source ARMemulation called Houdini (extending Dalvik/ART, as discussed later in Volume II) as part of theirAndroid distribution. This emulator, (along with a few minor modifications in Dalvik), enables ARMnative libraries to work on Intel architectures.            4.二进制文件    多见于/system/bin或者/system/xbin目录下
Android Internals.A第一章

文章图片
 
  编译android源码时会使用NDK-toochains来交叉编译
Android Internals.A第一章

文章图片
 
        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的包装,或实现 用户模式中的附加功能,包括:
Android Internals.A第一章

文章图片
 
Android Internals.A第一章

文章图片
 
看到这个zipfile的时候感觉这些库都可以来fuzz下 看能不能找出些问题
 
frameworks/ provide  为Android框架提供本机支持服务。
   
Android Internals.A第一章

文章图片
这些都是病毒常注入的系统库 如libandroid_runtime.so
 
Android Internals.A第一章

文章图片
 
  额外的本地库
Android Internals.A第一章

文章图片

 
Android有150多个额外的本地库一旦部署在设备上,外部库与很大程度上无法区分与AOSP的区别  他们都在system/lib目录下(有些也在/verndor/lib)

硬件抽象层(Hardware Abstraction Layer)
由于Android要运行在各种不同的设备上,底层的硬件规范件差距肯呢个很大,所以android定义了(HAL)统一标准来提供给硬件提供商自由的创造他们在内核模式下的驱动程序
他只需要一个二进制文件放置与system / lib / hw目录下 libhareware.so会主动加载他们(我们编译安卓系统刷机时也会需要下载对应设备的驱动放于指定的目录下)

Android Internals.A第一章

文章图片


硬件抽象层自然是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目录下。

Android Internals.A第一章

文章图片

 
匿名共享内存,binder,Logger,IO内存分配器,低内存清除,

 

Android Internals.A第一章

文章图片

RAM控制台(内核panic就找他,存放着dmsg的log),驱动同步,定时输出,睡眠锁(电源管理)
 
 






【Android Internals.A第一章】 

    推荐阅读