android底层开发实战
‘壹’ 怎样学习android底层开发
Android底层开发技术实战详解——内核、移植和驱动
Android与linux的关系
Linux Kernel的版权是GPL(General Public License),它要求对源代码的任何修改都必须开源。
Android的Kernel采用的GPL,但Android采用ASL(Apache Software License),不必开源。
Google特意修改了Kernel,将某些功能转移到上层HAL(Hardware Abstraction Layer)中。
因此,从2010年2月,即Linux2.6.33起,Android Kernel已经从Linux Kernel中删除。
三种内核
1、Goldfish,它是由Google提供的一种虚拟的ARM处理器,在Android的仿真环境中使用。
2、MSM(Mobile Station Modem),它是由美国高通(Qualcomm)公司提供的ARM处理器芯片组。
3、OMAP(Open Multimedia Application Platform),它是由美国德州仪器(Texas Instruments,简称TI)公司提供。
三类驱动程序
1、字符设备
2、块设备
3、网络设备
两种驱动类型
1、专用驱动,非Linux标准,纯软件
2、设备驱动
‘贰’ 如何入手学习android 底层开发
android 底层开发学习:
一、基于Android的CPU+GPU的异构编程开发,目前主要有以下几种平台:
1. OpenCL
在桌面系统和大规模并行计算领域被普遍使用的一种底层API。最近一段时间,主流的芯片厂商的旗舰或准旗舰芯片都开始支持OpenCL1.1或者1.2标准,包括高通,三星, 联发科,Rockchip等厂商的芯片,都可以找到OpenCL的支持。
2. CUDA
目前只有NVIDIA自己出的基于Tegra K1芯片的设备(NVIDIA Shield)支持CUDA,所以支持的面比较窄。
3. RenderScript (RS)
Google力推的异构编程,宗旨是由平台帮你选择运行的处理器,也就是说你是不知道你的程序跑在CPU还是GPU上的,这是由系统的驱动来决定的。想法是美好的,可现实是开发者并不买RS的帐, 大家觉得RS的性能不可控,灵活性太差,其文档之缺乏也被人诟病;此外,芯片厂商对于RS的优化都还普遍处于比较低阶的水平,这些都导致了RS在实际应用中很少被用到。
二、由于OpenCL的普及程度,以下部分只针对OpenCL展开。
目前支持OpenCL的设备和芯片
1. 支持OpenCL的GPU
高通几乎全系的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
LG G2, G3, G4
HTC One M7, M8, M9
小米使用高通芯片的手机和平板
魅族M1 Note
台积电P90HD
等等等等。。。。
如果不确定手头的设备是否支持OpenCL, 可以使用OpenCL-Z Android进行检测,这款软件可以显示详细的OpenCL的设备信息,同时运行micro-benchmark检测设备的计算能力。
三、需要掌握的知识:
1. 简单的GPU基本知识
2. OpenCL并行程序设计
3. Android NDK知识
4. Android JNI接口的编写
5. 简单的Android程序开发知识
四、开发的步骤(这里只是步骤的精简版本,只阐述操作,不进行解释):
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函数,即可实现相应的功能。
‘叁’ 一个Android偏底层开发人员,对发展很迷茫,我该怎么发展
个人认为做BSP一般分成两种:bring up和porting。一般做产品的基本上都没有机会做bring up工作。做bring up一般都是方案商或者芯片厂商。
以下分析下做porting让人迷茫的原因:
做porting的确会让人迷茫,因为在这个过程中我们需要改动的代码其实不多,面临整个产品的BSP porting工作时,我们需要熟悉kernel / android HAL / android framework各个子系统,但子系统太多导致我们可能没法精通所有的子系统。譬如 kernel中的usb 的枚举过程、pcie设备的枚举过程、ALSA中如何加入新的 audio codec驱动、V4L2中如何添加新的camera sensor的驱动等等。简单说,android体系庞大,BSP部分涉及3种编程语言,多个子系统,全部精通对个人而言不太现实,所以总会感觉自己什么都不会,但什么又都知道一点。
想要破除这个魔咒,“普遍撒网,重点捉鱼”的战术会凑效。譬如我做过一年硬件,做了三年的kernel driver porting,做了一年android kernel/HAL/Framework开发维护,体系跨度不算大,但东西都比较繁杂,技术含量并不高。所以我得规划是重点学习 audio/video部分,以后做多媒体部分的工作。
以上说的可能会比较乱,想到哪写到哪,希望对你有所帮助。其实我也比较迷茫,人生不就是这样么,迷茫着,然后一辈子就过去了^v^
‘肆’ 关于学习安卓底层,懂得进
我干了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系统级深入开发》pdf下载在线阅读,求百度网盘云资源
《Android系统级深入开发》(韩超//梁泉)电子书网盘下载免费在线阅读
资源链接:
链接:
书名:Android系统级深入开发
作者:韩超//梁泉
豆瓣评分:6.2
出版社:电子工业出版社
出版年份:2011-2
页数:372
内容简介:《Android系统级深入开发:移植与调试》是一本全面介绍Android系统级开发的作品,全书以移植和调试为重点。Android具有一个庞大的软件系统,任何开发者都难以掌握系统的每一个细节。因此,如何高效地理解和开发系统,就成了Android系统级别工程师面对的主要问题。《Android系统级深入开发:移植与调试》作者以实际的开发经验为基础,以软件工程思想为指导,完成了《Android系统级深入开发:移植与调试》。《Android系统级深入开发:移植与调试》介绍了从Android开源工程到一个基于实际硬件产品中的主要工作,一方面让读者清晰把握各个子系统的架构,另一方面让读者把握移植这个开发核心环节的要点。
读者对象:Linux开发人员、移动设备开发人员、Android系统框架层和底层开发人员、有意图深入学习Android的人员、手机研发的公司。
作者简介:移动系统开发资深工程师,在Android领域具有完备的知识和前沿的技术,长期从事一线开发工作。韩超是中国大陆地区较早参与Android系统开发的人员之一,也是中国大陆的Androidin(机锋网)开发社区的核心成员和重要组织者之一;也曾经引领大陆各种相关技术人员进入Android领域,并组织参与国内外的相关枝术交流。
‘陆’ Android底层开发技术实战详解 第2版 怎么样
Android底层开发技术实战详解 第2版不建议买
Android系统移植和驱动开发强些
‘柒’ 安卓底层开发能做什么
android底层?
你是指的是android平台代码开发还是希望对android的脚本,版本控制方面的开发?
如果是android平台代码的开发:
到google网站下载source code,一点点开始研究底层的代码 Java基础就可以
如果想脚本,版本控制或者android底层的C代码的开发:
那就需要你对C很精通对android的源码结构非常了解,而且JNI等等技术你都要明白
‘捌’ Android应用开发和底层开发哪个更有前途
不是很清楚你说的前途是什么?多赚钱 or 技术达人 or 两个平台的发展前景? 1、很大程度,吸金看产品不看平台,多数产品会每个平台都做,好产品才能赚钱。 2、技术上讲, iOS基于unix, android基于linux, 都是基于POSIX标准的系统,很多底层功能都是类似的。但iOS封闭,限制了很多功能,android是开放的,自由发挥程度很大。应用开发上, iOS的SDK封装得不错,用objective-c开发还是蛮方便的,android用java开发难度也不大,但设备多、系统版本多、商城多,经常一个软件得放出n多版本的安装包。应该说做android可以玩得更深。 3、哪个平台以后会更大众、更流行: 我觉得android 。 现在iphone系统的性能、用户体验都比android好很多,但随着设备发展,android的这些问题会好起来,而且android系统开源、做的厂家多,以后android手机的市场会更大,android的软件也就更赚钱了。
‘玖’ android底层开发Or Ios开发
Android和iOS还是有很大差别。
的iOS苹果的OSX,UNIX系统,OSX已有近10年的历史,从内核底层软件架构逐步发展。 iOS的ObjectivC这种古老的语言做开发。 Android是基于Linux操作系统,谷歌参与在严格的意义上说,Android是一个Linux系统,它不会有Linux XWIN,glibc中,缺乏一套完整的标准的Linux程序。大部分Android应用程序是用Java开发,运行在Dalvik虚拟机(一小部分的NDK)。谷歌在底层了很多东西。的Andr??oid视为一个新的操作系统。
? Android的Java,容易上手了很多良好的JAVA开发效率会更高
Lib的祝福吗? IOS虚拟机,性能当然更好,与谷歌的改善越来越小
的区别吗? iOS开发框架基本上和MAC上GM,相同的知识,手机的发展,可以同时开发Mac应用程序,Android有没有这样的优势
iOS设备紧密地集成在一起。的硬件和软件公司所有。但是Android不这样做,通常情况下:谷歌发布的源代码。芯片制造商需要1-3个月的时间做自己的芯片解决方案,手机制造商购买的芯片制造商进行自己的集成,定制工作,有时还需要为运营商定制的程序和代码。
‘拾’ 有android嵌入式底层开发课程么 我不希望局限在上层,希望做驱动,做系统移植的工程师。
网络搜张凌华android课程,包括了android深入浅出,android嵌入式,android高级应用,应对不不同的水平学习。