Android 基础知识+app测试权限问题

Android 基础知识(权限篇)**

前言

​ Android是一个开源的,基于Linux的移动设备操作系统,主要用于移动设备,如智能手机和平板电脑。Android是由谷歌及其他公司带领的开放手机联盟开发的。

​ 谷歌在2007年发布了第一个测试版本的 Android 软件开发工具包(SDK),第一个商业版本的 Android 1.0,则发布于2008年9月。

​ Android 源代码是根据自由和开放源码软件许可证。谷歌发布的大部分代码遵循 Apache 许可证2.0版,Linux 内核的变化遵循 GNU 通用公共许可证版本2。

一,Android 架构

​ Android 操作系统是一个软件组件的栈,为广泛的设备和机型而创建,下图所示为 Android 平台的主要组件。

图片

Android软件栈

Linux内核

Android是基于Linux内核的(Linux内核提供了安全性、内存管理、进程管理、网络协议和驱动模型等核心系统服务),Linux内核层为各种硬件提供了驱动程序,如显示驱动、相机驱动、蓝牙驱动、电池管理等等。

  1. Binder(IPC)驱动:

    ​ 基于OpenBinder框架的一个驱动,用于提供 Android平台的进程间通信功能。,虽然linux内核本身已经提供了这些功能,但Android系统很多服务都需要用到该功能,为了某种原因其实现了自己的一套。

  2. 电源管理(Power Management):

    ​ 一个基于标准Linux电源管理系统的轻量级Android电源管理驱动,针对嵌入式设备做了很多优化,比如电池电量。

  3. USB:

    ​ 驱动 一个基于标准 Linux USB gadget驱动框架的设备驱动,Android的USB驱动是基于gaeget框 架的。

硬件抽象层(Hardware Abstraction Layer

**硬件抽象层**提供标准界面,向更高级别的 [**Java API 框架**]显示设备硬件功能。HAL 包含多个库模块,其中每个模块都为特定类型的硬件组件实现一个界面,例如相机或蓝牙模块。当框架 API 要求访问设备硬件时,Android 系统将为该硬件组件加载库模块

Native C/C++ Libraries

​ 通过一些c/c++库来为Android提供主要的特性支持,如SQLite提供了数据库的支持,WebKit库提供了浏览器内核的支持等等。

​ 同时在这一层的还有Android运行时库提供了一些核心库,能够允许开发者使用JAVA语言来编写Android应用。还包含了虚拟机Dalvik但之后改为了ART运行环境,使每一个Android应用都有自己的进程,并且都有一个自己的Dalvik虚拟机实例,相较于JAVA的虚拟机Dalvik是专门为移动设备定制的,针对内存和CPU性能都有了优化。

​ Android的系统运行库包含两部分,一个是系统库,另一个是运行时,Android系统的各个组件都在使用c/c++库,这些功能是通过Android应用框架暴露给开发人员的,系统库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带,在程序运行时中执行其运行时分为核心库和Dalvik虚拟机两部分。

系统自带的库

  1. Libc:系统c库,是从BSD继承来的标准C系统函数库,专门为基于EmbeddedLinux的设备定制。
  2. Media Framework(多媒体库):Android系统多媒体库,基于PacketVideoOpen、CORE。该库支持录放.并且可以录制许多流行的音频视频格式.还有静态映像文件,包括MPEG4、H.264、MP3、AAC、JPG、PNG等。
  3. Surface Manager:主要负责管理针对显示系统的访问,并且为多个应用程序提供2D和3D图层的无缝融合。
  4. Webkit:浏览器。一个最新的web浏览器引擎,用来支持Android浏览器和一个可嵌入的Web视图。
  5. **SGL:**一个内置的2D图形引擎。
  6. **SSL:**位于TCP/IP与各种应用层协议之间为数据通信提供支持。
  7. OpenGL ES:3D效果的支持。基于OpenGLES 1.0 APIs实现;该库可以使用硬件3D加速或者使用高度优化的3D软加速。
  8. greeType:提供位图bitmap和向量vector的字体描述与显示。
  9. SQLite:一个对于所有应用程序可用、功能强劲的轻型关系型数据库引擎

​ 除了之上的主要系统类库之外,还有Android NDK,即Android原生库。NDK为开发者提供了直接使用Android系统资源,并采用C 或C++语言编写程序的接口。因此,第三方应用程序可以不依赖于Dalvik虚拟机进行开发。NDK提供了一系列从C或C++生成原生代码所需要的工具,为开发者快速开发 C 或 C++的动态库提供方便,并能自动将生成的动态库和Java 应用程序一起打包成应用程序包文件,即 .apk文件

Android运行时:

  1. 核心库:提供了Java语言API中的大多数功能,同时也包含Android的一些核心API.如android.OS、android.net、android.media等。

  2. Dalvik虚拟机:Android程序不同于J2ME程序(是java的一种运行环境),每个Android应用都运行在自己的进程上,享有Dalvik虚拟机为它分配的专有实例,并在该实例中执行。Dalvik虚拟机是一种基于寄存器的Java虚拟机,而不是传统的基于栈的虚拟机,并进行了内存资源使用的优化以及支持多个虚拟机的特点。设计成在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是(.dex),dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。 大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 “dx” 工具转化成.dex格式由虚拟机执行。Java编译器将Java源文件转为class文件,class文件又被内置的dx(具有转化为dex格式文件,该格式文件针对最小内存使用做了优化,这种文件在Dalvik虚拟机上注册并运行)。在一些底层功能方面,例如线程和低内存管理等.Dalvik虚拟机是依赖Linux内核的。

    ​ Dalvik虚拟机是基于Apache的Java虚拟机,并被改进以适应低内存、低处理器速度的移动设备环境。Dalvik虚拟机依赖于Linux内核,实现进程隔离与线程调度管理、安全和异常管理、垃圾回收等重要功能。但Dalvik虚拟机并非传统意义上的Java虚拟机(JVM)。Dalvik虚拟机不仅不按照Java虚拟机的规范来实现而且两者不兼容。

Android Runtime:

​ Android的运行环境,我们学过java的都知道,java程序的运行需要java的核心包的支持,然后通过JVM虚拟机来运行我们的应用程序,这里Android Runtime里的Core Libraries就相当于java的JDK,是运行android应用程序所需要的核心库,Dalvik Virtual Machine就相当于JVM,这时Google专为Android开发的运行android应用程序所需的虚拟机。

​ 对于运行 Android 5.0(API 级别 21)或更高版本的设备,每个应用都在其自己的进程中运行,并且有其自己的 Android Runtime (ART) 实例。ART 编写为通过执行 DEX 文件在低内存设备上运行多个虚拟机,DEX 文件是一种专为 Android 设计的字节码格式,经过优化,使用的内存很少。编译工具链(例如 Jack)将 Java 源代码编译为

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值