![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
android
文章平均质量分 75
程序员入门进阶
职场老鸟,互联网十年从业生涯,分享 [Java,Python,安卓,AI,爬虫] 技术文章,学习资料, 热点趣闻等。
展开
-
Android深入系统完全讲解(43)
GOP 中的 I 帧又分为普通 I 帧和 IDR 帧,IDR 帧就是 GOP 的第一个 I 帧,这样区分是为了方。在视频中,有三类帧,分别是 I 帧,P 帧和 B 帧 ,其中 I 帧就是画面帧。帧之间的 B 帧和 P 帧数),另一个数字为 I 帧和 P 帧之间的间隔距离(即 B 帧数)。GOP 内 I 帧解码不依赖任何的其它帧,P 帧解码则依赖前面的 I 帧或 P 帧,B 帧解码依赖前。同时,由于 P、B 帧的复杂度大于 I 帧,所以过多的 P、 B 帧会。的称之为 H.26L 的项目的开发。原创 2023-01-27 09:15:56 · 391 阅读 · 0 评论 -
Android深入系统完全讲解(42)
arm-linux-androideabi-addr2line 分析异常地址arm-linux-androideabi-ar 输出静态库的方法,可以拆包打包。arm-linux-androideabi-ldxxx 链接器,有不同的链接器,实现了不一样的链接规则,arm 的默。要去看其他线程的堆栈,以及 log 信息,将输出的 log 信息 和 自己的分析进行验证,进一。在入门之后,如果你的工作,平时就是需要做 NDK 开发,经常跟它打交道,那么以下的一。除此之外,我们在分析问题时,很快,就到了收尾章节。原创 2023-01-27 09:15:09 · 661 阅读 · 0 评论 -
Android深入系统完全讲解(41)
里我在模拟器演示,模拟器用了 x86 ,于是修改了 build.gradle 中的 abiFilters “armeabi-v7a” 为 abiFilters “x86”) Cause: null pointer dereference 报出了错误信息,空指针引用 eax。异常类型 SEGV_MAPERR ,异常地址为 0,在线程 2346 ,报名为 gg.com.hellojni ,进程。我们丢个空指针,让应用运行异常,然后打开 Logcat,选中 Error 类别,可以看到如下一。于是我们就要想办法,原创 2023-01-26 10:17:51 · 915 阅读 · 0 评论 -
Android深入系统完全讲解(40)
/拿到 add 方法的 id,后面的为签名信息,括号内代表两个参数,都是 I (int)返回也为 I(int)的方。经过十来节的学习,我们走过了 NDK 、 CMake 配置,编译 so 、 ELF(可执行文件),个,在 C 里面,找到 Java 中的两个变量,然后再调用 Java 的一个方法,让返回两数的相。我们已经学会了 Java 调用 C 的方式,下一步我们就学习如何从 C 调用到 Java。我们这一节演示一个内容,如何在 C 代码中调用 Java 的方法,以及属性值。int n = 10;原创 2023-01-26 10:16:34 · 606 阅读 · 0 评论 -
Android深入系统完全讲解(39)
先回过头,看看第七小节,专门讲解了一个可执行文件怎么调用so库的方法的。 Java 就顺着这来理解。所以,第七小节是本质内容,是 JNI 中的实现的底层逻辑,具体研究,可以跟踪System.loadLibrary 方法 ,一探究竟。12. 添加一个新的方法12.1 MainActivity.java 文件加一行public native String myStringFromJNI(); 12.2 自动化生成 .h 文件这样子就生成了对应的 .h 。如果你想手动处理,可以参考 javac 命令。12.原创 2023-01-25 11:42:57 · 151 阅读 · 0 评论 -
Android深入系统完全讲解(38)
9.6 配置 native 方法9.6.1 CMakeLists.txt 文件中内容,配置生成一个 so 库add_library( # Sets the name of the library. native-lib # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). src/main/cpp/native-lib.cpp ) 9.6.2 build.gradle原创 2023-01-25 11:39:32 · 192 阅读 · 0 评论 -
Android 深入系统完全讲解(37)
D:\android-ndk-r19c\hello-exe\obj\local\armeabi-v7a\objs\hello-exe hello-exe.o 是上面 1 编。[armeabi-v7a] install : hello-exe => libs/armeabi-v7a/hello-exe 去掉调试信息,减小大小。D:\android-ndk-r19c\hello-exe\obj\local\armeabi-v7a hello-exe 这个是有调试信息的。前几节用手把手的方式,详尽的讲。原创 2023-01-24 08:47:23 · 2153 阅读 · 0 评论 -
Android 深入系统完全讲解(36)
D:\android-ndk-r19c\hello-exe\obj\local\armeabi-v7a\objs\hello-exe hello-exe.o 是上面 1 编。[armeabi-v7a] install : hello-exe => libs/armeabi-v7a/hello-exe 去掉调试信息,减小大小。D:\android-ndk-r19c\hello-exe\obj\local\armeabi-v7a hello-exe 这个是有调试信息的。前几节用手把手的方式,详尽的讲。原创 2023-01-24 08:44:34 · 1409 阅读 · 0 评论 -
安卓深入理解系统详解(35)
编译 && 运行我们把 android-ndk-r19c 放置到 D:\android-ndk-r19c 这个位置,然后把 hello-exe 目录放到这里。然后我们 CMD 打开命令行窗口,切换到D:\android-ndk-r19c\hello-exe\jni,使用…\ndk-build.cmd-B V=1 执行,会看到如下内容:Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version andro原创 2023-01-23 23:10:25 · 220 阅读 · 0 评论 -
安卓深入系统完全讲解(34)
什么是 NDK Android NDK 是为了 Android 应用开发人员去嵌入用 C 或者 C++ 这种编译成本地机器码到自己的应用开发包里面,提供的一套开发环境。开发者可以使用这个开发包,来编译可在 Android 运行的库或者可执行文件,也是可以跑本地应用的,但一般不这么用,因为对于开发者来说,系统服务基本都是 Java 语言实现的,用 C 或者 C++ 调用,不是常规开发思路。NDK 中提供移植好的,可在 Android 执行的封装库,并且做好了编译工具链,配置方法,方便开发者快速移植,实现功能。原创 2023-01-23 23:08:06 · 189 阅读 · 0 评论 -
Android 深入系统完全讲解(33)
官网 https://developer.android.google.cn/ndk/guides。这里插入我之前创作的 NDK 教程,大家可以学习,不懂的直接联系我 code_gg_boy。相信每个加入进来的朋友,都希望从文章中有所收获。条学习的线路,使用直接,没有太多官方语言的描述,给大家一个 NDK 的学习方向。原创 2023-01-22 19:24:02 · 1167 阅读 · 0 评论 -
Android 深入系统完全讲解(32)
我之前推荐过 SDL2.0,但是这个库有个问题,就是它的音频使用的是 Java 端,通过反射回。于是我更换了实现,把 SDL2.0 里面的 audio 播放,用 OpenSL ES 进行替换了。然后,介绍您需要了解的 OpenSL ES。MediaCodec 的作用就是完成重新编码的过程,从一个格式解成自己可以识别的流,然后输。的 Android 实现相关信息,其中首先会重点介绍此实现与参考规范之间的差异,然后介绍。在前面课题里面,完成了太多的内容输出,大家也按着操作一步步下来,掌握了原理,逻辑,原创 2023-01-22 19:22:32 · 1761 阅读 · 0 评论 -
Android 深入系统完全讲解(31)
音频采集用 AudioRecord 录音,然后实时的写入数据就可以了,原始数据格式 PCM。再继续讲的时候,我来说下当前我们学习的知识,学会了如何显示图像,多种方式,以及视。频数据来源,视频解码,采集画面,以及音频。Log.d(TAG, “音频录制已经开启”);Log.d(TAG, “无效参数”);设置后开始后,就可以在循环体去写入了。原创 2023-01-21 09:17:11 · 1629 阅读 · 0 评论 -
Android 深入系统完全讲解(30)
(Quantization Parameter,QP),它和码率并没有固定的关系,而是取决于图像内容。MediaCodec 流控相关的接口并不多,一是配置时设置目标码率和码率控制模式,二是动态。视频编码的限制条件最初是解码器的能力,码率太高就会无法解码,后来随着 codec 的发。无论是要发送的 TCP 数据包,还是要编码的图像,都可能出现“尖峰”,也就是短时间内出。帧数据量特别大,但仍要把码率控制在原来的水平,那势必要损失更多的信息,因此图像失。为什么要控制,因为条件有限!原创 2023-01-21 09:16:21 · 1486 阅读 · 0 评论 -
Android 深入系统完全讲解(29)
基本的多媒体支持基础架构的一部分通常和 MediaExtractor , MediaSync , MediaMuxer , MediaCrypto , MediaDrm , Image , Surface , and AudioTrack 一起使用。Surface 使用的是本地的视频缓冲区,这个缓冲区不映射或拷贝到 ByteBuffers。bufferInfo:当前 sample(样本)相关的 buffer 的信息,不可为 null。通常在使用 Surface 的时候,无法访问原始的视频数据,但是你可。原创 2023-01-20 13:14:57 · 1901 阅读 · 0 评论 -
Android 深入系统完全讲解(28)
当我们知道这个,我们再来看个东西,MediaExtractor ,这个是媒体的提取类。我们的视频有两部分组成,音频和视频,这两个是在不同的轨道上,默认是一个视频轨道,但是有时候会有多个音轨,比如选择器里面的国语,港语这类选择,实际。/后面的会变化,代表具体的格式,这个格式是解析轨道的时候需要的。Log.e(TAG, "轨道数量 = “+count);先把这个理顺了,这些内容打通,对于学习音视频非常有用。原创 2023-01-20 13:12:36 · 1960 阅读 · 0 评论 -
Android 深入系统完全讲解(27)
这里就能够明显的看到,我们在思考问题的时候,一定是利用核心逻辑, 输入–控制–输出。而音视频中一样,视频格式,音频格式,mp4,wav,都是这里的文件头,表明了后续的文。讲完了这块,我们来说下相机相关的,再说之前一定记得,先要有框架思维,这点一直是我。相机是什么,硬件采集数据上来,解析完成,上层绘制,在绘制的时候,同步可以做特效,然后在学习代码的时候,一定要注意,从已知接口,相关类去深入,利用调试,网络的。算法,文件内容代表数据。//------ Surface 预览 ------- @Override。原创 2023-01-19 10:23:11 · 1597 阅读 · 0 评论 -
Android 深入系统完全讲解(26)
都不直接用这个,都是自己封装一个,像市面的 vlc-android 开源项目,以及 ijkplayer ,都。在真正的底层开发人员,主要使用的是 FFmpeg,同时配合一个 surface 进行绘制,这里面。在播放音乐的接口里面,还有一个 MediaPlayer ,这个是偏上层的一个类,可以播放的格式。在游戏中,经常会出现子弹,爆炸,这类声音,这类在系统里面都是用 SoundPool 来处理。的,这个可以缓存一部分,这类声音的特点就是频繁出现,但是短暂急促,用缓存机制处理。原创 2023-01-19 10:21:49 · 1470 阅读 · 0 评论 -
Android 深入系统完全讲解(25)
择 ENCODING_PCM_16BIT 和 ENCODING_PCM_8BIT PCM 代表的是脉冲编码调制,它实际。//指定采样率 (MediaRecoder 的采样率通常是 8000Hz AAC 的通常是 44100Hz。 AudioManager.STREAM_SYSTEM_ENFORCED:在某些国家实施的系统声音的音频流。创建 AudioTrack://根据采样率,采样精度,单双声道来得到 frame 的大小。 AudioManager.STREAM_SYSTEM:用于系统声音的音频流。原创 2023-01-18 09:56:23 · 630 阅读 · 0 评论 -
Android 深入系统完全讲解(24)
/ 头部字段的大小(不包括前面 4 字节的标识符 RIFF 以及 fileLength 本身的 4 字节)//44100 是目前的标准,但是某些设备仍然支持 22050,16000,11025。所有的文件,都有一个叫做格式的东西存在,MP3,WAV,而处理这个格式的东西,就是解。将数据存储起来,当前的格式默认是 PCM,也就是麦克输入的原始格式,但是存储的时候。// 填入参数,比特率等等。2 采样率,这个代表采集的数据大小,采样率越高,质量越好,存储越大。// 合成的 pcm 文件的数据,写到目标文件。原创 2023-01-18 09:54:09 · 407 阅读 · 0 评论 -
Android 深入系统完全讲解(23)
使用 OpenGLES 可以直接用 GPU 进行运算,专门来处理图像,会加速整体的性能,这是它存。这里推荐一个库 GPUImage ,是一个安卓的图片处理特效库,当我们后面学会了解析视频,在实际的使用过程中,会遇见所谓的 OpenGL 编程语言,牵扯到顶点渲染和着色渲染,这块。两种渲染方式,持续渲染是在需要高速显示的情况下才需要,默认直接选择只有脏了才需要。属于专门的 OpenGLES 的知识,在做 GPU 特效的时候,可以去研究。能完善的 2D/3D 图形库接口 API,是 OpenGL 的一个子集。原创 2023-01-17 17:16:35 · 557 阅读 · 0 评论 -
Android 深入系统完全讲解(22)
SurfaceFlinger 和 WindowManagerSurfaceFlinger 接受缓冲区,对它们进行合成,然后发送到屏幕。WindowManager 为SurfaceFlinger 提供缓冲区和窗口元数据,而 SurfaceFlinger 可使用这些信息将 Surface 合成到屏幕。SurfaceFlinger 可通过两种方式接受缓冲区:通过 BufferQueue 和 SurfaceControl,或通过。原创 2023-01-17 17:09:53 · 583 阅读 · 0 评论 -
Android 深入系统完全讲解(20)
/ Much of this code is from GLSurfaceView in the Google API Demos. // I encourage those interested to look there for documentation. //创建一个 EGL 实例。我们看下这个就晓得了,在分析的时候,一定是要去。在掌握的时候,一定记住一个关键因素,输入,控制,输出。//获取 holder。官网链接:http://www.libsdl.org///创建新的 surface。原创 2023-01-16 13:52:12 · 413 阅读 · 0 评论 -
Android 深入系统完全讲解(19)
我们这里记住的点就是:我们 View 绘制是在一个 canvas 里面,而这个里面是一个 surface,然后在 surfaceCreated 里面,完成创建线程,随后在线程里面,获取 canvas,绘制,然后释。//解锁画布,提交画好的图像。原因很简单,这个主线程(UI)线程,在游戏引擎中,游戏频繁更新,绘制很容易耗时,所。在游戏引擎里面,这里就是自己的一个线程,调入游戏引擎中去,完成游戏引擎的核心入口。这里分享的调试技巧,通过堆栈,能够非常高效的定位到代码,找到流程,参考这个很快就。原创 2023-01-15 16:30:20 · 351 阅读 · 0 评论 -
Android 深入系统完全讲解(18)
关键代码出现,使用命令向系统广播出去一个 action=ACTION_REQUEST 的广播,这时我们的。那么学习 su 的代码,就是非常有意义的事情。这里的逻辑是 su 本身是 root 可执行,并且还有一个 s 位,也就是替换成需要运行的程序时。查看这个可以了解编译结果是动态库,静态库,还是 apk 还是 bin 文件。这里是当我们授权过的时候,会从这里进行读取,直接判断之前授权的值。这个我们可以看到是编译一个可执行文件 su。的,如何调用授权 Apk,完成授权操作。原创 2023-01-15 16:25:26 · 668 阅读 · 0 评论 -
Android 深入系统完全讲解(17)
Linux 的 SElinux 主要对的是文件和进程,而 Android 里面多了属性和 APP(因为 APP 分系统,media 等等),于是 Android 在 Linux 的基础上添加了一些方法来完成 SElinux 的机制。上层使用配置对应的 AndroidManifest.xml ,然后获取对应的 gid,通过签名获取对应的 uid,我们现在来看 plat_seapp_contexts ,这个是指示上层的进程的上下文的对应关系。这个是非常重要的,对上层 APP 配置的上下文。原创 2023-01-14 21:30:18 · 805 阅读 · 0 评论 -
Android 深入系统完全讲解(16)
打开对应的 socket 通信,发送消息,最终还是 init 的 property_service.cpp 在处理。启动服务,监听 set 操作,在处理的时候会调用 check_mac 进行 selinux 权限的检测。这个是我们在传递参数的时候要注意的,我之前遇见过 KEY 超过了 32,导致重启的。那么我们看看具体的操作路径。关键点,创建了一个目录,这个目录就是我们属性后续会存在的地方。的属性更改这类,代码为:这里就是在加载我们系统中的 prop 值。命令的看完了,我们看下系统方法,底层的 C 实现,原创 2023-01-14 21:24:44 · 554 阅读 · 0 评论 -
Android 深入系统完全讲解(15)
讲到这里再简单说下系统 db,setting.db 的权限限制策略,这里主要是 system, secure, global,系统相关的是可以操作 system 和 secure,一般我们使用的是 global,但是因为这个都能访问,所以系统开发的时候都是在 system 这里的,也是提供给系统相关的 APP,服务调用的。从这里主要找到具体对应的变量是什么,依据这个就可以定位到系统的代码,这里关键点就是要找到相关代码的定义,从而找到 Java 中用的值,依据这个定义代码,找相关使用的地方,分析流程用的。原创 2023-01-13 14:12:51 · 1401 阅读 · 0 评论 -
Android 深入系统完全讲解(14)
bp 也是这个目的,而它是 Blueprint 框架解析的,Blueprint 是生成,解析 bp 文件,是 Soong的一部分,而 Soong 是专门编译 Android 系统设计的,最终会转化成 Ninja,我们可以打开生成的 Ninja,去看里面的内容,会是一堆命令,这个就是对应的编译命令。其实要理解这个,需要阅的书籍是编译原理,建议去找一本看看,这样子就知道为什么有这么多参数,其实就是编译,汇编,链接,而每个过程都有一些参数指定,所以就会出现很多配置,编译成什么目标。4 mk bp 文件学习技巧。原创 2023-01-13 14:05:07 · 444 阅读 · 0 评论 -
Android 深入系统完全讲解(13)
Android 的编译使用的 Makefile,推荐大家使用《GNU make 中文手册》,这本书有电子版,非常方便,主要是要理解清楚 Makefile 的规则,编译策略,可以通过写简单的编译机制,熟悉下即可。Makefile 主要就是目标,依赖,然后就是编译命令,因为牵扯很多内置方法,所以掌握的时候会麻烦一些,这里建议学习下,把推荐的书籍看完,这个就可以搞定。这个编译机制了解原理后,在工作中就是快速定位,找到问题点解决,这个在之前给公司优化过编译机制,梳理出来客制化资源的原理,以及移植一套编译机制。原创 2023-01-12 09:15:46 · 238 阅读 · 0 评论 -
Android 深入系统完全讲解(12)
如果说我自己学习整个系统,直到底层驱动的方法,我想说的就是我常用的就是跟踪震动这个模块,而为什么是这个,主要是简单,但是又是从上到下都具备,对于学习系统框架是最好的路径。会检索到这个/frameworks/base/services/core/jni/onload.cpp,这个是在虚拟机启动的时候,初。这块定位的路线在 kernel 里面。简单说下就是找到这个段里面的方法,依次执行,完成驱动的初始化,系统层是通过 HAL。动后会找到这个段,这个段里面全部是驱动的初始化方法,可以直接遍历,执行系统的驱动。原创 2023-01-12 09:10:13 · 297 阅读 · 0 评论 -
Android 深入系统完全讲解(11)
狭义的 framework,主要讲的就是 SystemServer 里面的所有服务,这些是在 framework,读取传递过来的信息,然后解析,执行,具体的话就是 BR_TRANSACTION,BR_REPLY,大家。系统需要学习,操作系统相关的知识,HIDL,AIDL,权限,Rec 模块,Input,ANR,需要掌。而 Binder 的流程是,查询服务对应的进程号,线程号,然后调用对应的方法号,完成后返。于是这个书里面就是解决这些问题,主要是系统流程,调试技巧,还有一些系统工具的分析,原创 2023-01-11 12:59:51 · 476 阅读 · 0 评论 -
Android 深入系统完全讲解(10)
从这里就能定位到当前的界面,然后这个就提供了一些信息,比如能够让我们很快的找到一些系统控件,比如 StatusBar,如果我们依据这个关键字去找,会找的非常累,因为这个子串不特殊,但是我们看到一个 AssistPreviewPanel 很特殊,于是用这个去找到方法是最好的方式,我们代码中搜索下。这一节我们来说说如何定位界面,这个也是一个神器,今天来讲讲 hierarchyviewer.bat 的用法,AS 也有新的工具,但是我还是喜欢这个工具,于是我们开始讲这个。原创 2023-01-11 12:51:18 · 577 阅读 · 0 评论 -
Android 深入系统完全讲解(9)
有兴趣的可以去看看。会转化为这个就是 jni 编写中,需要配置的对应表,主要完成 java 和 c 语言函数对应,参数和返回值对应的关系,给了这些,虚拟机才会在 java 和 c 之间建立起来关系,知道哪个 java 函数调用的真正正确的 c 语言函数,同时 c 也是可以反向调用 java 的,更多可以百度 jni 的编写。我们看到有两个参数:第一个为 Classloader,这个为我们的类加载器,我们这里的参数为VMStack.getCallingClassLoader(),于是我们看下这段代码。原创 2023-01-10 12:00:08 · 742 阅读 · 0 评论 -
Android 深入系统完全讲解(8)
我们按正常的逻辑是 Smali 文件转化成 java 去看,先看个大概,然后如果是运算之类的,我们有时候需要调试,不断验证变量值。那么调试就显得很重要。PC 上的反编译调试工具用 OD 和 IDA(这个也可以调试 Android ),我们这一节想说说 AndroidStudio 调试 Smali 的 方法。下载 smalidea-0.05.zip ,独立的 jar 包是反编译和打包工具,自己想研究可以下载看看,这里我们不用。拿到我们需要调试的 Apk ,选择 Apk,右键菜单,使用 APKDB 编译。原创 2023-01-10 11:48:18 · 303 阅读 · 0 评论 -
Android 深入系统完全讲解(7)
系统在启动过程中解析 AndroidMainfest.xml,将应用的信息存储下来,随后根据用户的操作,或者系统的广播触发,启动对应的应用。我们在各个应用市场看到的,大多是第三方应用,也就是安装在 data 区域的应用,它们可以卸载,并且权限也受到一些限制,比如不能直接设置时间日期,需要调用到系统应用设置里面再进行操作。而此时我没有编译代码,也没有加载代码(用的官方的),就这么幸运的知道原来调试只依赖包和对应的进程,那时候开始系统代码学习就加速了,有了长足的进步,这也是我一般不写流程的原因。原创 2023-01-09 13:09:30 · 354 阅读 · 0 评论 -
Android 深入系统完全讲解(6)
ActivityThread.java 我们应用的主线程方法在这里,一般跟外部处理就是通过这里而一般通信用的这个 ApplicationThread.java 调用 ActivityManagerService 的 attachApplication()方法,把这个跨进程通信 Binder 传递过去,随后的消息都是从这里传过来,进行处理。这里就是启动 Home 的地方,而这一篇章就说下 Activity 的流程,希望能够掌握到应用启动的流程,而具体的创建进程的地方,这里想贴一下。原创 2023-01-09 13:03:07 · 112 阅读 · 0 评论 -
Android 深入系统完全讲解(4)
每个服务会注册一个 SystemReady 的方法,在服务启动完成后触发后续的动作,而 AMS 完成的时候,会启动关键的一个界面,就是 SystemUI,这里方法是 startSystemUi(context, windowManagerF);SystemServer 进程非常关键了,我们上层的服务都是在这里以线程的形式存在,比如 AMS,PMS,WindowManagerService,壁纸服务,而关于调试这个服务进程,我们随后就会讲到。于是服务启动的时候,可以在这里设置断点,分析启动代码。原创 2023-01-08 10:36:02 · 389 阅读 · 0 评论 -
Android 深入系统完全讲解(3)
虚拟机的学习方法,可以先去了解 Java 虚拟机,然后再学习 Android 的虚拟机,始终记得这个就是实现了一套机制,解析具体格式,需要内存管理,语法解析,执行等。我们把这个定义的解析这一套格式叫做 Java 虚拟机,这里就是 Android 虚拟机,而能够解析的格式就是 DEX,也就是我们 APK 里面解压出来的文件。这里顺便讲一下,我们这么来理解,就是我们用 C 语言实现了一个解析一套定义格式的内容,然后对应的有一些 C 的实现让它可以操作硬件,最终显示出来。它的 main 方法。原创 2023-01-07 13:05:12 · 609 阅读 · 0 评论 -
Android 深入系统完全讲解(2)
通过自检后,bios 找到硬盘上的主引导记录 MBR. MBR 开始读取硬盘分区表 DPT,找到活动分区,找到活动分区中的分区引导记录 PBR,并且。那么在解析 rc 的时候,有个/init.${ro.zygote}.rc ,这个是对应的 zygote。我在这里把 init 进程的启动过程讲下,init 是 Linux 系统的第一个进程,进程号 1,Kernel 初。上层通过创建 Window,最终跟 surfaceflinger 的 Layer 进行关联,实现窗口位置,绘制的逻。原创 2023-01-07 11:22:19 · 799 阅读 · 0 评论