zl程序教程

Android培训班(3)

  • Android培训班(6)

    Android培训班(6)

    网络文件系统(NFS,Network File System)是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制,通过对网络文件系统的支持,用户可以在本地系统上像操作本地分区一样来对远程主机的共享分区(目录)进行操

    日期 2023-06-12 10:48:40     
  • Android培训班(8)

    Android培训班(8)

    Android的代码是比较庞大的,如果要全部编译一遍,是花费比较多时间,这样导致开发效率非常低,那么有没有办法只编译修改那一部份代码呢?答案是肯定有的,因为面对这么多代码,如果没有好的方法是开发不成功的。下面就来学习怎么样单个目录编译的方法。   在

    日期 2023-06-12 10:48:40     
  • Android培训班(12)

    Android培训班(12)

    #059  #060      get_hardware_name(); 这段代码是获取当前android系统运行的硬件信息,比如硬件的CPU名称。主要从/proc/cpuinfo里读到相关的信息。     #061      snprintf(tmp, sizeof(tmp), "/init.%s.rc",

    日期 2023-06-12 10:48:40     
  • Android培训班(17)

    Android培训班(17)

    在上面函数主要识别的关键字有: copy capability chdir chroot class class_start class_stop console chown chmod critical disabled domainname device exec export group hostname ifup insm

    日期 2023-06-12 10:48:40     
  • Android培训班(22)

    Android培训班(22)

    在初始化过程里,会显示一个LOGO图片,那么它是怎么实现显示这个图片的呢?它的代码如下: #001  /* 565RLE image format: [count(2 bytes), rle(2 bytes)] */ #002  #003  int load_565rle_image(char *fn

    日期 2023-06-12 10:48:40     
  •  Android培训班(26)

    Android培训班(26)

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 接着来分析函数 to_565_rle,这个函数主要实现从24位颜色变换为565的16位颜色表示

    日期 2023-06-12 10:48:40     
  • Android培训班(35)

    Android培训班(35)

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 在init.rc文件里,可以看到加载下面的服务: service zygote /system/bin/app_process -Xzygote /system/bin --zygo

    日期 2023-06-12 10:48:40     
  •  Android培训班(42)

    Android培训班(42)

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> Android.mk文件是用来向编译系统描述项目组织和编译方式,实际上是GNU make文件的一小片段,它会被编译系统解析一次或多次。 这个文

    日期 2023-06-12 10:48:40     
  • Android培训班(49)

    Android培训班(49)

    接着下来,打开这个文件Calculator.java,查看它的源码,如下: /* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version

    日期 2023-06-12 10:48:40     
  • Android培训班(52)

    Android培训班(52)

    应用程序编译过程: 1)资源文件编译 像资源文件xml、图片等文件,需要通过aapt工具来编译,生成资源文件表“resources.arsc”和资源关系文件“R.java”,JAVA编译器连接代

    日期 2023-06-12 10:48:40     
  • Android培训班(46)

    Android培训班(46)

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } A:link { so-language: zxx } --> 在目录res/values里,主要包括界面缺省的资源。比如从前面XML里看到下面这行:

    日期 2023-06-12 10:48:40     
  • Android培训班(54)虚拟机的历史

    Android培训班(54)虚拟机的历史

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } A:link { so-language: zxx } --> 虚拟机的英文名称是Virtual Machine,简称为VM。通过这个名称就可知虚拟机是假的,不真实的机器,当然是与

    日期 2023-06-12 10:48:40     
  • Android培训班(60)dex文件格式

    Android培训班(60)dex文件格式

    在android系统里,通过复杂的编译过程,会把java源代码生成dex文件,然后在虚拟机里就会加载这个文件运行。那么这个文件的格式是什么样的呢?为什么android不直接使用class文件,而采用这个不一样文件呢?其实它是针对嵌入式系统优化的结果,比如dex

    日期 2023-06-12 10:48:40     
  • Android培训班(70)Dex文件里类定义dvmDefineClass

    Android培训班(70)Dex文件里类定义dvmDefineClass

    接着来分析函数dvmDefineClass,它的代码如下: ClassObject*dvmDefineClass(DvmDex*pDvmDex, constchar*descriptor, Object*classLoader) { 这个函数输入的参数有三个,第一个pDvmDex参数是表示Dex文

    日期 2023-06-12 10:48:40     
  • Android培训班(66)dex文件打开流程

    Android培训班(66)dex文件打开流程

    下面来分析这个函数代码,如下: intdexZipPrepArchive(int fd, const char* debugFileName, ZipArchive*pArchive) { 这个函数输入文件句柄、文件名称、压缩文件对象。 MemMapping map; int err; map.addr

    日期 2023-06-12 10:48:40     
  • Android培训班(73)Dex文件里类定义dvmDefineClass

    Android培训班(73)Dex文件里类定义dvmDefineClass

    接着下来,来分析怎么样加载方法的代码,loadMethodFromDex函数的代码如下: staticvoidloadMethodFromDex(ClassObject*clazz, const DexMethod*pDexMethod, Method*meth) { 这个函数传入三个参数,

    日期 2023-06-12 10:48:40     
  • Android培训班(74)Dalvik虚拟机的FindClass函数

    Android培训班(74)Dalvik虚拟机的FindClass函数

    从前面我们知道,在虚拟机初始化后,运行Java代码的方法时,要先查找到类,也就是调用函数FindClass。接着后面分析怎么样从dex文件加载类数据到内存,现在开始对查找函数FindClass进行分析,就很好理解了,因为前面介绍加载类到内存的流程已经很清楚。函

    日期 2023-06-12 10:48:40     
  • Android培训班(77)Dalvik虚拟机的dvmInterpretStd函数

    Android培训班(77)Dalvik虚拟机的dvmInterpretStd函数

    通上面的学习,先初始化解释器的状态,然后调用解释器来执行方法。解释器又分为两种,一种是使用汇编写成性能优化的解释器,一种是使用标准C语言写成的解释器,可以很通用,理解起来也容易一些。接着下来,就先来理解C语言写成的解释器࿰

    日期 2023-06-12 10:48:40     
  • Android培训班(79)Dalvik虚拟机的垃圾回收1

    Android培训班(79)Dalvik虚拟机的垃圾回收1

    垃圾回收技术已经出现很久了,可以追溯到20世纪60年代,在LISP语言中就开始进行应用,而后的Smalltalk,java,c#等语言更是一步一步地将其推向新的高潮。它广受技术专家的推崇,并被高度的评价,被认为是提高软件质量和生产力的一个有效的银弹,是一个具有革命性技术。由

    日期 2023-06-12 10:48:40     
  • Android培训班(78)Dalvik虚拟机的寄存器操作

    Android培训班(78)Dalvik虚拟机的寄存器操作

    在前面已经说到Dalvik虚拟机是基于寄存器运行的虚拟机,这是与JAVA虚拟机有本质上的区别,因为它是基于栈运行的虚拟机,因而Dalvik虚拟机运行的速度更快,更高效。下面就来分析一段代码片段,看看是怎么样基于寄存器操

    日期 2023-06-12 10:48:40     
  • Android培训班(86)内核运行之前的引导程序

    Android培训班(86)内核运行之前的引导程序

    Android系统的内核要加载并运行,其实是经历了千辛万苦的,因为万事开头难。在一个系统刚开始时,并没有什么资源可以使用,CPU只认得0x00000000地址,并从那里运行第一条指令,并且这段代码有大小限制,不可以很大。因此需要开发一个引导程序放在那里运行&#

    日期 2023-06-12 10:48:40     
  • Android培训班(88)内核解压过程1

    Android培训班(88)内核解压过程1

    由上面的编译过程可知,内核一般是压缩后保存,并由引导程序加载到内存,然后CPU跳到相应的位置运行的,因为压缩后的代码是不能直接运行,所以必须存在一个解码的过程,而这个解码过程是怎么样执行呢?又是怎么样实现的呢?下面带着这两个问题来学习解压的过程。

    日期 2023-06-12 10:48:40     
  • Android培训班(90)内核解压过程3

    Android培训班(90)内核解压过程3

    下面这段代码,就是设置使用串口作为调试输入输出手段了,因为这种方式是最通用的,目前来说,所有嵌入式处理器都带有串口的,这个是基本配置,因此这种方式最通用,又不用添加什么其它的资源,使用起来非常方便,成为嵌入式软件、操作系统内核必选的

    日期 2023-06-12 10:48:40     
  • Android培训班(93)内核解压过程6

    Android培训班(93)内核解压过程6

    在了解ARM公司的产品架构之前,先来看看ARM公司的历史,这样对看懂内核的代码会很大帮助的,否则看到内核里有众多的宏定义,支持不同的结构指令选择,倒底是怎么回事,也是迷茫的,不解的。近来微软公司宣布Windows8正式支持ARM处理器,这是计算机

    日期 2023-06-12 10:48:40     
  • Android培训班(104)start_kernel函数1

    Android培训班(104)start_kernel函数1

    经历了跟体系结构密切相关的汇编代码之后,就可以进入C语言编写的结构无关的代码了。这个入口的函数是start_kernel函数,它主要更进一步地初始化系统相关的内容,以便系统进入一种服务状态,提供一种虚拟机的服务,提供各种API调用的服务。在start_kernel函数里,需

    日期 2023-06-12 10:48:40     
  • Android培训班(100)内核解压过程13

    Android培训班(100)内核解压过程13

    有了文件的格式,就可以按图索骥,也就是根据文件的格式来分析压缩数据了。但文件格式只是一种存储的格式,还需要算法才可以把数据解压出来,下面就来理解gzip的压缩算法。gzip使用deflate的压缩算法来进行压缩数据,这是一种无损的压缩算法,主要组合LZ77和Huffman的

    日期 2023-06-12 10:48:40     
  • Android培训班(110)start_kernel函数7

    Android培训班(110)start_kernel函数7

    parse_args("Bootingkernel", static_command_line, __start___param, __stop___param - __start___param, &unknown_bootoption); 这行代码主要对传入内核参数进行解释,如果不能识别的命令就调用

    日期 2023-06-12 10:48:40     
  • Android培训班(111)start_kernel函数8

    Android培训班(111)start_kernel函数8

    /* * HACK ALERT! This is early. We're enabling the console before * we've done PCI setups etc, and console_init() must be aware of * this. But we do want output early,

    日期 2023-06-12 10:48:40     
  • Android培训班(112)start_kernel函数9

    Android培训班(112)start_kernel函数9

    page_cgroup_init(); 这个函数是容器组的页面内存分配。 mem_init(); 这个函数是标记那些内存可以使用,并且告诉系统有多少内存可以使用,当然是除了内核使用的内存以外。 enable_debug_pagealloc(); 这个函数是设置内存分配是否需要输出调试信息,如果调

    日期 2023-06-12 10:48:40     
  • Android培训班(114)start_kernel函数11

    Android培训班(114)start_kernel函数11

    #ifdefCONFIG_PROC_FS proc_root_init(); #endif 这个函数是初始化系统进程文件系统,主要提供内核与用户进行交互的平台,方便用户实时查看进程的信息。 cgroup_init(); 这个函数是初始化进程控制组,主要用来为进程和其子程提供性能控制。比如限定这组进

    日期 2023-06-12 10:48:40     
  • Android培训班(115)内核最后初始化的函数rest_init

    Android培训班(115)内核最后初始化的函数rest_init

    在上面已经对基本的硬件、系统的结构初始化完成,接着下来系统要做的工作,就是创建进程,对进程进行管理,才可以让系统生生不息,处理各种各样的任务。虽然大部份的初始化工作已经完成,但还需要更进一步初始化,因此创建一个内核初始化线程来继续初始化。为了有一个干净

    日期 2023-06-12 10:48:40