Android 深入系统完全讲解(14)

Posted 程序员入门进阶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 深入系统完全讲解(14)相关的知识,希望对你有一定的参考价值。

2 如何定位编译问题

编译不出来,编译不生效,都是可以用比对的方式去处理。之前遇见只改资源单编译不生效,跟正常的一比较发现是系统编译机制是判断代码的时间戳,而不管资源目录,于是处理的方式就是单编配置强制,会清理掉资源目录。

我们之前还有个就是编译会生成一个.h 文件,导致的结果是要重新生成依赖规则,但是这个. h 其实没有变化,所以在编译时候加入了一个参数,这时候选择跳过生成依赖树,直接编译。

这些都是遇见问题,通过输出信息,进行定位,找到问题点。我们在分析 Makefile 中的问题的时候,要多看输出 Log,看出错到哪个文件哪块,然后依据这个特殊字串,找到对应文件,然后再检索谁调用了这个文件,在看看相关的目录里面都有哪些文件,依次分析,就可以快速的进行定位。

之前配置



发现调用的时候,其实所有的都是从上面要定义一次才可以,这时候才能带入到我们的文件里面,sh 的参数。

这才是我们要解决的,就是不要记忆,而应该是找到分析方法,而我就擅长这块。

3 out 目录都有哪些关键信息

这个目录先参考之前最上面的目录结构,具体答疑留在训练营,掌握了 out 目录,对于真正学习 android 会有很大帮助,很多人不去看这目录,依据时间戳,其实可以知道会先编译哪些,先生成了哪些文件,没事多打开一些文本去看,会发现很多有趣的知识点。

比如依赖结构,比如 kernel 的宏,比如我们的硬件存储信息大小生成文件。

4 mk bp 文件学习技巧
这里单独说下 Android.mk 的学习过程,这个是编译规则,所以对于学习一个目录非常有帮助。而这里首先说下就是 Android NDK 开发包里面的 doc 目录必须去看,这里面介绍了各种定义属性的含义。

Android NDK 是不兼容的,每一版本更新的比较多,所以开发 C 相关项目
时候,是依赖对应的 NDK 版本的,我自己做的几个项目,有 NDK8,NDK10,NDK9 三个,还有 NDK13,基本我现在用的这四个。而 NDK8 里面是有文档的,可以去看下配置参数。

而我们的安卓代码中也是有对应的实现的,比如常用的一个 all-makefiles-under,我们就可以在/build/core/definitions.mk 找到定义,


这就是学习的思路,要去找到实现的地方,去掌握各个用法,了解它。这个方法才是最正确的处理方式,很多人会不断地去百度找答案,其实是舍近求远了,代码就在源码中,遇见不知道的,就需要从代码中寻求答案。

在线的 androidxref 就是一个很好的搜索辅助,帮助我们快速的定位位置,然后本地下载一套 android 源码,去跟踪学习,这样子配合的。

如果说要讲方法,这个就是我想说的,而也是我的训练营会不断的去训练这个能力,而不是教授一些记忆性的内容。

说完这个我们来说下 bp 文件。Bp 是替代 mk 文件的,我们先讲下这类文件的目的,Makefile的目的是让编译自动化,不需要我们每次去输入命令,也不需要每次新增或者删除文件,需要重新更改命令,所以就出现了 mk 帮助我们解决这个问题,我们只需要按照规则定义。

bp 也是这个目的,而它是 Blueprint 框架解析的,Blueprint 是生成,解析 bp 文件,是 Soong的一部分,而 Soong 是专门编译 Android 系统设计的,最终会转化成 Ninja,我们可以打开生成的 Ninja,去看里面的内容,会是一堆命令,这个就是对应的编译命令。

我 们 学 习 的 时 候 多 看 看 这 个 /build/blueprint/ 目 录 ,
/build/soong/androidmk/cmd/androidmk/android.go


其实要理解这个,需要阅的书籍是编译原理,建议去找一本看看,这样子就知道为什么有这么多参数,其实就是编译,汇编,链接,而每个过程都有一些参数指定,所以就会出现很多配置,编译成什么目标。

以上是关于Android 深入系统完全讲解(14)的主要内容,如果未能解决你的问题,请参考以下文章

Android 深入系统完全讲解(33)

Android 深入系统完全讲解(31)

Android 深入系统完全讲解(31)

Android深入系统完全讲解(38)

Android深入系统完全讲解(38)

Android 深入系统完全讲解(25)