Android 工具视频学习笔记_WDS
补充:
1. 由于Android源码过于庞大,SourceInsight会经常卡死,不适合了。适合的是Android Studio, 非常好用。使用手册上有介绍如何安装。
编译安卓的过程说明手册中也有。
3.Android的源码非常庞大,而且C++的类的继承关系非常的深,如果能快速知道这些类的继承关系,对阅读代码会有非常大的帮助。可以
使用UML工具来自动生成这些类的继承关系。大部分UML工具都是收费了,bouml是一款比较好用的免费的版本,但是最新版本的bouml也开
始收费了,可以找一个比较老的版本,如4.23(7.71),它又一些bug,但是已经够用了。所谓的UML工具就是可以先建立一些模型,然后根据这些模
型来生成C++或Java源代码。还可以通过源代码来生成那些类的继承关系。
这个bouml工具显示出的继承关系图(类图)中:
黑体字表示类的名称
“-”表示私有属性
“+”表示public属性
箭头指向的是父类
=========================3-2======================
第0课第1节_工具_使用AndroidStudio来阅读源码.mp4
-----------------------------------------------
根据第六章来阅读Android源码
1.首先要搭建环境
1.使用Android Studio来阅读Android源码
$ mmm development/tools/idegen //生成一些必备的文件,然后通过这些文件做到快速阅读源代码
$ mv .out/target/product/tiny4412/obj/GYP/shared_intermediates/res.java xxx 把这个文件重命名成res.j,这是由于下面这一步报错说它是个目录,搜索了发现重命名可以。
$ sh ./developement/tools/idegen/idegen.sh //这一步编译完后会在Android工程根目录下
生成android.iml和android.ipr这两个文件,
把它传到Window上的Android源码的根目录下,然后使用Android Studio打开.ipr文件(file --> Open...)。此时
Studio会“Sacnning files to index”扫描文件建立索引,这个过程会持续几十分钟或1h.
使用ctrl+shift+n打开一个文件,按住ctrl键点击import的类就会跳转到对应的类里面。
但是有时候会发生跳转错误,解决方法参考:
www.cnblogs.com/Lefter/p/4176991.html
参考文章:
使用Android Studio查看Android Lollipop源码:
http://www.jianshu.com/p/c85984cf99e2
http://www.jianshu.com/p/c85984cf99e2
1.下载Android Lollipop源码(当然不一定非要是Lollipop源码,其他的版本也是可以的)
并进行过一次完整编译(不编译是无法进行源码导入工作的)
2.
如何使用Android Studio开发/调试Android源码:http://www.cnblogs.com/Lefter/p/4176991.html
1.源码中development/tools/idegen/README可以作为指导文档.
第0课第2节_工具_建模工具bouml_已看但是没有试验.mp4
-------------------------------------------------------
1.UML工具:bouml, 4.23是免费的,可以自动生成C++和Java中类的继承关系。
2.Bouml使用
a.Project --> new 创建一个工程
b.Languages --> 选C++和Java,可以多选.然后
c.添加C++文件获取uml图:Tools --> reverse C++ -->添加cpp文件 -->点击ok在点击cancel就会自动生成翻转关系了。
d.在browser栏下的第三层的目录上右击选“new class diagrom”输入名字test_uml,然后双击生成的test_uml表项,然后
将对应的类拉到test_uml表中。然后把对应列表项上的类拉倒这个test_uml界面上。
若在test_uml界面没有看到类的所有属性的话,可以在test_uml界面点击“edit” --> "edit drawing settings"
然后将“show classes members full definition”(会显示出完整的函数签名和属性类型)和“show members visibility”(在函数和属性的前面增加‘+’或‘-’分别表示public和private)都
选为Yes.
e.把其它所有的类都拖到test_uml界面中,此时会自动生成箭头指示继承关系。
f.点击保存,然后在左侧test_mul列表项上右击-->tool-->HTML doc.(flat),将test_uml界面转成png图片。
e.test_uml界面ctrl+滑轮可以放大和缩小,以便能导出一个看得清的png图片。
3.所谓的uml就是可以建立一些模型,然后根据这些模型生成你的C++或Java源代码。也可以通过源代码生成那些类的继承关系,这是逆过程,称为reverse。
4.bouml是使用Qt写的,目录中的‘\’需要替换为‘/’ (注意不要忘记转换了)
5.当class列表中类比较多需要查找时可以直接输入class的命令来查找class, 尽管没有任何输入栏。
6.类图对其:选中一个类后atrl选中另一个类,右键,align选择对齐方式。
7.若软件没有自动给出继承箭头,可以自己添加上去,但是bouml并不会帮我们检查是不是真的有继承关系。
8.4.23版软件bug: 先把类的继承关系的连线删除掉,但是删除后就不能手动添加了。也就是说一旦操作出错了,就
需要把整个uml类图删掉,然后再重新创建类图。
9.在uml界面中右击,format,然后可以调节uml图纸的大小。
10.在做图过程中发现缺少了源文件,此时还可以继续添加
============================================
第0课第3节_工具_使用bouml制作时序图.mp4
---------------------------------------
1.使用bouml制作时序图步骤
a. 和制作类图类似,一开始也是要创建一个工程然后reverse Java/C++文件。在browser栏的
第二级目录上右击,"create class view",例如输入名class_view。在class_view上右击,创建一个
“new squence diagram”,例如输入名字seq。双击seq打开时序图窗口。
b. Demo中使用的Ext7.java中中main()的执行路径涉及两个类Ext7和Son, 然后将他两个从browser栏拖动到
时序图窗口中。然后自己选择箭头,然后再双击箭头在箭头上注释。
2.对于Java文件会弹出一个.cat文件的弹框,若是没有就点击取消。
3.bouml制作时序图可以参考(目前还没看)
http://www.cnblogs.com/ywqu/archive/2009/12/22/1629426.html
http://blog.csdn.net/pashanhuxp/article/details/41982285
4.UML图中对象介绍
a. 对象
格式:对象名:类 但是通常会摆对象名省略掉,如此例中:Ext7和:Son就是两个对象。
b. 控制块
代表函数的执行
c. 消息
代表函数调用关系
同步消息:使用实心的指向右的箭头
异步消息:使用普通的指向右的箭头
返回消息:使用指向左的虚线箭头
===>比如将鼠标方法工具栏上的普通箭头上将显示“Synchronous message”
还有一种消息是自调用消息(定义和调用都在一个类中)
5.若导入的文件既有C++又有Java,可以先revert C++,然后再revert Java.
6.可以在类对象上右击,“Edit drawing setting” 来设置颜色,让Java、C++、C的类对象具有不同的颜色以便区分。
7.可以给每一个生命线都添加Note, 直接选中时序窗口的Note选项添加note即可。
6.Android的输入系统构建时序图的例子
a.reverse C++和 Java文件后,先在browers栏中的二级目录(src_files)上右键"new class view"创建一个例如名为
seq_c的表项。然后在seq_c表项上右击"new sequence diagram"创建一个例如seq的表项,双击它打开时序图窗口。
SystemServer.java中
public static void main(String[] args) //SystemServer.java 中的public class SystemServer类中
sysSrv.run(); //SystemServer.java
startBootstrapServices(); //SystemServer.java
startCoreServices(); //SystemServer.java
startOtherServices(); //SystemServer.java 这里面启动了其它很多server,例如input,power,wifi,bt等等
startServiceInputManager() //SystemServer.java
inputManager = new InputManagerService(mSystemContext); //InputManagerService.java
nativeInit //com_android_server_input_InputManagerService.cpp
NativeInputManager* im = new NativeInputManager //com_android_server_input_InputManagerService.cpp
sp<EventHub> eventHub = new EventHub(); //native/service/inputflinger/EventHub.cpp
使用inotify和epoll机制来监听目录"/dev/input"
后记:
每个硬件模块相关的服务的目录:
frameworks\base\services\core\java\com\android\server
每个硬件模块JNI文件的目录:
frameworks\base\services\core\jni
inputflinger displayservice surfaceflinger batteryservice等存放目录:
frameworks\native\services\
注意:
SystemServer.java文件中的 class SystemServer类中
startServiceAlarmManager
startServiceWatchdog
startServiceBluetooth
startServiceNetworkScore
startServiceInputMethodManager
startServiceInputManager
....
===>系统的所有服务应该都是在SystemServer中启动的。
Android 工具视频学习笔记_WDS的更多相关文章
- Android安装器学习笔记(一)
Android安装器学习笔记(一) 一.Android应用的四种安装方式: 1.通过系统应用PackageInstaller.apk进行安装,安装过程中会让用户确认 2.系统程序安装:在开机的时候自动 ...
- GNU工具链学习笔记
GNU工具链学习笔记 1..so为动态链接库,.a为静态连接库.他们在Linux下按照ELF格式存储.ELF有四种文件类型.可重定位文件(Relocatable file,*.o,*.a),包含代码和 ...
- android cocos2d-x for Android安装和学习笔记(请用adt-bundle21.1或以上导入)
引用:http://weimingtom.iteye.com/blog/1483566 (20121108)注意:这篇文章用cdt编译ndk工程的内容已过时(现在可以用adt-bundle,避免配置繁 ...
- 硬件访问服务学习笔记_WDS
1.Android驱动框架App1 App2 App3 App4-------------------硬件访问服务-------------------JNI-------------------C库 ...
- Windows驱动开发工具 WDK 学习笔记(1)
目标:能够把电脑当作一个集成有高性能处理器的开发板用起来,当然,还自带了一个高级的操作系统Windows(必须的).总之,就是在一个带了操作系统的高性能开发板上的驱动程序开发. 性质:纯属业余爱好 1 ...
- 前端自动化构建工具 gulp 学习笔记 一、
一.我对gulp的初期理解 是一种前端辅助开发工具 可以帮你把js,css,img等文件 合并.压缩,图片好像是合并为精灵图,合并为精灵图之后,还会生成一个css样式表. 官方解说是:基于流的自动化构 ...
- Android应用开发学习笔记之播放视频
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 在Android中,我们可以通过使用VideoView类或者MediaPlayer类来播放视频. 一.使用Video ...
- mars android视频学习笔记一:Activity生命周期
(1)创建:onCreate->onStart->onResume;(2)失去焦点:onPause->onStop:(3)重新获得焦点:onRestart->onStart-& ...
- Android API Guides 学习笔记---Application Fundamentals(一)
今天开始学习google官网上的API guides ,主要读了Application Fundamentals这一章节,此章节介绍了一个App的基本组成,共包括四大部分内容. 1. App ...
随机推荐
- hdu 1754解题报告 (代码+注释)
I Hate It Time Limit: 3000MS Memory Limit: 32768 K Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问, ...
- Toy Factory
Factory is a design pattern in common usage. Please implement a ToyFactory which can generate proper ...
- jdk8-lanbda方法引用和构造引用
1.方法引用概念及实例 1.对象实例方法 语法格式: 对象::实例方法名称 注意点: 实例方法必须和被实现的接口中定义的方法的参数列表和返回值一致.一般适合于一个方法就实现了的. 2.类::静态方法 ...
- confirm消息对话框
function rec(){ var mymessage= confirm("你是女孩?") ; if(mymessage==true) { document.write(&qu ...
- CodeMix入门基础知识
CodeMix在线订购年终抄底促销!火爆开抢>> CodeMix入门 CodeMix是一个Eclipse插件,可以直接从Eclipse访问VS Code和为Code OSS构建的附加扩展的 ...
- crontab的定时任务实例
实例1:每1分钟执行一次myCommand * * * * * myCommand 实例2:每小时的第3和第15分钟执行 3,15 * * * * myCommand 实例3:在上午8点到11点的第3 ...
- python day14--内置函数二
主要内容: 1.lamda匿名函数 2.sorted() 3.filter() 4.map() 5.递归函数 一.Lamda匿名函数 语法:lamda:参数:返回值 # 计算n的n次⽅方 def fu ...
- 移动端与PC端的触屏事件
由于移动端是触摸事件,所以要用到H5的属性touchstart/touchmove/touched,但是PC端只支持鼠标事件,所以此时可以这样转换 var touchEvents = { touchs ...
- SQL注入之Sqli-labs系列第八篇(基于布尔盲注的注入)
开始挑战第八关(Blind- Boolian- Single Quotes- String) 这关首先需要用到以下函数: 开始测试,使用测试语句,利用单引号进行闭合 猜解字段 union select ...
- VMware虚拟机与主机共享文件夹
VMware也可以像docker容器那样"挂载"主机上的目录给虚拟机,在虚拟机上访问共享目录就跟访问自己的目录一样方便. 1. 虚拟机(M) -> 设置(S)-> 选项 ...