Android structure

本文详细剖析了Android系统的层次结构,从Linux内核到应用层,全面展示了Android系统架构的核心组成部分及其作用。

1
Android系统架构图:


 

分析:

第一层:Linux操作系统和驱动(Linux kernel):C语言实现。

Android核心系统服务依赖于Linux2.6内核,包括:安全性、内存管理、进程管理、网络协议、驱动模型Linux内核也作为硬件和软件栈之间的抽象层。

除了标准的Linux内核外,Android还增加了内核的驱动程序:Binder(IPC)驱动、显示驱动、输入设备驱动、音频系统驱动、摄像头驱动、WiFi驱动、蓝牙驱动、电源管理。

第二层:本地框架和Java运行环境(LIBRARIES  ANDROID RUNTIME)

本地框架是有C/C++实现。包含C/C++库,被Android系统中不同组件使用,它们通过Android应用程序框架为开发者进行服务。

系统C(libc)BSD继承过来的标准的C系统函数库,专门是为基于嵌入式Linux的设备定制的库。

多媒体库:基于PackerVideoOpenCore;该库支持多种常用的音频、视频格式回放和录制,支持多种媒体格式的编和解码格式。

Suface Manager:显示子系统管理器,并且为多个应用程序提供2D3D图层的无缝融合。

LibWebCore:一个最新的Web浏览器引擎,支持Android浏览器,以及一个可嵌入式的Web视图。

SGLSkia图形库,底层的2D图形引擎。

3D libraries:基于OpenGL ES1.0 API的实现;该库可以使用硬件3D加速(如果可用),或者使用高度优化的3D软加速。

FreeType:位图(bitmap)和矢量(vector)字体显示。

Android运行环境(ANDROID RUNTIME):提供了Java编程语言核心库的大多数功能,Dalvik Java虚拟机和基础的Java类库组成

DalvikAndroid中使用的Java虚拟机,每个Android应用程序都在自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。

Dalvik被设计成一个可以同时高效运行多个虚拟机实例的虚拟系统。执行后缀名为.dexDalvik可执行文件,该格式的文件

针对小内存使用做出了优化。同时虚拟机是基于寄存器的,所有的类都是有Java编译器编译,然后通过SDK中的“dx”工具

转化为.dex格式由虚拟机执行。

Dalvik虚拟机依赖于Linux内核的一些功能,比如线程机制和底层内存管理机制。

第三层:Android应用框架(ANDROIDFRAMEWORK)


Android系统中,开发人员也可以完全访问核心应用程序所使用的API框架。

包含的框架入上图(不在陈述)

第四层:Android应用程序(APPLICATIONS)

注意:Android应用程序都是有Java语言编写的。用户开发的Android应用程序和Android的核心应用程序是同一层次的,它们都是基于Android的系统API构建的。

