SlideShare a Scribd company logo
1 of 35
Download to read offline
Android	
  DevCamp	
  
Produced	
  by	
  CSDN	
  
	
  
Website:	
  	
  
http://devcamp.csdn.net/	
  
Weibo:	
  	
  
http://weibo.com/cmdnclub/	
  
	
  
	
  
和Android源
          代码
  ⼀一起工作
 胡继堂 海
       豚浏览器开
             发主管
问题	
  
 0  为什么Touch	
  Event没有收到?	
  
 0  为什么界面上某些View的位置和大小和我预想的不一
    样?	
  
 0  怎么知道我的UI动画有多流畅?	
  
Agenda	
  
0  下载与浏览

0  调试与编译

0  源代码利用示例

0  Q&A
下载与浏览	
  
准备环境 (仅同步代码)


  操作系统



  系统工具
准备足够的空间

0  2.3源代码需要10G空间



0  4.0源代码需要20G空间
用repo同步代码
0  repo: 管理多个GIT项目的工具。

0  下载repo
   0  https://dl-ssl.google.com/dl/googlesource/git-repo/repo

0  初始化,选择代码版本
   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
开始同步
0  进入源代码目录	
  



          repo	
  sync	
  [-­‐jn]	
  
用Eclipse来浏览源代码(Java)
假设Android源代码放在$srcroot

 拷贝$srcroot/development/ide/eclipse/.classpath
            到代码根目录 $srcroot


            用Eclipse创建⼀一个空的Java工程



                  将工程的代码位置设为$srcroot



                                   Done
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
$srcroot/libcore/	
  
              $srcroot/dalvik/	
  
              $srcroot/framework/base	
  
              $srcroot/packages/	
  

Android代码组织
$srcroot/bionic/libc	
  
              $srcroot/external/<project>	
  

Android代码组织
调试与编译	
  
用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)	
  
查看callstack上的代码

   •  选中callstack上
      要查看的方法




   •  右键选择Edit
      Source Lookup



   •  将Android代码工
      程加到Source
      Lookup里去
在Android源代码里设断点



就直接在Android源代码里设断点。。。
调试Native代码?	
  
0  等等,我们还差点东西-­‐-­‐symbol	
  
Android系统编译

0  目的	
  
   0  生成调试Native代码需要的symbol	
  
   0  打开系统里的一些调试选项,方便调试	
  
   0  修改系统代码,添加Log,分析系统行为	
  
   0  定制Android的一些功能	
  
系统准备	
  
            Ubuntu	
  10.04	
  –	
  12.04	
  



            •  10.5	
  (Leopard)	
  or	
  10.6	
  (Snow	
  Leopard)	
  
            •  MacOS	
  10.5	
  SDK	
  




更多内容:	
  
	
  
http://source.android.com/source/initializing.html	
  
设备选择	
  
0  Google的Nexus系列	
  
   0  解锁方便 [fastboot	
  oem	
  unlock]	
  
   0  驱动获取方便	
  
   0  源代码里直接有预设的编译目标	
  
0  模拟器	
  




     Nexus	
  One	
           Nexus	
  S	
     Galaxy	
  Nexus	
  
准备编译	
  
1.  cd	
  $srcroot	
  
2.  source	
  build/envsetup.sh	
  
3.  lunch	
  
编译目标解释	
  
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	
  开发目的优先选择它]	
  
开始编译	
  
                          make	
  [-­‐jn]	
  
                             	
  
0  你还有更多选择	
  
   0  make	
  systemimage	
  
   0  make	
  bootimage	
  
   0  make	
  recovery	
  
System	
  Image	
  
Android核心功能	
  
                         Recovery	
  
                        升级/刷机	
  
                       类似PC的WinPE	
  



   Boot	
  Image	
  
   内核与驱动	
  

  Boot	
  Loader	
  
  相当于BIOS	
  
调试native代码

0  工具:gdb	
  +	
  gdbserver	
  
用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	
  
0  下载与浏览

0  调试与编译

0  源代码利用示例

0  Q&A
查看FPS
 0  FPS:	
  Frame	
  per	
  second	
  
 0  决定UI的流畅度,越高越流畅	
  
2.3(或以下)
0  frameworks/base/core/java/android/view/ViewRoot.java
0  在“private void draw(boolean fullRedrawNeeded)”找到下面的
 代码(两处),做修改
