zl程序教程

Android培训班(4)

  • Android培训班(1)

    Android培训班(1)

      Android是基于Linux内核的软件平台和操作系统,是Google在2007年11月5日公布的手机操作系统平台,早期由Google开发,后期由开放手机联盟(Open Handset Alliance)开发。它采用了软件栈分层的架构,主要分为三部分。底层以Linux

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

    Android培训班(4)

    要想Android运行起来,不但要编译内核正确,还需要有正确地安装根文件系统,才可以运行起来。第一步,就是从模拟器里提取data目录的数据。也许你会问,为什么要从模拟器里提取呢?因为这样做是最方便的,不必要每个目录和文件,都要自己去建立。在

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

    Android培训班(5)

     在一块开发板里,当加电时,它是直接从CPU缺省的地址开始加载指令,然后进行运行。目前设计的嵌入式芯片,都带有一段小小的引导代码,但这段代码功能都是比较有限,只支持加载几百字节然后跳到相应内存运行,比如不带网络加载,不带RAM初始化

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

    Android培训班(9)

      android系统的初始化过程是从那里开始呢?它在加载linux基本内核后,就开始运行一个初始化进程,叫做init进程,那么怎么样知道它是加载init进程的呢?难道上天就注定的吗?呵呵,不是的,原来是从android加载linux内核时&#

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

    Android培训班(10)

    #022  #023      /* clear the umask */ #024      umask(0); 在上面这段代码里,调用函数umask来设置屏蔽位为0值。这样的意思是什么呢?是告诉系统做了那些工作呢?要了解这个,就得深入查看一下linux函数大全了,因为它

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

    Android培训班(13)

    #111  #112      if (qemu[0]) #113          import_kernel_cmdline(1); 这段代码是用来判断是否使用模拟器运行,如果时,就加载内核命令行参数。   #114  #115      if (!strcmp(bootmode,"factor

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

    Android培训班(34)

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

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

    Android培训班(36)

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

    日期 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培训班(56)Dalvik虚拟机的入口点

    Android培训班(56)Dalvik虚拟机的入口点

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 要分析Dalvik虚拟机的代码,到底从那里开始比较好呢?从事软件开发人员都知道,每个程序都有生命周期,都有出生点,也就是程序的进入位置。像C语言

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

    Android培训班(47)

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } A:link { so-language: zxx } --> 在资源的目录res/values-zh-rCN,从目录的名称就可以看到这个是保存跟中文相关的资源的目录。现在来仔细地查看这个目录的文件strin

    日期 2023-06-12 10:48:40     
  • Android培训班(58)Dalvik虚拟机的JNI方法和类表示

    Android培训班(58)Dalvik虚拟机的JNI方法和类表示

    从上一节里,我们学习到JNI的方法表示可知,GetStaticMethodID方法最后一个参数“([Ljava/lang/String;)V”。这个参数是一个字符串,但内容排列比较奇怪,其实它是一种对函数返回值和参数的编码。这种编码叫做JNI字段描述符(JavaNative Interf

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

    Android培训班(62)dex文件格式3

    SHA-1签名字段    从dex文件头里,已经看到前面有一个4字节的字段检验码了,那为什么又需要一个SHA-1签名字段呢? 这不是重复了吗?起初始看来,好像是有点重复,可是仔细考虑一下,这样设计,还是比较高明的。因为

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

    Android培训班(65)dex文件打开

    我们知道,要读取一个类代码,或读取类里的方法代码,都需要打开Dex文件,然后按前面介绍的格式去分析,并且读取出相应的内容,才可以给虚拟机进行解释执行。现在,我们就来学习和分析Dex文件的读取相关的代码。如下: /*

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

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

    当在虚拟机里加载Dex文件后,这个文件的数据已经读取到内存里,能不能马上使用呢?能不能使用里面的类呢?显然是不行的,因为那些加载到内存的数据,只是储存的格式,不具备运行的条件,因此需要调用方法defineClass来定义类,才可以运

    日期 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培训班(75)Dalvik虚拟机的GetStaticMethodID函数

    Android培训班(75)Dalvik虚拟机的GetStaticMethodID函数

    在Dalvik虚拟机启动时,曾经使用函数GetStaticMethodID获取静态函数main的ID,以便调用整个Java程序运行起来,那么这个函数怎么样从加载的类里查找到静态方法的ID呢?下面就来分析这个函数的代码,来回答这个问题

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

    Android培训班(76)Dalvik虚拟机的CallStaticVoidMethod函数

    在前面两个函数的介绍里,已经找到要执行方法的类,要执行的方法ID,那么接着下来要做的事情,就是执行方法,其实就是解释Java程序的字节码。那么Davlik虚拟机是怎么样执行方法的代码呢?又是怎么样解释这些字节码指令呢?因此ÿ

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

    Android培训班(81)Dalvik虚拟机的垃圾回收3

    下面就来先看看Dalvik虚拟机整个标记和清除中使用到那些函数,在文件alloc/MarkSweep.h里有函数如下: 1)调用函数dvmHeapBeginMarkStep来创建位图,并从对象位图里拷贝一份位图出来,以便后面对这个位图进行标记。 2)调用函数dvmHea

    日期 2023-06-12 10:48:40     
  • Android培训班(83)Dalvik虚拟机的初始化

    Android培训班(83)Dalvik虚拟机的初始化

    现在开始学习虚拟机的初始化过程,先从dvmStartup函数开始,这个函数实现所有开始虚拟机的准备工作。 dvmAllocTrackerStartup函数初始化跟踪显示系统,跟踪系统主要用生成调试系统的数据包。 dvmGcStartup函数是用来初始化垃圾回收器。 dvmThreadStartup函数是初始化

    日期 2023-06-12 10:48:40     
  • Android培训班(85)升级到4.0版本

    Android培训班(85)升级到4.0版本

    ICS总算发布了,从2.3.7升级到4.0.3版本。下面就是升级的命令: $ mkdir ~/bin $ PATH=~/bin:$PATH 这里创建bin目录,以便放置下载软件repo. $ mkdir 工作目录 $ cd 工作目录这里创建工作目录,用来保存下载源码。

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

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

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

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

    Android培训班(92)内核解压过程5

    在前面包含头文件,定义一些必要的宏之后,就到了实际运行代码的开始了,这里就是内核解压内核映象文件的开始位置了,也就是代码段的开始位置了。前面都没有看到实际的代码,因此会碰到很多新的知识点,新的拦路虎的,这更加需要花费时间和耐心了。现在就开始吧!

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

    Android培训班(109)start_kernel函数6

    setup_command_line(command_line) 这个函数主要作用是保存命令行,以便后面可以使用。 unwind_setup() 这个函数主要作用是对调用栈的调试功能进一步初始化。在ARM系统里是空函数。 setup_per_cpu_areas() 这个函数主要作用是设置SMP体系每个CPU使用的内存

    日期 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培训班(112)start_kernel函数9

    Android培训班(112)start_kernel函数9

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

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