资深程序员多年代码实践总结:《和Android源代码一起工作》 | Android DevCamp
话题简介:本演讲将结合讲师多年的代码实践经验,主要介绍Android源代码以及相关内容,让应用开发者了解到如何利用Android源代码来提高自己对Android系统的理解,以及通过一些高级技巧来定位和分析产品中的问题,充分利用Android的各种特性,从而改进和增强自己的应用。演讲内容将分为分中级篇和高级篇。中级篇内容包含:下载和同步Android源代码,Android源代码目录结构分析,Android源代码和Eclipse的整合和浏览。高级篇内容包含:Android源代码编译,系统编译,模块编译,Android源代码Java代码调试,Android源代码Native代码调试。演讲中也将穿插一些实践案例进行分析。
讲师介绍:胡继堂,原微软亚洲工程院软件开发工程师,目前在百纳信息担任研发主管,负责海豚浏览器Android版的开发工作。2010年开始从事Android平台上的开发,熟悉Android应用开发的各种技术,并喜欢分析Android系统框架和底层机制。自工作以来的方向一直都在移动设备的系统和软件开发上,对移动互联网有很大的热情。
【幻灯片在线观看】*:
<iframe src="http://www.slideshare.net/slideshow/embed_code/13839373" width="597" height="486" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen=""> </iframe>
备注:* 因为炫姐姐对SlideShare这一平台的偏爱,尽管需要使点小技巧才能上传分享,但是炫姐姐还是坚持选择了这一功能强大却简洁好用的平台。一来对国外这些开发出优秀的工具和平台、造福于互联网和人类的团队表示致敬,二来则是对国内对于这些优秀的工具和平台的限制表示一下立场。读者如果不能正常浏览,那么需要像炫姐姐一样用点小技巧。而对于那些还是不知道炫姐姐在说什么的小白读者,可以移步到这里查询原因。
【幻灯片下载页面】: Android DevCamp幻灯片下载:和Android源代码一起工作 | 海豚浏览器 胡继堂 -来自CSDN下载频道(不需要积分,自由下载)
【幻灯片内容刚要】:
- 1. Android DevCamp Produced by CSDN
- 2. 和Android源 代码 ⼀一起工作 胡继堂 海 豚浏览器开 发主管
- 3. 问题 0 为什么Touch Event没有收到? 0 为什么界面上某些View的位置和大小和我预想的不一 样? 0 怎么知道我的UI动画有多流畅?
- 4. Agenda 0 下载与浏览0 调试与编译0 源代码利用示例0 Q&A
- 5. 下载与浏览
- 6. 准备环境 (仅同步代码) 操作系统 系统工具
- 7. 准备足够的空间0 2.3源代码需要10G空间0 4.0源代码需要20G空间
- 8. 用repo同步代码0 repo: 管理多个GIT项目的工具。0 下载repo 0 https://dl-ssl.google.com/dl/googlesource/git-repo/repo0 初始化,选择代码版本 0 新建⼀一个目录存放源代码 (假设为$srcroot) 0 repo init -‐u https://android.googlesource.com/platform/manifest -‐b <branch or tag> 0 Branch or tag = froyo, gingerbread, android-4.0.1_r1…0 参考 0 http://source.android.com/source/downloading.html
- 9. 开始同步0 进入源代码目录 repo sync [-‐jn]
- 10. 用Eclipse来浏览源代码(Java)假设Android源代码放在$srcroot 拷贝$srcroot/development/ide/eclipse/.classpath 到代码根目录 $srcroot 用Eclipse创建⼀一个空的Java工程 将工程的代码位置设为$srcroot Done
- 11. Tips 设置eclipse.ini,防止Out Of Memory -Xms128m -Xmx512m -XX:MaxPermSize=256m 常用快捷键 Ctrl+shift+T 查看类型 Ctrl+shift+R 查看资源 Ctrl+o 查看类里的成员 Ctrl+T 查看类的继承关系 http://source.android.com/source/using-eclipse.html
- 12. $srcroot/libcore/ $srcroot/dalvik/ $srcroot/framework/base $srcroot/packages/ Android代码组织
- 13. $srcroot/bionic/libc $srcroot/external/<project> Android代码组织
- 14. 调试与编译
- 15. 用Eclipse调试Java代码0 前提一:需将Android源代码加入Eclipse 0 前提二:Device或模拟器的代码能和同步的代码匹配 0 模拟器:基本上都能找到对应的代码 0 Device:需用官方的ROM,推荐Nexus One(2.1-‐2.3) Nexus S(2.3-‐4.1)和Galaxy Nexus(4.0-‐4.1)
- 16. 查看callstack上的代码 • 选中callstack上 要查看的方法 • 右键选择Edit Source Lookup • 将Android代码工 程加到Source Lookup里去
- 17. 在Android源代码里设断点就直接在Android源代码里设断点。。。
- 18. 调试Native代码? 0 等等,我们还差点东西-‐-‐symbol
- 19. Android系统编译0 目的 0 生成调试Native代码需要的symbol 0 打开系统里的一些调试选项,方便调试 0 修改系统代码,添加Log,分析系统行为 0 定制Android的一些功能
- 20. 系统准备 Ubuntu 10.04 – 12.04 • 10.5 (Leopard) or 10.6 (Snow Leopard) • MacOS 10.5 SDK 更多内容: http://source.android.com/source/initializing.html
- 21. 设备选择 0 Google的Nexus系列 0 解锁方便 [fastboot oem unlock] 0 驱动获取方便 0 源代码里直接有预设的编译目标 0 模拟器 Nexus One Nexus S Galaxy Nexus
- 22. 准备编译 1. cd $srcroot 2. source build/envsetup.sh 3. lunch
- 23. 编译目标解释 0 常见格式:full_[code name]-‐[build type] 0 常见code name 0 Nexus One -‐ passion 0 Nexus S -‐ crespo 0 Galaxy Nexus -‐ maguro 0 没有code name表示编译成emulator 0 Build type 0 user 0 userdebug 0 eng [eng=engineering 开发目的优先选择它]
- 24. 开始编译 make [-‐jn] 0 你还有更多选择 0 make systemimage 0 make bootimage 0 make recovery
- 25. System Image Android核心功能 Recovery 升级/刷机 类似PC的WinPE Boot Image 内核与驱动 Boot Loader 相当于BIOS
- 26. 调试native代码0 工具:gdb + gdbserver
- 27. 用GDB调试native代码$ #将system分区设为可写 $ adb remount $ #把gdbserver放到手机或者模拟器上 $ adb push $out/system/bin/gdbserver /system/bin/ # $ #进入源代码根目录 $ cd $srcroot $ # 获取要debug的程序名(package name) $ pid app_name xxxxx $ #开始调试 $ gdbclient : : xxxxx
- 28. 0 下载与浏览0 调试与编译0 源代码利用示例0 Q&A
- 29. 查看FPS 0 FPS: Frame per second 0 决定UI的流畅度,越高越流畅
- 30. 2.3(或以下)0 frameworks/base/core/java/android/view/ViewRoot.java0 在“private void draw(boolean fullRedrawNeeded)”找到下面的 代码(两处),做修改
- 31. 缺点0 没有log输出,不便于自动化测试统计0 通过Canvas把FPS始终显示在屏幕的左下角,不在 Canvas的无效区域以内时,FPS值无法重绘
- 32. 4.0 (或以上) 0 frameworks/base/core/java/android/view/ ViewRootImpl.java 0 将DEBUG_FPS常量设为true 0 FPS通过log输出
- 33. 0 下载与浏览0 调试与编译0 源代码利用示例0 Q&A
- 34. 谢谢 jthu@bainainfo.com
分享到:
相关推荐
资深程序员多年代码实践总结:《和Android源代码一起工作》 | Android DevCamp 话题简介:本演讲将结合讲师多年的代码实践经验,主要介绍Android源代码以及相关内容,让应用开发者了解到如何利用Android源代码来...
安卓应用实用功能的技术实现:《Android消息推送实现》 | Android DevCamp | 7月28日 北京 主题简介:作为移动应用开发的一个重要需求,微软和苹果公司分别为iOS和Windows Phone平台应用开发者提供了很好的消息推送...
安卓系统架构多年经验总结:《Android程序的编译,安装和运行》 | Android DevCamp 讲师简介:汪文俊,中国科技大学硕士,原IBM系统工程师,现为小米科技MIUI首席架构师,开源C编译器项目ucc的作者。 话题简介:...
安卓热点话题总结性剖析:《Android在多屏幕、多设备上的适配》 | Android DevCamp 话题简介:对于安卓多屏幕和多设备适配问题,早在2010年的Google IO大会,就有专门探讨过。这些年来,对于这个普遍存在的问题,...
电商应用开发实例分享:《凡客移动应用之Android + HTML5技术运用》 | Android DevCamp 主题简介:本演讲将结合凡客的Android客户端应用实例,详细介绍凡客应用的实现架构,阐述分析电商应用中的多线程的合理使用...
iOS DevCamp幻灯片分享:《Passbook实战详解》| 爱图腾 廉洁 话题简介:iOS6发布后最值得关注的一个特性即为Passbook。本演讲将结合爱图腾的实践,对iOS6中推出的Passbook应用及相关的开发细节进行讲解,详细说明...
移动产品迭代包袱重,大众点评讲述成功和失败经验:《如何创建更加灵活的App》| 大众点评 屠毅敏 | Android DevCamp 主题简介:Android和iOS原生应用的部署特性决定了其无法像Web开发那样灵活多变,同时造成了产品...
安卓数据分享技术实现::《发现和建立多设备之间的数据通信》 | Android DevCamp 话题简介:随着移动应用越来越多的依赖于服务端,开发者对数据通信协议的需求慢慢增多。 而软件版本兼容性的不同、网络环境的不...
再谈Android推送实现:《千万级并发在线推送系统架构解析》| 个信互动 叶新江 | Android DevCamp 主题简介: 移动短消息是大家所熟知的一种信息推送方式, 基于信令通道的推送在简单信息的体验方面已经被大家所...
Siri语音识别系统详解》 | iOS DevCamp 话题简介:Siri是苹果公司发布的广受关注的iOS平台应用,它不仅仅是一套语音识别系统,更重要的是其用户意图分析与智能识别机制。本讲座将深入分析Siri的技术原理,讲解其...
游戏引擎移植者现身讲解:《在iOS平台上用Cocos2D做开发》 | iOS独立开发者 秦春林 | iOS DevCamp 议题简介:Cocos2d是iOS平台上著名的游戏引擎,它开源,结构简单清晰,功能强大,是个人或者中小型团队开发的首选...
本演讲将结合讲师这些年自学iPhone开发的历程,结合自己多个应用开发实践的案例,与大家分享iOS开发的技术实践,内容将涉及:开源框架的选择,如何搭建程序架构从而写更干净的代码,如何有效使用内存和防止内存泄露...
逆向工程技术详解:《揭开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现》 | iOS DevCamp 话题简介:在AppStore中经常会出现各种令人耳目一新的App,他们是如何实现那些效果的?他们又是使用哪些公共组件来完成...
应用重构:《从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践》| 知乎 耿健桓 | iOS DevCamp 议题简介:当为知乎等以 Web 为主的复杂社交产品开发 iOS 端时,我们在开发上总会面临的...
在本次演讲中将对如何探索那些封藏在IPA文件后面的实现进行简单的分析,将会针对其中的一些工具进行具体的演示和介绍。 讲师简介:张超,资深iOS 专家,iOS创业者。2009年在深圳第一次创业,主要从事iPhone应用的...
应用重构:《从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践》| 知乎 耿健桓 | iOS DevCamp 议题简介:当为知乎等以 Web 为主的复杂社交产品开发 iOS 端时,我们在开发上总会面临的一...
利用团结和虚幻引擎:我在DevCamp 2018中的“利用Unity和虚幻引擎”演讲的幻灯片于2018年8月25日在万隆数字谷
本演讲将从应用开发的角度,讨论在Android应用程序开发中,面对众多 Android 设备可能遇到的适配问题及解决方案,对众多的思想进行归纳总结,对一些案例进行剖析,并探讨在寻找最优解决方案过程中,应该注意和规避的...
devCamp
CSDN Share 是一款出色的Android阅读工具,阅读由 CSDN社区用户分享的技术文档。 通过CSDN Share可以在线阅读或离线下载CSDN 举办的各类技术活动的精彩讲义,以及来自CSDN下载社区由用户分享的技术文档。 马上下载...