Android学习1

来源:互联网 发布:盐城网络买花花店 编辑:程序博客网 时间:2024/06/05 14:12

Android的整体架构如下图所示:

Android整体架构 from http://www.tutorialspoint.com/android/android_architecture.html

       其中Dalvik 虚拟机是类似于JVM,保证了上层的java代码可以运行在Linux Kernal上。Android中每一个运行的应用都会对应一个自己的虚拟机实例。之所以这样做,一部分原因就是考虑到了数据的安全问题,每个应用能够很好地保护到自己的数据,类似于运行在360沙箱中。

       每当一个新的应用被使用的时候,Android会clone一个新的虚拟机实例该应用对应的进程。需要注意的是,新的虚拟机实例并非完全clone一份内存,而是会同之前的虚拟机实例共享一部分内存。这样就引出了一个问题,多个实例读写一份内存,容易产生数据的不一致。对此,Android采取的方案是写时复制,在一个虚拟机实例写共享内存区域的时候,复制一份该内存的数据给该实例。从统计学的观点看,80%的情况下都是虚拟机实例在读取共享内存区域,写内存的情形只占到20%。因此,写时复制的方案大大提升了运行效率。

      关于apk文件。apk 文件实际上是资源文件(Manifest,Resources,Assets)和​可执行文件classes.dex(可以在虚拟机上运行)共同打包之后形成的文件。在Android 5.0之前​,使用的一直是Dalvik 虚拟机,5.0及之后,采用的是Android Runtime(ART)。二者所识别的可执行文件不同,前者是.dex(Dalvik excutable),后者是.oat(ahead of time)。但是如果我们使用apkTool逆向解析apk文件的时候,会发现不仅仅在5.0之前,5.0及之后的apk文件也只有.dex,而没有.oat。这是为了保证整个Android系统的兼容性,实际上在5.0以及之后的Android操作系统中,会将.dex文件进一步转换成.oat文件,然后才能在ART上运行。

      关于Android的应用权限问题。​为了管理每个Android应用的权限,Android采用了POLP(最小特权)的策略,即每个应用一开始都只能拥有最小的权利,就是只能操作自己对应的内存区域的数据,在用户安装应用的Android会让用户自己选择是否对应用进行额外的授权,如读取短信,读取联系人等。5.0之后,Android进一步增加了运行时授权,比如使用美团接收验证码的时候,系统会提示美团试图读取短信内容,询问用户是否进行授权。

      以上就是今天的学习内容,匆忙码字,不准确的地方欢迎商讨。​

0 0