如何入手学习android 底层开发
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何入手学习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函数,即可实现相应的功能。 参考技术A 线下学习费用高昂、地域限制,建议选择线上平台。如今线上学习无论是就业还是教学均已完善。java网页开发技术让java成为了2017年移动互联网追逐的热点。也引得很多领域外的人才纷纷转投于java网页开发领域,扣丁学堂具有完整系统的java开发培训视频教程,顶级行内大牛为学员们设定了可视化的学习线路直通车,让没有学习方向的学子一目了然,最快的进入java领域大门。 参考技术B As long sections of bare
Android开发如何高效学习系统底层原理
本文首发于微信公众号「刘望舒」
大家好,我是刘望舒,I’m back!最近分享了一些视频,都属于望舒杂谈,望舒杂谈会分享一些经验,什么都会聊。除了望舒杂谈还有另一个视频分支叫做BATcoder,什么是BATcoder呢?它是Android进阶三部曲的番外篇,会对Android进阶三部曲的内容进行拓展和升级,会以视频的形式分享给大家。至于为啥叫BATcoder,这是因为我希望大家看了我的技术视频能进入自己中意的大厂。
这篇是BATcoder的第二个视频,来聊聊应用开发如何高效学习系统叠层源码,注意是给应用开发看的,如果你是系统开发、逆向安全开发,这个视频并不适用于你。
本视频主要从三个方面来进行讲解,分别是:
1.为何要阅读系统源码?
2.如何阅读调试系统源码
3.系统源码的知识体系
视频版本
1.为何要阅读系统源码?
- 面试必备。无论是大公司还是中小公司,系统源码都是常问的部分。(便于筛选、得知潜力、解决难题)
- 更好的掌握编写代码的规范和技巧。
- 更好的理解设计模式。见《Android源码设计模式解析与实战》这本书。
- 有效的提高应用开发能力,比如:自定义View、调试疑难问题、插桩
- 更好的理解应用开发中涉及的原理,比如:热修复、插件化、Activity的启动模式…
- 转战框架层开发、多媒体开发、逆向安全开发…
2.如何阅读调试系统源码?
- 下载源码或者是在线阅读源码
在线阅读源码推荐:http://androidxref.com/
下载地址推荐:http://pan.baidu.com/s/1ngsZs
也可以在Linux环境中用repo下载AOSP源码 - 选择阅读源码的工具,推荐Source Insight
- 选择调试源码工具,推荐AS
这一内容我会在后续的BATcoder的视频中进行分享,如果你想提前学习,可以查看我的博客的AOSP基础系列:
http://liuwangshu.cn/tags/AOSP%E5%9F%BA%E7%A1%80/
3.系统源码的知识体系?
主要涉及到以下知识:
Android系统架构
Android系统源码目录
Android系统启动过程
Binder原理
应用程序进程启动过程
根Activity的工作过程
Context的关联类
理解AMS
理解WindowManager
理解WMS
理解PMS
理解输入系统
阅读源码的通用套路
系统源码知识体系
这些都是应用开发需要掌握的,而且也只是部分内容,内容很多很杂,已经很难用文章来进行表述,就算用视频来讲解,也只能每个分类大概讲讲,旨在让大家了解应用开发需要掌握哪些系统源码知识,以及每个源码知识大概要了解哪些内容,然后通过这些内容总结出高效学习系统源码的通用套路。
话不多说,上视频,欢迎大家去B站3连。
http://liuwangshu.cn/batcoder/android-framework.html
作者简介:刘望舒,腾讯云最具价值专家TVP,畅销书《Android进阶之光》《Android进阶解密》《Android进阶指北》作者,蝉联四届电子工业出版社年度优秀作者,前华为面试官,现大厂技术负责人,谷歌开发者社区特邀讲师。
也欢迎大家关注我的公号 会分享大前端、Java相关的技术。
以上是关于如何入手学习android 底层开发的主要内容,如果未能解决你的问题,请参考以下文章
Android Native 开发之 NewString 与 NewStringUtf 解析
Android Native 开发之 NewString 与 NewStringUtf 解析