Android Internals.A第一章

这一章主要是介绍安卓从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 NameAPIContents
android.app1Application Support
android.contentContent providers 
android.databaseDatabase support, mostly SQLite 
android.graphicsGraphics support 
android.openglOpenGL Graphics support 
android.hardwareCamera, input and sensor support 
android.locationLocation support 
android.mediaMedia support 
android.netNetwork support built over java.net APIs 
android.osCore OS Service and IPC support 
android.providerBuilt-in Android content-providers 
android.saxSAX XML Parsers 
android.telephonyCore Telephony support 
android.textText rendering 
android.viewUI Components (similar to iOS's UIView) 
android.webkitWebkit browser controls 
android.widgetApplication widgets 
android.speech3Speech recognition and Speech-to-Text
android.accounts4Support for account management and authentication.
android.gestureCustom gesture support 
android.accounts5User account support
android.bluetoothBluetooth support 
android.media.audiofx9Audio Effects support
android.net.sipSupport for VoIP using the Session Initiation Protocol (RFC3261) 
android.os.storageSupport for Opaque Binary Blobs (OBB) 
android.nfcSupport for Near Field Communication 
android.animation11Animation of views and objects
android.drmDigital Rights Management and copy protection 
android.renderscriptRenderScript (OpenCL like computation language) 
android.hardware.usb12USB Peripheral support
android.mtpMTP/PTP support for connected cameras, etc 
android.net.rtpSupport for the Real-Time-Protocol (RFC3501) 
android.media.effect14Image and Video Effects support
android.net.wifi.p2pSupport for Wi-Fi Direct (Peer-To-Peer) 
android.securitySupport for keychains and keystores 
android.net.nsd16Neighbor-Service-Discovery through Multicast DNS (Bonjour)
android.hardware.inputInput device listeners 
 
Package NameAPIContents
android.hardware.display17External and virtual display support
android.service.dreams"Dream" (screensaver) support 
android.graphics.pdf19PDF Rendering
android.print[.pdf]Support for external printing 
android.app.job21Job 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.sHUYLFHFDUULHU22SMS/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),驱动同步,定时输出,睡眠锁(电源管理)

 

 





 

转载于:https://www.cnblogs.com/Tesi1a/p/8735415.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值