zl程序教程

Android培训班(2)

  • Android培训班(3)

    Android培训班(3)

    从linux目录里可以看到如下图所示:   现在接着来介绍一级目录的大体功能: bin:这个目录主要用来放下载android代码的执行文件。 bionic: Android的libc库,包含了一些基础库,其存在的意义在于其可规避GPL,同时减少库的体积ÿ

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

    Android培训班(2)

    前面介绍了怎么样配置编译环境、编译代码,那么现在就开始把编译出来的目标文件写到开发板里运行了,以便确认整个系统是可以成功运行的。一个完整的Android系统至少由三部分组成,分别是bootloader、kernel、rootfs,这与典型的linux系统的结构是一致的。下面介绍如何烧写一个完整的

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

    Android培训班(4)

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

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

    Android培训班(11)

    #033  #034      mount("tmpfs", "/dev", "tmpfs", 0, "mode=0755"); #035      mkdir("/dev/pts", 0755); #036      mkdir("/dev/so

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

    Android培训班(14)

    #200  #201      for(;;) { #202          int nr, i, timeout = -1; 这段代码是进入死循环处理,以便这个init进程变成一个服务。   #203  #204          for (i = 0; i < fd_count; i+

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

    Android培训班(20)

    在android系统里,设计有一种系统叫做属性系统,它是用来做什么呢?这样设计有什么优势呢?其实这个属性系统主要是用来保存系统配置,或者用来交换不同进程的信息。这样的系统最大的优势是统一了系统配置的方式,统一了信息交换方式,通过共享内存的方式提高系统的性

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

    Android培训班(19)

    在init初始化进程里,设备初始化是怎么进行的呢?如果要了解这方面,就需要仔细分析下面的代码,如下: #001  int device_init(void) #002  { #003      suseconds_t t0, t1; #004      int fd; #

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

    Android培训班(21)

    前面学习了属性系统的初始化和加载,还有保存到属性文件等功能,下面来学习属性服务的方面,它主要用来提供一种服务的方式给java虚拟机上层使用,或者java应用程序使用。start_property_service函数的代码如下: #001  int start_property_s

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

    Android培训班(27)

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 初看这段代码时,感觉非常奇怪,没有看到任何打开文件的函数,也没有任何关闭文件的函数,就可以直接操作读取和写入。难道文件是可以自动打开的吗?从l

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

    Android培训班(30)

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 在init.rc文件里第一个初始化的服务是sh服务,如下: ## Daemon processes to be run by init. ## service consol

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

    Android培训班(31)

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 在init.rc文件里,可以看到下面的服务加载并运行: # adbd is controlled by the persist.service.adb.enable system pr

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

    Android培训班(33)

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

    日期 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培训班(40)

    Android培训班(40)

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

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

    Android培训班(44)

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> layout-land和layout-port目录主要用来保存应用程序的界面布局的文件。layout-land是android应用程序界面横屏显示的布局设置;layout-port是android应用

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

    Android培训班(50)

    public class Calculator extends Activity { 这行代码定义计算器类 Calculator是继承 Activity类。这是计算器主要管理类,从前面的XML资源里,就知道Calculator类是第一个运行的类,是运行代码的入口点。

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

    Android培训班(53)

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } A:link { so-language: zxx } --> Calculator.apk内容 为什么叫apk呢?其实apk是Android Package的缩写,意思就是android安装

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

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

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

    日期 2023-06-12 10:48:40     
  •  Android培训班(55)Dalvik虚拟机的目录结构

    Android培训班(55)Dalvik虚拟机的目录结构

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 为了挖掘Dalvik虚拟机的秘密,需要仔细分析Dalvik的每一个目录,每一个文件,才能把它的细节了然于胸。下面就开始吧!   Android.mk

    日期 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培训班(60)dex文件格式

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

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

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

    Android培训班(64)dex文件格式5

    string_ids_size和string_ids_off字段   这两个字段主要用来访问字符串资源,由于源程序里编译后,程序所需要使用到的字符串都保存在这个数据段里,以便解释执行这个dex文件代码时使用。比如调用库函数里的类名称描述,输出显示给用户查看的字符串。string_ids_size说明了

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

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

    从上面可知调用函数Dalvik_dalvik_system_DexFile_openDexFile来打开Dex文件,这个函数的源码如下: staticvoid Dalvik_dalvik_system_DexFile_openDexFile(const u4* args, JValue* pResult)

    日期 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培训班(71)Dex文件里类定义dvmDefineClass

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

    clazz= dvmLookupClass(descriptor, loader, true); if(clazz == NULL) { constDexClassDef*pClassDef; 这段代码是调用函数dvmLookupClass在已经加载的类里查找是否已经存在,如果已经存在,就直接使用

    日期 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培训班(80)Dalvik虚拟机的垃圾回收2

    Android培训班(80)Dalvik虚拟机的垃圾回收2

    二、Mark Sweep算法 标记-清除算法依赖于对所有存活对象进行一次全局遍历来确定哪此对象可以回收,遍历的过程从根出发,找到所有可到达对象,其它不可到达的对象就是垃圾对象,可被回收。正如其名称所暗示的那样,这个算法分为两大阶段:标记和清除。这种分步执行的

    日期 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培训班(96)内核解压过程9

    Android培训班(96)内核解压过程9

    前面已经把定位的数据通过加载LC0结构来加载到寄存器里,已经具备了定位的条件。那么内核进行重定位主要做些什么事情呢?要了解整个过程,当然要学习编译原理,因为进行重定位之后,主要是为了建立C语言的运行环境的需求。由于C语言是基于栈式的语言,又有全局变量,说明内存

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

    Android培训班(94)内核解压过程7

    通过上面的架构的学习,可以知道ARM体系总共有8个架构,每个架构有着不同的功能,因此下面的这个宏,就是选择第2个架构,因为第2个构架与后面的架构是有着很大的区别,比如第2个架构是24位地址线的,而后面架构全是32位的。并且支持的指令和寄存器也存在着差别

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