缺点
0  没有log输出,不便于自动化测试统计
0  通过Canvas把FPS始终显示在屏幕的左下角,不在
 Canvas的无效区域以内时,FPS值无法重绘
4.0 (或以上)

 0  frameworks/base/core/java/android/view/
    ViewRootImpl.java	
  
 0  将DEBUG_FPS常量设为true	
  
 0  FPS通过log输出	
  
0  下载与浏览

0  调试与编译

0  源代码利用示例

0  Q&A
谢谢	
  
jthu@bainainfo.com	
  

More Related Content

What's hot

Clojure cnclojure-meetup
Clojure cnclojure-meetupClojure cnclojure-meetup
Clojure cnclojure-meetup
sunng87
 
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
Will Huang
 
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練
Joseph Chiang
 
安装包制作说明手册
安装包制作说明手册安装包制作说明手册
安装包制作说明手册
Zac John
 

What's hot (18)

快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)
 
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽
 
09 creating windows phone game with cocos2d-xna
09   creating windows phone game with cocos2d-xna09   creating windows phone game with cocos2d-xna
09 creating windows phone game with cocos2d-xna
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
 
容器式基礎架構介紹
容器式基礎架構介紹容器式基礎架構介紹
容器式基礎架構介紹
 
Clojure cnclojure-meetup
Clojure cnclojure-meetupClojure cnclojure-meetup
Clojure cnclojure-meetup
 
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
 
Sth About SSD
Sth About SSDSth About SSD
Sth About SSD
 
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式
 
Introduction to Golang final
Introduction to Golang final Introduction to Golang final
Introduction to Golang final
 
微软Bot framework简介
微软Bot framework简介微软Bot framework简介
微软Bot framework简介
 
滲透測試 Talk @ Nisra
滲透測試 Talk @ Nisra滲透測試 Talk @ Nisra
滲透測試 Talk @ Nisra
 
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練
 
企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養
 
網頁安全 Web security 入門 @ Study-Area
網頁安全 Web security 入門 @ Study-Area網頁安全 Web security 入門 @ Study-Area
網頁安全 Web security 入門 @ Study-Area
 
Nae client(using Node.js to create shell cmd)
Nae client(using Node.js to create shell cmd)Nae client(using Node.js to create shell cmd)
Nae client(using Node.js to create shell cmd)
 
安装包制作说明手册
安装包制作说明手册安装包制作说明手册
安装包制作说明手册
 
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
 

Viewers also liked

Rogers and Maslow's Theory
Rogers and Maslow's TheoryRogers and Maslow's Theory
Rogers and Maslow's Theory
Sarbjit Rindi
 
Limited liability partnership
Limited liability partnershipLimited liability partnership
Limited liability partnership
Anuj Sood
 

Viewers also liked (20)

千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江
 
Android消息推送实现 | 友盟 徐仙明
Android消息推送实现 | 友盟 徐仙明 Android消息推送实现 | 友盟 徐仙明
Android消息推送实现 | 友盟 徐仙明
 
Android程序的编译,安装和运行 | 小米科技 汪文俊
Android程序的编译,安装和运行 | 小米科技 汪文俊Android程序的编译,安装和运行 | 小米科技 汪文俊
Android程序的编译,安装和运行 | 小米科技 汪文俊
 
Android在多屏幕、多设备上的适配 | 布丁 任斐
Android在多屏幕、多设备上的适配 | 布丁 任斐Android在多屏幕、多设备上的适配 | 布丁 任斐
Android在多屏幕、多设备上的适配 | 布丁 任斐
 
Mapas de karnaugh
Mapas de karnaughMapas de karnaugh
Mapas de karnaugh
 
Android音频口数据通信开发 | 爱图腾 李鹏军
Android音频口数据通信开发 | 爱图腾 李鹏军Android音频口数据通信开发 | 爱图腾 李鹏军
Android音频口数据通信开发 | 爱图腾 李鹏军
 
Android账户同步备份框架 | 盛大乐众ROM 郭振
Android账户同步备份框架 | 盛大乐众ROM 郭振 Android账户同步备份框架 | 盛大乐众ROM 郭振
Android账户同步备份框架 | 盛大乐众ROM 郭振
 