<think>我们正在解决用户的问题:如何在Android Studio的Project Structure中找到NDK location设置。 根据引用[1]和[2],我们知道在旧版本的Android Studio中,NDK的位置设置是在File -> Project Structure -> SDK location中。 但是,用户提到在Project Structure中没有找到NDK location,这可能是因为Android Studio版本更新导致界面变化。 引用[3]提到,从Android Studio 2之后,开始使用cmake来管理NDK,这可能导致设置位置有所变化。 引用[5]用户使用的是Android Studio 4.2版本,所以我们需要针对这个版本或更高版本进行说明。 实际上,在较新版本的Android Studio(如4.2及以上)中,NDK的配置方式可能发生了变化。根据Android Studio的更新,NDK的配置不再在Project Structure的SDK location中直接设置,而是通过其他方式。 通过查阅资料(非用户引用,但根据经验),在新版Android Studio中,如果项目需要NDK,通常会在以下位置之一进行配置: 1. 通过下载NDK并设置环境变量ANDROID_NDK_HOME(或ANDROID_HOME)指向SDK目录,然后NDK应该放在SDK目录下的ndk目录中(例如:sdk/ndk/版本号)。这样Android Studio会自动识别。 2. 在项目的local.properties文件中指定ndk.dir,例如:ndk.dir=/path/to/ndk 3. 在模块的build.gradle文件中配置NDK版本。 但是,用户的问题是在Project Structure中没有NDK location的输入框。实际上,在较新的Android Studio版本中,这个设置已经被移除了。 解决方案: 步骤1:确保已下载NDK。可以通过Android Studio的SDK Manager下载: - 打开Android Studio,点击菜单栏的File -> Settings(在Mac上是Android Studio -> Preferences) - 在设置窗口中,找到System Settings -> Android SDK - 在SDK Tools标签页中,勾选NDK (Side by side)和CMake,然后点击Apply进行安装。 步骤2:安装后,NDK会默认安装在SDK目录下的ndk目录中(例如:在macOS上可能是/Users/用户名/Library/Android/sdk/ndk/版本号)。我们可以在local.properties文件中指定ndk.dir,但通常不需要,因为Android Studio会自动使用SDK目录下的ndk。 步骤3:如果在编译项目时仍然遇到NDK相关错误,可以尝试在模块的build.gradle文件中指定NDK版本: - 打开模块的build.gradle(一般在app/build.gradle) - 在android块中添加: android { ... ndkVersion "指定的版本号" // 例如:"21.3.6528147" } 步骤4:如果项目使用CMake,还需要确保CMake的配置正确。在模块的build.gradle中配置CMake路径和版本,例如: android { ... externalNativeBuild { cmake { path "CMakeLists.txt" version "3.10.2" } } } 步骤5:如果之前配置了环境变量ANDROID_NDK_HOME,请确保它指向正确的NDK路径,或者可以尝试删除这个环境变量,因为新版本可能不再需要它,而且有时环境变量会覆盖本地设置。 引用[4]中提到的问题(No toolchains found)通常也是因为NDK版本不匹配或路径错误,按照上述步骤安装正确的NDK版本并指定版本号应该可以解决。 因此,总结来说,在新版Android Studio(如4.2及以上)中,Project Structure中不再有NDK location的设置项,而是通过SDK Manager安装NDK,并在build.gradle中指定版本来配置。 如果用户还是找不到,可以检查: - 是否已经通过SDK Manager安装了NDK? - 是否在项目的local.properties文件中设置了ndk.dir(如果之前手动设置过,可能需要删除,让Android Studio自动使用SDK目录下的NDK)? - 在项目的build.gradle中是否配置了NDK版本? 注意:在Android Studio Arctic Fox(2020.3.1)及更高版本中,配置方式可能又有变化,但用户当前是4.2版本,所以以上方法适用。 如果用户需要手动指定NDK路径(例如使用自己下载的NDK),可以在local.properties文件中添加: ndk.dir=/path/to/your/ndk 但是,不推荐手动指定,因为通过SDK Manager安装可以确保版本兼容性。 最后,如果用户遇到类似引用[2]的问题(更新后出现未声明的标识符错误),那很可能是NDK版本不兼容,需要更换NDK版本。在build.gradle中指定一个合适的版本即可。 因此,回答用户的问题:在Project Structure中没有NDK location设置是正常的,因为新版本移除了这个设置,转而通过SDK Manager安装和build.gradle配置。 </think> ### 解决Android Studio的Project Structure中缺失NDK Location的方法 在较新版本的Android Studio(如4.2及以上)中,**Project Structure中不再直接提供NDK Location的配置选项**,这是界面更新的正常变化。以下是三种替代解决方案: --- ### 方法1:通过`local.properties`文件手动配置 1. 打开项目根目录的 **`local.properties`** 文件 (若不存在则手动创建) 2. 添加NDK路径(根据系统选择格式): ```properties ## Windows示例 ndk.dir=C\\:\\\\Users\\\\你的用户名\\\\AppData\\\\Local\\\\Android\\\\Sdk\\\\ndk\\\\24.0.8215888 ## macOS/Linux示例 ndk.dir=/Users/你的用户名/Library/Android/sdk/ndk/24.0.8215888 ``` 3. 同步项目:点击Android Studio右上角 **Sync Now** --- ### 方法2:通过SDK Manager安装NDK(推荐) 1. 打开 **SDK Manager**: `File → Settings → Appearance & Behavior → System Settings → Android SDK` 2. 切换到 **SDK Tools** 标签页 3. 勾选 **NDK (Side by side)** 和 **CMake**(图1) ![SDK Tools界面](https://developer.android.com/static/studio/images/sdk-manager-ndk_2x.png)[^1][^3] 4. 点击 **Apply** 安装,NDK将自动安装到SDK目录下的`ndk`文件夹 --- ### 方法3:在`build.gradle`中指定NDK版本 1. 打开模块级 **`build.gradle`**(通常位于`app/build.gradle`) 2. 在`android`块内添加: ```gradle android { ndkVersion "24.0.8215888" // 替换为你的NDK版本号 } ``` 3. 同步项目:点击 **Sync Now** --- ### 验证NDK配置 - 检查是否生效: 在Android Studio的 **Terminal** 中运行: ```bash ./gradlew --info | grep 'NDK location' ``` 若输出类似`NDK location: /path/to/ndk`则表示配置成功[^2]。 ### 常见问题处理 - **报错`No toolchains found...`**: 需在SDK Manager中安装缺失的ABI工具链(如`arm-linux-androideabi`)[^4]。 - **环境变量冲突**: 删除系统环境变量`ANDROID_NDK_HOME`避免路径覆盖[^1]。 > 注意:**Android Studio 4.2+已弃用Project Structure中的NDK设置**,改用上述方法管理NDK路径[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值