Android培训班(5)
Android培训班(3)
从linux目录里可以看到如下图所示: 现在接着来介绍一级目录的大体功能: bin:这个目录主要用来放下载android代码的执行文件。 bionic: Android的libc库,包含了一些基础库,其存在的意义在于其可规避GPL,同时减少库的体积ÿ
日期 2023-06-12 10:48:40Android培训班(5)
在一块开发板里,当加电时,它是直接从CPU缺省的地址开始加载指令,然后进行运行。目前设计的嵌入式芯片,都带有一段小小的引导代码,但这段代码功能都是比较有限,只支持加载几百字节然后跳到相应内存运行,比如不带网络加载,不带RAM初始化
日期 2023-06-12 10:48:40Android培训班(6)
网络文件系统(NFS,Network File System)是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制,通过对网络文件系统的支持,用户可以在本地系统上像操作本地分区一样来对远程主机的共享分区(目录)进行操
日期 2023-06-12 10:48:40Android培训班(10)
#022 #023 /* clear the umask */ #024 umask(0); 在上面这段代码里,调用函数umask来设置屏蔽位为0值。这样的意思是什么呢?是告诉系统做了那些工作呢?要了解这个,就得深入查看一下linux函数大全了,因为它
日期 2023-06-12 10:48:40Android培训班(15)
在主函数main里调用这个函数来做什么呢?而这个函数是怎么样实现的呢?下面就来了解这个函数的功能与产现,具代码如下: #001 void open_devnull_stdio(void) #002 { #003 int fd; #004 static const
日期 2023-06-12 10:48:40Android培训班(18)
通上面的函数就可以把服务和事件触发的命令添加队列里。其实是在文件parser.c头部,就声明了下面三个链表,如下: static list_declare(service_list); static list_declare(action_list); static list_declare(ac
日期 2023-06-12 10:48:40Android培训班(20)
在android系统里,设计有一种系统叫做属性系统,它是用来做什么呢?这样设计有什么优势呢?其实这个属性系统主要是用来保存系统配置,或者用来交换不同进程的信息。这样的系统最大的优势是统一了系统配置的方式,统一了信息交换方式,通过共享内存的方式提高系统的性
日期 2023-06-12 10:48:40Android培训班(23)
通过上面的分析,可以知道LOGO图片是RLE编码的565格式的图片,也就是采用行程编码的方式,颜色位数采用16位的方式(红色5位,绿色6位,蓝色5位)。因此,所有其它图片的格式都需要转换为这种标准的格式,初始化进程才可以显示出
日期 2023-06-12 10:48:40Android培训班(27)
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 初看这段代码时,感觉非常奇怪,没有看到任何打开文件的函数,也没有任何关闭文件的函数,就可以直接操作读取和写入。难道文件是可以自动打开的吗?从l
日期 2023-06-12 10:48:40Android培训班(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:40Android培训班(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:40Android培训班(41)
在这一节,我先从一个简单的计算器入手,带着大家来分析android系统应用程序的结构、实现方式、源码的组织,以及代码修改后的效果显示。通过学习系统应用程序,可以了解android的应用程序,也可以学到开发应用程序的基本知识,也可以深入理解android系统的应用程序的
日期 2023-06-12 10:48:40Android培训班(48)
在android的计算器应用程序里,源程序主要放在目录src目录下面,然后在这个目录根据包的名称进行子目录排列,由于这个程序在XML里包名称如下: package="com.android.calculator2" 因此
日期 2023-06-12 10:48:40Android培训班(51)
接着来修改一下资源,看看是否可以显示出来?通过如下步骤进处: 1)找到目录Android-2.0/packages/apps/Calculator/res/values-zh-rCH 2)打开资源文件strings.xml。 3
日期 2023-06-12 10:48:40Android培训班(45)
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } A:link { so-language: zxx } --> 帧布局(FrameLayout)方式是每次显示时都把屏幕当作一个整体的显示屏,并且是从左上角开始画起。不过这种方式有
日期 2023-06-12 10:48:40Android培训班(46)
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } A:link { so-language: zxx } --> 在目录res/values里,主要包括界面缺省的资源。比如从前面XML里看到下面这行:
日期 2023-06-12 10:48:40Android培训班(57)Dalvik虚拟机运行ZygoteInit类
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 从上一节可以知道Dalvik虚拟机入口点和创建虚拟机的函数,这一节继续分析运行时类调用虚拟机的代码片段,需要搞清楚怎么样运行JAVA的ZygoteInit类,Dalvik虚
日期 2023-06-12 10:48:40Android培训班(61)dex文件格式2
魔数字段,主要就是Dex文件的标识符,它占用4个字节,在目前的源码里是 “dex\n”,它的作用是用来区别其它文件的,比如有一个文件也叫Dex结尾的文件,就可以认为它是Davlik虚拟机运行的文件吗?当然不行,因此这四个字节,就起到
日期 2023-06-12 10:48:40Android培训班(68)dex文件打开流程
在上面的函数里,提到使用dvmJarFileOpen函数找到classes.dex文件,并加载到内存里,然后提供后面的函数使用。现在就来分析这个函数的代码,如下: intdvmJarFileOpen(const char* fileName, const char* odexOutpu
日期 2023-06-12 10:48:40Android培训班(79)Dalvik虚拟机的垃圾回收1
垃圾回收技术已经出现很久了,可以追溯到20世纪60年代,在LISP语言中就开始进行应用,而后的Smalltalk,java,c#等语言更是一步一步地将其推向新的高潮。它广受技术专家的推崇,并被高度的评价,被认为是提高软件质量和生产力的一个有效的银弹,是一个具有革命性技术。由
日期 2023-06-12 10:48:40Android培训班(84)Dalvik虚拟机的JNI测试函数
在Dalvik虚拟机里,提供了一些JNI的调用测试函数,以便确认JNI的机制是否可以运行,JNI调用效率是否达到设计的目标,它是通过在registerSystemNatives函数初始化,然后调用jniRegisterSystemMethods函数来设置JNI函数。 JNI的测试函
日期 2023-06-12 10:48:40Android培训班(87)ARM内核生成过程
在分析内核运行之前,先要了解内核是怎么样编译出来的,以便对内核的构造有一个详细的了解,在头脑里形成一个清晰的印象。随着技术的发展,对内核进行各种各样的处理,以便在空间上减到最小,在时间上也减到最小,在成本方便也减到最小。在成本方面,更加关键了。比
日期 2023-06-12 10:48:40Android培训班(93)内核解压过程6
在了解ARM公司的产品架构之前,先来看看ARM公司的历史,这样对看懂内核的代码会很大帮助的,否则看到内核里有众多的宏定义,支持不同的结构指令选择,倒底是怎么回事,也是迷茫的,不解的。近来微软公司宣布Windows8正式支持ARM处理器,这是计算机
日期 2023-06-12 10:48:40Android培训班(97)内核解压过程10
经过上面打开MMU代码之后,就进入了另一个主要环节,就是把压缩的内核代码解压出来,变换回原来可执行代码的模样,这样才可以让CPU理解并执行相应的指令。由于加载压缩的内核就占用了一定的内存空间,如果这个压缩的内核比较大,而物理内存比较小,那么解压后的内核就会把未
日期 2023-06-12 10:48:40Android培训班(99)内核解压过程12
在函数decompress_kernel里看到调用gunzip函数来解压内核代码,你也许比较好奇,这个gunzip函数里究竟是怎么样把内核代码解压出来的呢?为了深入地理解解压的代码,就得学习gzip文件格式,压缩的原理,才会理解其中的奥秘。现在就先看看gzip的文件格式
日期 2023-06-12 10:48:40Android培训班(104)start_kernel函数1
经历了跟体系结构密切相关的汇编代码之后,就可以进入C语言编写的结构无关的代码了。这个入口的函数是start_kernel函数,它主要更进一步地初始化系统相关的内容,以便系统进入一种服务状态,提供一种虚拟机的服务,提供各种API调用的服务。在start_kernel函数里,需
日期 2023-06-12 10:48:40Android培训班(100)内核解压过程13
有了文件的格式,就可以按图索骥,也就是根据文件的格式来分析压缩数据了。但文件格式只是一种存储的格式,还需要算法才可以把数据解压出来,下面就来理解gzip的压缩算法。gzip使用deflate的压缩算法来进行压缩数据,这是一种无损的压缩算法,主要组合LZ77和Huffman的
日期 2023-06-12 10:48:40Android培训班(101)内核入口汇编1
从上面已经看到movpc,r4语句,就知道把解压后内核的执行地址r4给了pc程序计数器,意味着解压的内核已经把运行控制权交给解压后的内核代码进行运行了。这时内核已经在正确的物理地址上运行,但是它还是未长大的孩子,还有很多东西都没有准备好,比如内存管理、中断管理等等。同时内核还需要再次映射
日期 2023-06-12 10:48:40Android培训班(115)内核最后初始化的函数rest_init
在上面已经对基本的硬件、系统的结构初始化完成,接着下来系统要做的工作,就是创建进程,对进程进行管理,才可以让系统生生不息,处理各种各样的任务。虽然大部份的初始化工作已经完成,但还需要更进一步初始化,因此创建一个内核初始化线程来继续初始化。为了有一个干净
日期 2023-06-12 10:48:40