精华内容
下载资源
问答
  • 慢慢发现,该部分工作都是简单粗暴无营养的,所以需要开发工具来自动生成代码结构的文档说明。 1.2 设计 单文件【CS】操作流程: 选择单文件(.cs)文件 -> 选择输出内容 -> 选择单文件-> 计算 ->打印日志 ->...

    1.1 需求

    由于最近在写C#代码时,需要编写代码结构说明文档,在文档当中把类中的属性和方法进行编写。慢慢发现,该部分工作都是简单粗暴无营养的,所以需要开发工具来自动化生成代码结构的文档说明。

    1.2 设计

    单文件【CS】操作流程: 选择单文件(.cs)文件 -> 选择输出内容 -> 选择单文件-> 计算 ->打印日志 ->生成结构文档。

    多文件【CS】操作流程:选择文件夹 -> 选择输出内容 -> 选择单文件-> 计算 ->打印日志 ->生成结构文档


    1.3 实现效果

    单文件【CS】操作界面:


    多文件【CS】操作界面:



    导出文件效果:


    1.4 工具下载

        下载地址 : http://download.csdn.net/download/chr23899/10151324 

        



    展开全文
  • 前言: 组件和插件有什么区别?虽说网上有很多文章但是讲清的聊聊无几,这也是这篇...简介:组件代码上的功能模块,而插件是功能上的模块apk插件。具体看下文 一.原因 项目迭代到一个时期后,随着...

    前言:

    组件化和插件化有什么区别?虽说网上有很多文章但是讲清的聊聊无几,这也是这篇文章的由来。

    大方向:组件化是一个项目主管设计管理项目架构方案,而插件化有商务上的合作和局部功能热更换修复等

    小方向: 如果是公司app合作,组件化也就是插件化作为别人公司的一个子模块。

    简介:组件化是代码上的功能模块化,而插件化是功能上的模块apk插件化。具体看下文

    一.原因

    项目迭代到一个时期后,随着开发人员的增加,各人的开发风格掺杂到一起,将使代码越发臃肿并且不易维护,这时候公司就会分出一部分人将代码风格统一并且模块化封装和拆分结构。重构代码的核心思想:高内聚低耦合设计思想原则。

    Android工程中如何实施两大流派,一个是组件化,一个是插件化。

    二.优势

    代码重构目的:高内聚,低耦合。规范统一的代码结构,减少更新版本修改代码的工作量

    人员效率目的:每个人研发个人的module组件,减少svn或git代码对代码的合并工作,提高分工合作开发效率

    bug修复目的:修改代码生产bug最麻烦的就是找bug,由于每个人负责各自的模块代码,方便查找问题的提供的组件接口,快速修正bug。

    1、组件化与插件化

     

      上面的图看上去似乎比较清晰,其实容易导致一些误解,有下面几个小问题,图中说的就不太清楚:

    • 组件化是一整个apk如图所示,Android机器人有头有手有脚(各个组件或子模块),手有毛病bug了,就对手部做检查。而各个部件又都依赖于这一整个apk,缺少任何一个器官app都是可以存在并正常运行的。它偏向于编写代码生产机器前的过程。
    • 插件化是多个apk组合在一起,在 组件化中头和手脚可以分开,但是不能作为一个机器人存在。组件化分开都可以作为一个器件(子模块),但是插件化就是将这个器件apk和主人组合在一起,它更偏向于实际的产品使用。

    三.组件化架构

    1.语言场景:java,cotlin,C或C++(ndk功能开发),mvp或mvvm等

    举个栗子1:同事他会cotlin,而我不会,若他在多人开发公共项目代码中使用cotlin语言,所有人都需要学习一边cotlin语言,将会造成其他不会cotlin语言的开发负担。

    举个栗子2:同事喜欢mvp模式,另一个同事喜欢用mvvm模式,但是一个项目中多种结构就会显得很杂乱,这个时候如果mvvm的模式只会在那个喜欢mvvm的模块组件中使用,mvp只会喜欢mvp同事的代码模块中,修正过程互不干涉就会使每个人开发更方便,当然建议一种架构模式最好,但是阻挡不了强势的个人思想。

    面对团队多人开发时候的争论,这时候如果有一个人做架构处理,就算是cotlin程序猿,ndk底层开发工程师,framework开发部分,以后这代码编写模式不统一都可以解决。并且大公司都有做权限管理,为什么会有呢?一个开发人员就把所有代码都拿到手那大公司还怎么混。因此在做组件化的过程中,可以分权限下载,分工合作开发。

    简要图:

    详细解析图:

    cotlin开发:由于谷歌的推荐导致后来有些公司也开始推崇cotlin语言,而module中可一转化为cotlin形式的module。

    cpp开发:一般专门编写c/c++语言的ndk开发人员,主要编写FFmpeg底层功能。这类核心功能开发基本都有一位专门的人员开发。

    hook反射:现在已经出现招募framework开发工程师来做市场应用app开发,由于对系统源码了解更多,所以通过各种反射来开发特殊定制功能。

    普通java开发:这个也就是我们经常做的开发范围,mvc,mvp,mvvm代码编写模式,都可以直接在module中进行使用,而不会产生冲突,当然推荐是使用统一的模式比较好。

    通过上图可以看出,为什么称组件化为架构设计,而不称插件化为架构设计。作为团队开发,如果将分工合作和开发效率做到最高效,所以组件化开发的意义就不言而喻了。当然如果是单人独立开发,博主也可以告诉你,组件化开发依然有意义,可以快速定位模块代码修复bug。

    总而言之:

    组件化具有强大的兼容性,容纳下整个团队各个开发人员甚至不同开发职能的人员。

    组件化具有高效的效率,各种子模块的解耦,就可以快速定位bug,而且子模块的单独编译修改,可以大幅度减少整个项目的编译运行时间(终于不用浪费生命在等as编译了,感谢上天)

     

    当然上面所描述的可以了解组件化整体的概念,通过下图,我就可以彻底了解开发步骤了:

    四.代码实践:

    1、主工程(主module入口):主要负责容纳所有子模块,不包含业务逻辑。主要用于使用组合业务组件、初始化配置和发布应用配置等操作。

    2、组件(module/lib):主要实现具体业务逻辑,尽可能保证业务独立性,例如现在手淘这样一个大型的app几乎各个功能块都能够拿出来作为一个独立业务app。但是没有这么大型也可以按照小一些的业务逻辑来区分组件,例如:购物车组件、收银台组件、用户中心组件等,具体更具自己的项目需要来划分。

    3、公共库(library):公共使用的application,通用工具类、通用sdk等库,例如eventbus、xutils、okhttp、timber日志工具、自定义工具类等等,这些库可以做成一个公共libcommon。关系则是 主工程依赖组件、组件依赖公共库。

    组件化调试分两种模式:1.分模块开发测试模式。2.组合容纳发布模式。
    1、分模块开发测试模式:子模块(lib)转化为module模式,子模块module是可以独立运行的,保证高内聚低耦合对其他业务没有依赖就可以独立开发测试。
    2、组合容纳发布模式:依赖所有子模块(lib),整合所有模块,所有业务将组合成完整app发布运行。

    组件化实质上是一个gradle编写的进阶学习和应用:Android组件化之gradle使用

    -----------------------------代码:

    步骤1:各个模块的第三方引用库版本号统一放置project根目录gradle.properties,方便各个模块引用相同的参数 根部gradle配置可变参数:

    #组件化开发 --module/lib切换
    pro_isPlugn=true

    步骤2:各子模块build.gradle配置,通过参数pro_isPlugn切换子模块的lib/module模式

    一读取gradle.properties中储存String值的pro_isPlugn是否组件化开发,然后对子模块设置为library或者application(module)

    if ("true".equals(pro_isPlugn)) {   //组件化步骤1
        apply plugin: 'com.android.application'
    } else {
        apply plugin: 'com.android.library'
    }

    二.解决包名,要知道library是不需要包名的,那么就可以这样操作:

        defaultConfig {
            if ("true".equals(pro_isPlugn)){  //组件化步骤2
                applicationId "lsh.com.module_mvp"
            }
            ...
        }

    三.设置lib模式和子module模式各自对应的AndroidManifest.xml

       sourceSets {
            main { //组件化步骤3
                if ("true".equals(pro_isPlugn)){
                    manifest.srcFile 'src/main/AndroidManifest.xml'
                }else {
                    manifest.srcFile 'src/main/plugmodule/AndroidManifest.xml'
                }
            }
        }

    总体图:

    四.plugmodule中的AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="lsh.com.module_mvp">
    
        <application >
            <activity android:name=".MvpActivity">
            </activity>
        </application>
    
    </manifest>

    普通的module的AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="lsh.com.module_mvp">
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name="lsh.com.module_mvp.MvpActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
    
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
            </activity>
        </application>
    
    </manifest>

    步骤3:主module判断是否使用子模块,组件化切换后不报错。

    一.普通的跳转子模块:注意:将lib切换为module过程中会出现不存在提示红线

    startActivity(new Intent(MainActivity.this,CotlinActivity.class));//普通跳转activity,组件化代码切换模式报错,强迫症患者可以选择下面方式

    二.反射方式跳转子墨跨:推荐。

            String activityName="lsh.com.module_mvp.MvpActivity";
            try {
                Class clazz = Class.forName(activityName);
                Intent intent=new Intent(MainActivity.this,clazz);
                startActivity(intent);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }

    三.通过阿里巴巴开源的库ARouter实现跳转,为什么没放进来,复杂化代码,并且个人观点各个子模块要求多升级改动成本大

    ARouter.getInstance().build("/MvpActivity/1").navigation();

     

    五.作为架构的层次看:

    团队开发:容纳所有成员的代码开发,甚至可以两人同时开发一个子模块,切换子模块的代码,快速开发

    商业合作:商家合作的插件apk集成可以直接插件化开发。

    权限限制:对整个项目做查看的权限处理,防止开发人员的流动,代码的核心保密

    预设前景:程序部分功能可以直接插件化,可以重新组合作为新项目。

     

     

    插件化见个人下一篇博客。

    谢谢观看,有用请点赞和在GitHub上star,作为鼓励!!

    个人代码demo下载

     

     

     

    展开全文
  • Unity代码结构

    千次阅读 2017-08-14 23:58:20
    unity3d 游戏 工程目录 结构 unity

    工程结构

    工程结构是约束整个unity3d工程的文件存放位置。想想你有一个大型的项目文件柜,而这些文件就好比一堆项目资料,对比一个整理完善、有序存放的文件柜,和一个文件互相交错,存放无序的文件柜,我相信你一定会选择第一个,因为第二个对于你来说就是噩梦般的存在。废话不多说,我先上我得工程目录结构

    这里写图片描述

    如果你能严格按照这个目录,整个工程就可以从始至终保持这个结构而不凌乱。

    Assets    #unity3d 默认主目录。
    -----Editor #编辑器类存放文件夹。
    -----ExternalLibraries #大型完善的外部库文件存放目录,如NGUI等拥有完善的目录结构和大量代码的插件,就存放在此目录。有些人喜欢把NGUI目录直接存放在plugins目录下其实是不太好的,因为plugins文件夹也是要参与编译的。
    -----GameAssets #游戏美术资源存放地,因为美术童鞋都是单独工程进行编辑,然后导出unitypackage文件,这个文件最大的坏处就是在导入时可能会污染目录结构,导致每次导入文件,均要手动调整目录,而单独命名一个GameAssets目录,再把这个目录复制到美术童鞋的工程里面,让美术童鞋编辑玩资源后,只把需要导出的资源放入这个目录存放妥当,再导出unitypackage文件。
    ------------|Materials  #材质球。
    ------------|Models   #模型,如果动画系统采用animation,把动画文件和原始模型存放在同一目录下,如果采用animtor,因为动画重用的关系,动画文件需单独存放。
    ------------|Animations #用新的Mecanim时,存放动画文件。
    ------------|Prefabs  #预制体,所有不需要Resource.Load加载的预制体,均存放在此。
    ------------|Sounds  #声音文件
    ------------|Textures  #贴图文件
    ------------|UI     #一些UI文件,如Atlas等。
    ------Plugins  #dll和一些纯代码插件。
    ------Resources  #所有需要通过Resource.Load加载的资源都存放于此
    ------Scenes    #scenes文件存放目录
    ------Scripts    #代码目录
    ------StreamingAssets

    Unity中的脚本都是继承自MonoBehaviour。

    一、基础函数:

    创建脚本就默认的update、start方法:(这些官方的文档都是有的)

    Start:Update函数第一次运行前调用,一般用于游戏对象的初始化。比如GetComPonent之类。
    Update:每帧调用;一般用于更新场景和状态,物理相关不建议在此处处理。
    Awake:脚本实例对象被创建时调用,也可以用于游戏对象的初始化,但是Awake是在所有脚本的Start之前执行。
    FixedUpdate:固定间隔执行,一般用于物理状态更新。
    LateUpdate:每帧执行,在Update之后。一般和摄像机有关的状态放在这里处理。

    现在我来简单测试下:我在场景中添加了两个Cube,分别添加了Script1,Script2,下面是执行log,可以看到Awake是在所有脚本之前调用的。

    这里写图片描述

    二、事件响应函数:

    MonoBehaviour中的事件响应函数都是已On开头的,比如:鼠标事件,脚本激活、销毁,碰撞等。
    OnApplicationFocus:当玩家获得或失去焦点时发送给所有游戏物体。可以作为协同程序,在函数中使用yield语句即可
    OnApplicationPause:当玩家暂停时发送到所有的游戏物体。可以作为协同程序,在函数中使用yield语句即可。
    OnApplicationQuit:在应用退出之前发送给所有的游戏物体。当用户停止运行模式时在编辑器中调用。当web被关闭时在网络播放器中被调用。
    OnBecameInvisible:当renderer(渲染器)在任何相机上都不可见时调用OnBecameInvisible。
    OnBecameVisible:当renderer(渲染器)在任何相机上可见时调用OnBecameVisible。
    OnCollisionEnter:当此collider/rigidbody与另一个rigidbody/collider接触时调用。
    OnCollisionExit:当此collider/rigidbody停止触发另一个rigidbody/collider时。
    OnCollisionStay:当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionStay将会在每一帧被调用。
    OnConnectedToServer:当你成功连接到服务器时,在客户端调用。
    OnDisconnectedFromServer:失去连接或从服务器端断开时在客户端调用。
    OnFailedToConnectToMasterServer:当连接主服务器出现问题时在客户端或服务器端调用。
    OnControllerColliderHit:在移动的时,当controller碰撞到collider时OnControllerColliderHit被调用。
    OnDestroy:脚本销毁时调用。
    OnDisable:对象禁用或者取消激活时调用。
    OnEnable:对象变为可用或激活状态时此函数被调用。
    OnDrawGizmosSelected:如果想在物体被选中时绘制gizmos,执行这个函数。
    OnGUI:渲染和处理GUI事件时调用。
    OnJointBreak:当附在同一对象上的关节被断开时调用。
    OnLevelWasLoaded:一个新关卡被载入时此函数被调用。
    OnMouseDown、OnMouseDrag、OnMouseEnter、OnMouseExit、OnMouseOver、OnMouseUp:鼠标事件。
    OnMouseUpAsButton:只有当鼠标在同一个GUIElement或Collider按下,在释放时调用。
    OnTriggerEnter:当Collider(碰撞体)进入trigger(触发器)时调用OnTriggerEnter。
    OnTriggerExit:当Collider(碰撞体)停止触发trigger(触发器)时调用OnTriggerExit。
    OnTriggerStay:当碰撞体接触触发器时,OnTriggerStay将在每一帧被调用。

    三、默认组件

    组件对应的变量名是组件名的小写。
    Transform:对象的位置,角度,缩放。变量名:transform
    Rigidbody:刚体属性。
    Render:渲染物体模型。
    Light:灯光属性。
    Camera:相机属性。
    Collider:碰撞体属性。
    Animation:动画属性。
    Audio:声音属性。

    四、组件获取函数

    获取组件的方法由于比较耗时,所以如果你在update修改transform的话,一般可以先在Start中获取这个组件的引用,然后在update中使用引用去修改。
    比如获取上面例子cube1的script1脚本:
    [c-sharp]Script1 spt1 = GetComponent( );[/c-sharp]
    下面是获取组件的函数:
    GetComponent:获取组件。
    GetComponents:获取组件列表。
    GetComponentInChildren:返回Type类型组件,在GameObject或它的任何子物体使用深度优先搜索,仅返回激活的组件。
    GetComponentsInChildren:在GameObject或任何它的子物体,返回全部Type类型组件。

    五、获取场景中的游戏对象

    同样和获取组件一样,该方法比较费时,一般在Start中获取引用。
    [c-sharp]
    GameObject cube1 = GameObject.Find(“Cube1”);
    GameObject cube1 = GameObject.FindWithTag(“tag_cube1”);
    [/c-sharp]
    除了上面的方法,也可以使用public对象,直接使用面板拖拽赋值。

    展开全文
  • chromium源代码结构

    千次阅读 2012-09-28 16:05:27
    Chrome源代码结构 首先,开始接触Chrome的童鞋可能有一个疑惑,Chrome和Chromium是同一个东西吗?答案是,Chrome是Google官方的浏览器项目名称,Chromium是Google官方对Chrome开源项目。说白了就是Chrome是Google...

    Chrome源代码结构

    首先,开始接触Chrome的童鞋可能有一个疑惑,ChromeChromium是同一个东西吗?答案是,ChromeGoogle官方的浏览器项目名称,ChromiumGoogle官方对Chrome开源项目。说白了就是ChromeGoogle自己的官方浏览器版本,而Chromium是开源项目,所有有兴趣的开发者都可以参加,Chromium中出现的新技术如果经过测试是可靠的,健壮的,那么将可能会出现在未来发布的Chrome官方版本中。因此,Chrome版本更新速度要远远小于Chromium的更新速度。

    在本文中,笔者为了偷懒,直接用项目名称Chrome指代Chromium,废话不多说了,开始为潜入Chrome源代码的海洋作准备了。

    源代码目录树

    Chrome项目是一个非常庞大的项目工程,包含的工程(Project)数量超过了500个,全部代码加在一起超过4G,全部编译完成将消耗将近30G的磁盘空间,不愧为恐龙级别的软件项目工程。面对Chrome浩如烟海的源代码,我们怎么读呢?很显然,一个文件一个文件的看,逐行分析是不现实的,我们必须先从整体来把握整个Chrome工程,然后逐步细化去了解每个具体模块的功能,并且对你所感兴趣的部分模块进行最后的深入分析。

    分析任何一个大型软件项目的源代码,我们首先要做的事是参考官方文档(如果有的话),对项目的源代码目录树进行分析。通过对源代码树的分析,我们可以很快掌握项目中各个工程之间的依存关系,了解项目中每个模块的大致功能,并且可以很快地找到源代码分析的入口点。

    下面图1所展示的是在Visual Studio 2008中,Chrome项目的源代码目录树结构,不同的Chrome版本的源代码目录树可能有一些差别,但其主要某块的结构变化不大。虽然Chrome整个源码工程很庞大,但其代码结构是非常清晰的,代码质量非常高,代码的风格统一这将是为后续代码分析提供便利基于Visual Studio 2008强大的可视化调试功能童鞋们只要掌握好分析的粒度,从粗到细,从整体到局部逐渐深入,从面到点,通过在关键部分设置端点,有目的的去跟踪代码执行流程很快就进入状态。下面将逐一介绍Chrome源代码中主要工程模块的功能。

     

    Chrome项目总体概览

        Chrome个大模块(其中包含第三方库)Browser,RendererWebKit其中Browser(浏览器)负责主进程的启动,展现UI以及数据I/ORenderer(渲染器)通常作为是由Browser调用的标签子进程Renderer嵌入WebKit对页面进行布局和渲染。WebkitChrome的对浏览器Webkit内核的一个封装,是浏览器内核心与外部调用的一个中间层。

     

     

    Chrome学习笔记(二)鈥斺斣创虢峁怪钅磕柯际鹘樯

    1 Chrome项目的源代码目录树结构

    app应用平台代码,与国际化有关,此该目录工程源代码是和主流操作系统平台相关的系统应用代码。正对不同操作系统提供了不同的c++实现文件。例如:剪贴板调用、操作系统数据交换接口、系统资源管理等。

    base:基础设施代码,此目录包含了一些公用库,包含大量的框架代码的实现,比如进程、线程以及消息循环的封装,对字符串的处理,C++对象生命周期管理,json解析处理、路径、日期时间以及日志服务等。建议从该部分代码开始学习分析Chrome。因为通过此处的代码的分析,对理解chrome的基础架构设计将会有很大帮助。

    breakpad辅助库,用于崩溃服务框架Chrome因为一场而崩溃(Crash)时,捕获异常将崩溃现场数据发送给google进行分析。

    build:编译构建相关的工具支持库,其中包括了Google自己的URL解析库

    chrome:浏览器主程序模块实现代码,使核心代码,将是后续代码分析的重点之一。Chrome目录包括了UI实现和Render部分两大部分其中重要工程是:BrowserRendererPlugin等。其中Renderer部分是webkit的封装。该目录中代码数量巨大,Google自己的代码,后续动频繁的代码大部分集中在这里

    chrome_frame该目录下是google针对IE开发的一个插件代码,使得IE可以使用chromeRenderer渲染引擎来显示网页。

    content与浏览器页面处理相关的部分。在早期的Chrome版本中,content内容包含在chrome目录中。在新的版本中,Google将浏览器页面处理部分从chrome模块摘出来,单独形成一个工程目录。

    courgette辅助库,昵称:小胡瓜该目录包含一个用于生成浏览器升级二进制包的工具。该工具的目的是减少升级过程中数据下载的大小。例如,升级需要替换一个比较大的DLL文件,假设该文件大小超过5M,而新版本可能只是添加了一行代码,变化很小Chrome在升级时,通过courgette这个小工具比较新旧两个DLL,找到差异部分,并提取差异部分生成升级包下在到本地进行升级,这样下载的升级包可能只有几十K甚至几K。这将大大缩短用户的升级时间,对于网速慢的用户来说无疑是巨大的福音。

    gpuGPU加速模块,利用GPU渲染页面,提高浏览器性能。

    ipc该目录里是Chrome的核心库之一:进程通信基础设施库。chrome浏览器采用多进程架构,进程间的通信基于IPC。 windows下的IPC库采用命名管道、异步IO(完成端口)、共享内存来实现进程间数据传输效率比较高IPC不仅封装了IO机制,而且还定义了统一的消息传输格式对多进程感兴趣的童鞋应该仔细阅读这里的代码

    jingle该目录是XMPPThe eXtensible Messaging and Presence Protocol可扩展通讯和表示协议)的扩展协议模块。通过Jingle可以实现点对点(P2P)的多媒体交互会话控制。例如:语音交互(VOIP)、视频交互等。Jinggle是由GoogleXMPP基金会共同设计的。

    media该目录包含多媒体音频视频解码相关的模块

    native_client该目录在浏览器中运行native代码的模块Native Client是一种可以使本地代码在浏览器上运行的技术。该技术被视为微软ActiveX技术的继任者。项目具体细节可参考native client官网尽管ActiveX因为其脆弱的安全性而饱受用户和开发者的诟病,但Native Client是否能克服这些问题依然值得考验。

    net该目录是具体的网络协议实现基础库,其中包括ftphttp等客户端协议栈的实现代码。

    ppapi该目录是一个浏览器插件(PluginAPI模块,全称为Pepper Plugin API,是GoogleNPAPI(Netscape Plugin API)基础上的发展。PPAPINPAPI进行了一些修改,使其更方便而且更安全。该扩展模块被设计用来缓解进程外部拆建执行的实现,并且提供一个框架使得插件完全跨平台。该模块的主要包括:跨浏览器的NPAPI的统一语义;扩展运行与独立于渲染器(Renderer/浏览器(Browser)之外的进程;使用浏览器的合成过程规范渲染;定义标准化事件和2D光栅功能;提供3D图形访问的初步尝试;插件注册。

    printing该目录包含打印模块,实现页面的打印以及打印预览

    remoteing该目录包含通过终端服务运行应用程序的模块,就是大家听说过的Chromoting这个东东。该功能可以在Chrome/Chrome OS上远程执行其他平台上的本地应用程序,其方式为终端服务或者使用RDPVNC连接到远程主机执行应用。简单说就是Chrome的远程桌面功能,目前该功能正在完善中。

    rlz该目录非常特殊,因为它是chrome项目中唯一不提供源代码的不过分。该模块主要用于用户行为追踪就是将用户行为收集报告给google该模块虽然这对Chrome产品的改善计划提供了很大帮助,但其内在的用户隐私也存在安全问题,因为Google会怎么收集数据、收集什么数据、数据流向都是一个秘密,:D

    sandbox该目录包含沙盒安全技术模块。该技术用于在浏览网页的时候,保护计算机不被恶意代码侵入。简单说就是虚拟出一个内存空间,将浏览Web时插件对系统功能的调用放到这个虚拟空间中进行,如果发现调用非法,则立刻回卷这部分内容,确保用户系统关键数据不会被恶意应用程序或者病毒修改。该技术伴随windows2000操作系统出现。沙箱是相对安全的,但不是绝对安全,因为已经有攻击成功案例。

    skia该模块是google收购的SKIA公司提供的2D图形渲染引擎库。通常图形渲染库的优劣决定了浏览器的显示效果。

    sql该目录是包含Chrome数据库方面的模块。Chrome采用了SQLITE3数据库引擎。在该模块中包含了对SQLITE3的封装以及对SQL语句的封装和处理。

    testingc++单元测试框架库。

    third_party目录下是第三方开源支持库包含了Chrome项目中所有第三方的开源库,其中最重要的是webkit内核

    tools该目录包含Chrome项目所使用的工具模块,比如堆栈调用、内存监测钩子等等。

    ui该目录是Chrome的界面库。

    v8该目录是Javascript引擎,库,也chrome的重要内核库。

    views该目录是Chrome界面控件元素库,针对不同OS平台进行了统一封装,其绘制采用skia引擎实现。Views包括UI事件交互机制、各种控件(如按钮、菜单、树、选择框等等)。

    webkit该目录并不是Webkit,而是Chrome项目webkit内核的一个封装层封装的目的是在上层应用调用webkit内核之间提供一个中间接口使Webkit内核功能透明,方便其上层的应用开发该目录下support中有一个名字叫glue工程。

    展开全文
  • 1、代码结构介绍

    千次阅读 2018-04-11 23:11:14
    首先看看总体的代码结构是怎么样的,后续将逐一介绍每个目录及文件。一、framework下:1、basepage.py是父类页面类,里边二次封装了一些常用的selenium方法,各页面继承该父页面类,达到代码简化及复用的效果。2、...
  • 代码格式

    千次阅读 2019-11-06 10:10:00
    每个人都有自己喜欢的代码样式。但是根据我们的经验,下面这些做法可以提高团队的开发效率:团队使用单一,共享的代码样式。通过自动格式化代码来保证统一的代码样式。如果没有统一的...
  • LoRa点对点系统6 源代码结构

    千次阅读 2016-10-25 10:05:49
    描述了LoRa点对点系统源代码结构,宏编译控制语句,Main入口函数的代码解释。
  • Android Chromium for WebView代码结构

    万次阅读 2014-11-07 18:40:43
    分享Android Chromium for WebView代码结构及各目录代码作用。
  • VLC 源代码结构

    千次阅读 2013-04-07 23:58:43
    译者:捞刀客 ...本节介绍VLC源代码目录树结构,以期使开发者对源代码的分布结构有一个整体的认识。下面的目录按照字母顺序列出,右边为该目录包含的内容描述。 目录名称 说明
  • 浅谈代码结构的设计

    万次阅读 2018-09-07 09:41:11
    本文来自网易云社区作者:陆秋炜引言 :很久之前,在做中间件测试的时候,看到开发人员写的代码,有人的代码,看起来总是特别舒服,但有的开发代码,虽然逻辑上没有什么问题,但总给人感觉特别难受。后来成为了一位...
  • Unity新项目如何快速理清顶层代码结构 半路上手新项目时弄懂scene切换流程是有必要的,scene切换可以说是unity最上层的代码资源结构 思路 首先我们在入口scene(第一个scene)中添加新的GameObject,绑定脚本...
  • react-native 基础开发二 项目结构和基础代码结构
  • Kettle — 源码启动和代码结构分析

    千次阅读 2018-09-11 18:03:24
    首先我们需要从Github中将源代码Pull下来。从Github上的分支可以看到,最新的版本应该是8.1.0.3的版本,而master分支最新的应该是9.0的RC版 Kettle源码地址:https://github.com/pentaho/pentah...
  • 结构化数据、半结构化数据和非结构化数据 结构化数据 结构化的数据是指可以使用关系型数据库表示和存储,表现为二维形式的数据。一般特点是:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同...
  • 1.OP-TEE代码结构

    千次阅读 2017-05-09 20:11:38
    历经一年多时间的系统整理合补充,《手机安全和...读者可从用户空间到TEE内核一步一步了解系统安全的所有内容,同时书中也提供了相关的示例代码,读者可根据自身实际需求开发TA。目前该书已在天猫、京东、当当同步...
  • 四种代码结构--纸上谈兵04

    千次阅读 2019-10-28 22:45:47
    四种代码结构:按层封装,按功能封装,按组件封装,端口与适配器 实现客户查看订单状态的用例,按上面四种结构进行设计如下: 按层封装: 在这种简单的设计中,把代码分成三层:Web, 业务逻辑,持久层,每一层...
  • 结构化数据 **  结构化数据可以使用关系型数据库来表示和存储,如MySQL、Oracle、SQL Server等,表现二维形式的数据。可以通过固有键值获取相应信息。一般特点是:数据以行为单位,一行数据表示一个实体的信息,每...
  • FFmpeg源代码结构图 - 解码

    万次阅读 多人点赞 2015-03-12 14:03:16
    但是一直感觉这样对FFmpeg的理解还是比较浅,所以打算剖析一下它的源代码,理一下它内部结构的“脉络”。但是有一个很难办的问题:FFmpeg自带的三个工程:ffplay, ffmpeg, ffprobe的代码量非常的大,其中包含了...
  • FFmpeg源代码结构图 - 编码

    万次阅读 多人点赞 2015-03-13 14:42:15
    上一篇文章深入分析了FFmpeg解码过程中核心API的内部源代码,本文继续分析FFmpeg编码过程中核心API的内部源代码。本文的编码流程可以参考程序《最简单的基于FFmpeg的视频编码器》。函数调用关系图首先呈现分析的结果...
  • MATLAB02:结构化编程和函数定义

    万次阅读 多人点赞 2019-11-13 13:43:31
    文章目录MATLAB02:结构化编程和函数定义结构化编程流程控制语句和逻辑运算符流程控制语句示例使用循环语句应尽量预先分配内存空间 MATLAB02:结构化编程和函数定义 结构化编程 流程控制语句和逻辑运算符 与大多数编程...
  • 结构化语言

    千次阅读 2019-09-22 13:35:08
    结构化语言的显著特征是代码和数据的分离。这种语言能够把执行某个特殊任务的指令和数据从程序的其余部分分离出去、隐藏起来。获得隔离的一个方法是调用使用局部(临时)变量的子程序。通过使用局部变量,我们能够写...
  • PyCharm使用技巧:Structure(列出代码结构

    万次阅读 多人点赞 2017-06-17 07:17:33
    PyCharm的Structure功能可以列出代码结构,方面我们从宏观了解代码。
  • KVM虚拟机代码揭秘——QEMU代码结构分析

    万次阅读 热门讨论 2011-07-13 16:06:14
    如我们所知,QEMU是一个模拟器,它能够动态...QEMU模拟的架构叫目标架构,运行QEMU的系统架构叫主机架构,QEMU中有一个模块叫做微型代码生成器(TCG),它用来将目标代码翻译成主机代码。如下图所示。 我们也可以将
  • 上一篇我们介绍了spring cloud云服务架构 - particle云架构代码结构,简单的按照几个大的部分去构建代码模块,让我们来回顾一下: 第一部分: 针对于普通服务的基础框架封装(entity、dao、service、...
  • (三)微服务-整个架构的代码结构

    千次阅读 2017-10-09 10:06:16
    根据微服务设计思想,结合spring cloud本身的服务发现、治理、配置管理、分布式等项目优秀解决方案,我们使用Maven技术将框架进行模块、服务、原子封装,也为后期的热插拔、持续集成做一些准备工作。
  • Android4.0中Bluetooth的代码结构

    千次阅读 2013-09-05 14:01:25
    也许在看了上一篇的《Android中bluetooth的架构》一文后,你已经有了强烈的想去动手看看源代码的冲动了吧?没错,看源码绝对是一个很好的理解方法,但是涉及到Bluetooth的源代码究竟在哪里呢?也许,有人很快就能够...
  • 9.11 结构化数据:NumPy 的结构化数组 本节是《Python 数据科学手册》(Python Data Science Handbook)的摘录。 译者:飞龙 协议:CC BY-NC-SA 4.0 虽然我们的数据通常可以通过同构数组来很好地表示,但有时并非...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,880,687
精华内容 752,274
关键字:

代码结构化