❶ 如何学习android的源代码
请参考老罗的Android之旅http://blog.csdn.net/luoshengyang/article/details/8923485/
❷ Android Framework源码中需要学习的类有哪些
handler looper 是如何工作的
touch事件的响应
view的绘制
viewgroup的测量与布局
四大组件常用方法的实现
❸ 有研究android系统源码的博客吗
我干了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源码学习之如何创建使用JNI
publicclassHelloWorld{
();//所有native关键词修饰的都是对本地的声明
static{
System.loadLibrary("hello");//载入本地库
}
publicstaticvoidmain(String[]args){
newHelloWorld().displayHelloWorld();
}
}
上面的就是使用JNI的方式,其中so库的名字是libhello.so,放到libs下面。
jni中的方法需要在修饰符后面加上native,
例如:();,
在使用之前需要导入so库,
导入方法:
static{
System.loadLibrary("hello");//载入本地库
}
在导入的时候是可以省略so库前面的lib的,当然加上也没事。
还有就是使用的地方一定要在固定的包名类名下。
希望能够帮助你。
❺ 如何学习 android setting 源码
我是一名计算机系的大学生,我们是从学习C语言来学习编程的,看谭浩强的那本C语言就行了。不过你的数学基础的好一点,英语也不能太差了。因为如果知道了那些关键字和语句的意思后就比较好理解了。 这本书书店里应该有,如果你找不到,就干脆上网上下,多的是。 不过我认为看电子书没有看纸质的书爽。刚开始的时候你会觉得有点难,不过没关系,只要你坚持下来,什么都好说。希望你的学习顺利。
❻ android Framework学习步骤是个啥流程
一、阅读Android源码的术与道:
1、Android源码的道
Android的功夫,在Android之外。要想“理解”而非单纯的“知道”,想“学习”而非单纯的“记诵”。必备基础:信息检索能力、编程语言(C\C++、Java)、计算机系统知识、设计模式、JVM,多线程设计
2、Android源码的术
针对每一个模块本身的职责,询问更细节的实现,永远记住,先有的问题,之后才有的代码。代码实现是新鲜的,但是有了之前的铺垫和对问题的预期,它们的出现才是可理解的。
总结:先理解模块对应的要解决的“问题”是什么,再去给问题找解决方案的思路去理解源码;
理解源码的功夫不止在Android本身,也要提高Android之外的姿势水平。
二、Framework需求开发与维护注意点
1、需求开发
1) 相关功能的现有模块需要非常熟悉,否则会有非常大的风险
2 )所写代码尽量与已有类似的代码保持风格一致
3 )必要的注释,写代码的时候认为代码的意图貌似是理所当然,但是当别人看你的代码或者过一段时间你自己查阅代码的时候,很有可能由于代码量过大,在代码的海洋中未必容易理解某一段代码的意图
4 )找比自己能力强的,经验较为丰富的同事review代码。系统层毕竟是上层应用的基础,必须保证其极高的稳定性,不像app即使有一些bug可以快速的迭代和发版推送。
2、维护
1 )优秀的代码设计。Android的代码加工的顺序大致是Google源码->芯片厂商的修改->OEM厂商的修改。这些代码里积累了大量世界级优秀的代码设计方式,架构思想,这样咱们对代码的学习和认识的起步就是不低的,所以阅读大量的代码过后,我们再尝试写代码的时候,一般也不会写出低质量的代码
2 )分析定位的技巧。一个经验丰富的工程师的价值,主要会体现在遇到问题时,能够分析定位解决问题的能力和效率,而很少会听说我这有个20年经验的工程师,他的价值在于别人一个小时能写成的代码他在一分钟就写出来了。
❼ 如何学习和理解Android系统
我以前是做嵌入式系统开发的,对于平台比较熟,所以我的学习方向是从下往上进行学习,有相同工作经历者可以效仿一下吧:)个人认为其实就是三大块,分为移植-框架-应用1、android系统移植 其实这一块工作主要集成在android linux kernel 的驱动代码编写及android系统启动调试过程 。 对于android-HAL移植代码编写,其实android系统需要移植的模块较少(最精简的系统启动),只需要实现libgralloc模块,这块就是显示及显存分配的代码以及HDMI的启动高清输出。 需要熟练掌握的知识是linux驱动及android系统的启动过程会干哪些事情。以前写过相关的linux kernel及android 完整的启动流程。 只要熟悉清楚这些原理,就是解决启动过程中的问题,基本上移植android系统不会有太大的问题,只要启动了原始的android系统后面就是完善及优化系统了。 深入研究过三个平台代码(海思,ST及博通)的android代码与原始android系统代码,基本上都是这么做的。 这里推荐 --- 移植与调试 ,可以对android的外围设备及相关移植内部有一定的了解,碰到问题多问问google,可能其它朋友也碰到过,当然也可以找你一起讨论解决。2、框架层代码学习 这块代码需要熟悉几个android的几个重要概念: Binder (IPC通讯), Service 服务 ,Zygote 等等 紧接着就是研究大的模块代码,如SurfaceFlinger , AudioFilnger , Media(这块还一直没有时间看,很遗憾) 等,下一个计划就是研究media媒体播放这块,以前做过本地播放应该会减小很多的学习时间,知识的本质是相通的。 浏览器及虚拟机这块也是个大头,目前开发没怎么用到,所以也没有去怎么接触和了解,说不上好的建议 这里推荐 系统篇,写的特好,更多的内容见博客,网上很多牛人呀。3、JAVA应用程序 这一块代码的编写,最好的教材就是 android SDK ,这些api有详细的介绍及用法,与msdn媲美。
网上摘抄。。
❽ 有谁学过android源代码中SKIA部分内容的我想深入学习SKIA ,不是j简单JAVA层的调用,最好深入到每个函数
从Honeycomb[3.x]版本起,Andorid便支持GPU加速,但目前Android并没有使用Skia GPU进行Webkit渲染。Skia GPU使用OpenGL进行后台加速渲染,未来也许会代替Skia。
很多人觉得,即使Android成功使用了GPU加速Webkit渲染,在访问浏览如雅虎等一般的网站时,用户也感觉不到太大的差异。因为Webkit的资源大多数消耗在了Javascript脚本和布局定位上。
我们觉得Webkit使用GPU加速渲染的最大意义无非是HTML5 Canvas[HTML5的动态绘图效果]。Android渲染Canvas动画实在太慢,导致Web开发者根本无法在Android上用Canvas开发网页游戏[要注意的是,目前很多手机和平板的应用程序以HTML5做为界面,并使用Webkit工作,这也是很多应用在Android系统上感觉“不流畅”的重要因素。译者注]。
Android Webkit开发平台[NDK]使用Skia GPU加速测试
我们对Android系统使用Skia GPU加速的Webkit进行了测试。我们手上已经有Android Webkit NDK的WAC2.0版本,我使用了某个提交版本的Skia源码,并开启Skia GPU加速将其编译进NDK中。
我并没有使用Canvas加速,因为这还要增加修改GraphicsContextSkia API的工作,所以并未测试Canvas渲染的性能。
❾ Android源码该如何学习
直接没目的的学习Android源码效果并不好,建议设计一系列的任务,带着任务学习源码。比如:
1. 编译并且烧录到开发板中去
2. 尝试分析、统计和优化系统的启动速度
3. 在源码中添加新的APP,或者尝试删除系统出厂的APP
4. 在源码层编写一些应用,如自定义锁屏、底层Camera应用或者Audio应用
5. 尝试编写一个HAL层驱动
6. 尝试移植系统到其他开发板上去
❿ 如何正确学习android源代码
1、避免建立对象
世界上没有免费的对象。虽然GC为每个线程都建立了临时对象池,可以使创建对象的代价变得小一些,但是分配内存永远都比不分配内存的代价大。
如果你在用户界面循环中分配对象内存,就会引发周期性的垃圾回收,用户就会觉得界面像打嗝一样一顿一顿的。
2、使用本地方法
当你在处理字串的时候,不要吝惜使用String.indexOf(), String.lastIndexOf()等特殊实现的方法。这些方法都是使用C/C++实现的,比起Java循环快10到100倍。
3、选择虚类而不是接口
4、用静态方法比虚方法好
如果你不需要访问一个对象的成员变量,那么请把方法声明成static。虚方法执行的更快,因为它可以被直接调用而不需要一个虚函数表。另外你也可以通过声明体现出这个函数的调用不会改变对象的状态。
5、不用getter和setter
在很多本地语言如C++中,都会使用getter(比如:i = getCount())来避免直接访问成员变量(i = mCount)。
6、将成员变量缓存到本地
7、使用常量
8、谨慎使用foreach
9、避免使用枚举