安卓底层是什么意思
发布时间:2025-05-13 07:39:00 发布人:远客网络
一、安卓底层是什么意思
1、安卓底层指的是安卓系统最基本的部分,也被称为内核(Kernel)。它负责处理硬件与软件之间的通信,管理系统资源,并且能够进行最底层的操作。安卓底层主要由Linux内核构成,通过其驱动硬件设备。同时,在上层应用程序和底层硬件之间,安卓还提供了一套中间层的API(应用程序编程接口),包括HAL(硬件抽象层)和Native C/C++库。这样,开发者可以通过这些API,将自己开发的应用和底层硬件设备联系在一起,利用硬件的功能,开发高质量的应用。
2、安卓底层的实现离不开Linux内核。安卓系统采用了Linux内核的一部分,并进行了扩展和修改,使其在Android平台上运行更加高效和稳定。Linux内核遵循开放源代码可自由扩展与修改的原则,因此安卓系统底层的开发也受益于该开源资源。同时,安卓底层还借鉴了其他开源项目的部分技术,如Carpal Tunnel(旋转屏幕)和Neon(指令集扩展)等。这些都体现了安卓底层技术的开放性和创新性。
3、作为移动操作系统,安卓底层的重要性不言而喻。安卓平台的成熟和发展离不开其底层的支持,同时随着技术的不断进步以及移动设备的各种特性不断增加,安卓底层也需不断发展与完善。更重要的是,安卓底层技术必须紧紧围绕着安卓整个生态系统,与上层的应用程序、开发者、硬件厂商和运营商等共同发展。只有这样,安卓整个生态环境才能更加完善、更加稳定、更加开放。
二、关于学习安卓底层,懂得进
我干了3年Android sdk开发,觉得到了瓶劲没法更进一步,于是花了一年多点时间,大概摸到点门径。根据前辈的经验,Android底层完全入门需要两年。
第零步,下载源码,我下的4.2的,框架层源码10G,内核2G多,ctags给框架层建的标签文件都有600M,当时让我有点震撼,用的vim+ctags+cscope来阅读,还算不错,架构挺清晰的。
第一步,我找到了一本好书《Android的设计与实现第一卷》它讲了Android框架层的启动,初始化,服务框架初始化,Binder,消息循环,PackageManagerService,ActivityManagerService。据作者说后面会出讲UI子系统的第二卷,拭目以待。其实这本书看了几十页我就发现需要第二步的知识,否则看不下去,于是跳去第二步。
第二步,学习Linux系统编程,在看《Android的设计与实现》的时候我发现,框架层的Native部分,全是Linux编程。为了掌握这部分知识,我花了4个月学习了《Linux系统编程手册》(TLPI)这本1000多页的书,我以前是搞WIndows文件系统这块的,所以C语言还比较熟,TLPI的习题很有意思,量也比较大,坚持下来还是收获很多。
第三步,花了4个月学习了一些Linux内核的知识,看了LKD,PLKA看了一半多。越学越没底,觉得不懂得越来越多,不过这个也正常,只有靠慢慢磨,估计以后要不断的磨这块。
第四步,回头看Android源码,这次一口气看完了《Android的设计与实现第一卷》,终于对框架层有了谱。同时真的数次把我看晕,前面看Linux内核源码都没这么晕,不断在Java层和Native层之间跳有点磨脑浆。其中我又觉得Java的基础没有打太牢,回去补了一个月的《Core Java》第八版。但是这书没有涉及UI子系统,于是又看了《Android内核剖析》
第五步,《Android内核剖析》(这本书实际上是讲框架层的,作者也是个搞嵌入式的,所以他在写框架层的时候文笔不太好,很罗嗦,不过还是有很多看点,到他后来写做ROM,玩开发板时估计是说到了他的本行,一下子遛起来了看得出还是挺有水平的,这本书知识有点旧毕竟讲的是2.3很多代码已经过时,但是作者很多点子很有参考价值)这本书讲UI子系统和按键/触摸消息处理系统还是很有分量的,尤其13章View绘制那里,结合源码研究很有收获。而后面他讲编译框架和ROM相关的东西都是挺宝贵的资料。
第六步,为了再补一下其他诸如电源管理模块等子系统的知识看了,《深入理解android》系列,个人认为这个系列看起来有点不太舒服,不过作为补充印证还是比较有价值。
第七步,《Android系统源代码情景分析》,罗升阳的源码分析大作,比《Android的设计与实现》分析得更细致,但缺点是涉及到模块比较少,选用的源码也比《Android的设计与实现》更旧一点。看完书后需要去研究作者的博客,东西挺多的,一定让你满意。
第八步,买块开发板自己玩。这步我还没走到,原因是我觉得我还差点准备知识。可能要再几个月,到时准备入块6410或者树莓派。
最后,由于我11年以前都是搞Windows这块的,所以对Linux知识不是很了解,不得已看了这么些书,如果是一直做Linux的人,很多步骤估计可以省掉了。直接上源码才是正道。
我本身做着移动GIS开发的工作,学框架层全是因为兴趣,但招聘平台Android框架层开发人员还是蛮有竞争力的有不少定制ROM,智能电视的工作都处于人才难求状态,毕竟有一定的门槛,现在各种ios培训,让奔着钱干开发的人纷纷涌入,而ios只能干sdk开发的缺点就暴露出来了,一堆新手老手,菜鸟大牛全挤在SDK开发这块,我觉得不太妙。反观Android这边,虽然入门菜鸟没有搞ios来钱,但是可持续性很好,从sdk-》框架》驱动》内核这样干下去。干着干着发现自己渐渐变成了Linux开发者/嵌入式开发者的人也不少,新人,老手,菜鸟大牛各居其位,层次性很好。
三、如何入手学习android 底层开发
基于Android的CPU+GPU的异构编程开发,目前主要有以下几种平台:
在桌面系统和大规模并行计算领域被普遍使用的一种底层API。最近一段时间,主流的芯片厂商的旗舰或准旗舰芯片都开始支持OpenCL1.1或者1.2标准,包括高通,三星,联发科,Rockchip等厂商的芯片,都可以找到OpenCL的支持。
目前只有NVIDIA自己出的基于Tegra K1芯片的设备(NVIDIA Shield)支持CUDA,所以支持的面比较窄。
Google力推的异构编程,宗旨是由平台帮你选择运行的处理器,也就是说你是不知道你的程序跑在CPU还是GPU上的,这是由系统的驱动来决定的。想法是美好的,可现实是开发者并不买RS的帐,大家觉得RS的性能不可控,灵活性太差,其文档之缺乏也被人诟病;此外,芯片厂商对于RS的优化都还普遍处于比较低阶的水平,这些都导致了RS在实际应用中很少被用到。
由于OpenCL的普及程度,以下部分只针对OpenCL展开。
高通几乎全系的GPU,包括但不限于以下GPU(Adreno 305, 320, 330, 405, 420, 430, 530...)
ARM Mali的6系和7系GPU,比如T628, T760
2014年以来较新的Imagination PowerVR GPU,比如G6430
2.支持OpenCL的芯片。以下是一个很粗略地列举了主要的支持OpenCL的芯片。
高通8064, 8974(骁龙800,801), 8084(骁龙805), 8994(骁龙810)等
三星 Exynos猎户座 5420, 5433(内置ARM Mali GPU)
联发科 MT6752(内置ARM Mali T760 GPU)
瑞芯微 RK3288(内置ARM Mali GPU)
3.支持OpenCL的手机和平板。这个就数不胜数了,下面只随手给出几个例子以供参考。(注意:Google Nexus系列的手机或平板,虽然硬件上支持OpenCL,但因为删掉了OpenCL的驱动程序,所以基本都不支持OpenCL;值得注意的是,据国外blog上报道,可以将相应的OpenCL驱动推送回设备以重新开启OpenCL的支持,详见maxlv.net的页面)
三星 Galaxy S4, S5, S6, Note 3, Note 4
如果不确定手头的设备是否支持OpenCL,可以使用OpenCL-Z Android进行检测,这款软件可以显示详细的OpenCL的设备信息,同时运行micro-benchmark检测设备的计算能力。下载链接:
Google Play OpenCL-Z- Google Play上的 Android应用
豌豆荚:「OpenCL-Z」安卓版免费下载
开发的步骤(篇幅所限,这里只是步骤的精简版本,只阐述操作,不进行解释):
1.编写OpenCL的C/C++程序实现GPU的核心计算代码
2.用Android NDK编译之前写的C/C++代码。这一阶段可以在纯C/C++环境下工作,可以编写main函数测试实现的功能,用NDK将代码编译为可执行的代码(BUILD_EXECUTABLE),然后用ADB将可执行程序推送到设备上运行。运行可执行程序要求设备具有root权限,如果没有root权限,可以通过Native Program Launcher(AndroidNativeLauncher· GitHub,可能需要翻墙)这一工具在设备上执行二进制代码。
3.上一阶段测试结束,功能基本正常。开始编写JNI接口。
4.开始编写Android应用程序,使用JNI封装native函数。编译C/C++代码成动态链接库。
5.在Android程序里,以静态方式加载上一步编译的动态链接库。
6.在需要的地方(比如点击按钮事件),调用相应的native函数,即可实现相应的功能。
以上步骤可能看着有些抽象,不用担心,跟着下面几个教程走一边,你就会明白每一步在做什么。