码迷,mamicode.com
首页 > 移动开发 > 详细

Android Internals.A第一章

时间:2018-04-08 00:19:40      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:sys   keychain   默认   重要   kernel   splay   量化   sed   二进制   

这一章主要是介绍安卓从Linux分支而来却又具有自己特有特性如Dalvik,framworks,JNI,bionic等。

 

 


 

  • 1.1  主要是安卓的发展历史 每个版本的变更
 技术分享图片

 

wiki也有相应的更新  目前android已更新到8.1(注意每个版本代表性的更新特性)
 
技术分享图片
可以看到6.0和7.0已经占到了约50%.
 

 
  • 1.2   安卓和linux在体系结构上的区别(重点)
技术分享图片

 

可以明显的看到区别在于  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源码时会使用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第一章

标签:sys   keychain   默认   重要   kernel   splay   量化   sed   二进制   

原文地址:https://www.cnblogs.com/Tesi1a/p/8735415.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!