• Android 工具视频学习笔记_WDS


    补充:

    一款好用的在线UML工具

    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"

    后记:

    每个硬件模块相关的服务的目录:
      frameworksaseservicescorejavacomandroidserver
    每个硬件模块JNI文件的目录:
    frameworksaseservicescorejni
    inputflinger displayservice surfaceflinger batteryservice等存放目录:
    frameworks ativeservices

    注意:
    SystemServer.java文件中的 class SystemServer类中
    startServiceAlarmManager
    startServiceWatchdog
    startServiceBluetooth
    startServiceNetworkScore
    startServiceInputMethodManager
    startServiceInputManager
    ....
    ===>系统的所有服务应该都是在SystemServer中启动的。

  • 相关阅读:
    全内存的redis用习惯了?那能突破内存限制类redis产品ssdb呢?
    multi_compile
    MVVM
    Gamma Correction
    Animator状态快速切换问题
    SVN 不显示状态图标--解决方法
    Rendering with Replaced Shaders
    MySql权威指南
    Effective C++
    帧同步
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/10465591.html
Copyright © 2020-2023  润新知