如何创建更加灵活的App | 大众点评 屠毅敏
如何创建更加灵活的App | 大众点评 屠毅敏如何创建更加灵活的App | 大众点评 屠毅敏
如何创建更加灵活的App | 大众点评 屠毅敏
 
My Maps
My MapsMy Maps
My Maps
 
Rogers and Maslow's Theory
Rogers and Maslow's TheoryRogers and Maslow's Theory
Rogers and Maslow's Theory
 
The family
The familyThe family
The family
 
Quick coffeescript
Quick coffeescriptQuick coffeescript
Quick coffeescript
 
Social media resume.joanne archer
Social media resume.joanne archerSocial media resume.joanne archer
Social media resume.joanne archer
 
Limited liability partnership
Limited liability partnershipLimited liability partnership
Limited liability partnership
 
逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp
逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp
逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp
 
Persuasive speech
Persuasive speechPersuasive speech
Persuasive speech
 
发现和建立多设备之间的数据通信 | 豌豆荚实验室 孙桥
发现和建立多设备之间的数据通信 | 豌豆荚实验室 孙桥发现和建立多设备之间的数据通信 | 豌豆荚实验室 孙桥
发现和建立多设备之间的数据通信 | 豌豆荚实验室 孙桥
 
JavaScript Event Loop
JavaScript Event LoopJavaScript Event Loop
JavaScript Event Loop
 
Radioactive decay
Radioactive decayRadioactive decay
Radioactive decay
 
Leadership
LeadershipLeadership
Leadership
 

Similar to 和Android源代码一起工作 | 海豚浏览器 胡继堂

这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit
LainZQ
 
Android -汇博
Android -汇博Android -汇博
Android -汇博
dlqingxi
 
尚观Linux研究室 linux驱动程序全解析
尚观Linux研究室   linux驱动程序全解析尚观Linux研究室   linux驱动程序全解析
尚观Linux研究室 linux驱动程序全解析
hangejnu
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Gelis Wu
 
Android开发基础
Android开发基础Android开发基础
Android开发基础
ykdsg
 

Similar to 和Android源代码一起工作 | 海豚浏览器 胡继堂 (20)

基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映
 
基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映
 
这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit
 
Build Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratchBuild Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratch
 
Android JNI
Android JNIAndroid JNI
Android JNI
 
Tech.days Taiwan AZR302
Tech.days Taiwan AZR302Tech.days Taiwan AZR302
Tech.days Taiwan AZR302
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台
 
Android -汇博
Android -汇博Android -汇博
Android -汇博
 
Hadoop开发者入门专刊
Hadoop开发者入门专刊Hadoop开发者入门专刊
Hadoop开发者入门专刊
 
尚观Linux研究室 linux驱动程序全解析
尚观Linux研究室   linux驱动程序全解析尚观Linux研究室   linux驱动程序全解析
尚观Linux研究室 linux驱动程序全解析
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
Android開發app
Android開發appAndroid開發app
Android開發app
 
Android应用开发 - 沈大海
Android应用开发 - 沈大海Android应用开发 - 沈大海
Android应用开发 - 沈大海
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
 
Android开发基础
Android开发基础Android开发基础
Android开发基础
 
Windows 8.1 app 研習營三小時
Windows 8.1 app 研習營三小時Windows 8.1 app 研習營三小時
Windows 8.1 app 研習營三小時
 
VSCode Remote Development 介紹
VSCode Remote Development 介紹VSCode Remote Development 介紹
VSCode Remote Development 介紹
 
VSCode Remote Development
VSCode Remote DevelopmentVSCode Remote Development
VSCode Remote Development
 
Android开发培训 单元1
Android开发培训 单元1Android开发培训 单元1
Android开发培训 单元1
 

More from imShining @DevCamp

More from imShining @DevCamp (7)

凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
 
简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞
简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞
简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞
 
在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林
在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林
在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林
 
在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛
在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛
在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛
 
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
 
《Passbook实战详解》| 爱图腾 廉洁 | iOS DevCamp
《Passbook实战详解》| 爱图腾 廉洁 | iOS DevCamp《Passbook实战详解》| 爱图腾 廉洁 | iOS DevCamp
《Passbook实战详解》| 爱图腾 廉洁 | iOS DevCamp
 
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
 

和Android源代码一起工作 | 海豚浏览器 胡继堂