mirror of
https://github.com/feicong/rom-course.git
synced 2025-05-05 18:16:57 +00:00
第二章优化,第三章内容增加
This commit is contained in:
parent
d3ae77fbb5
commit
2b1c9a7e0d
@ -635,7 +635,7 @@ add_subdirectory(frameworks/native)
|
||||
|
||||
配置好cmake文件后,使用clion打开项目,选择刚刚配置好的`CMakeLists.txt`文件的目录`out/development/ide/clion/`。导入成功后,我们需要修改工程的根目录,`Tools->Cmake->Change Project Root`,然后选择源码根目录即可。
|
||||
|
||||
## 2.9 git管理
|
||||
## 2.9 gitlab+repo管理源码
|
||||
|
||||
虽然我们将源码导入idea中后,已经可以正常的开始修改源码了。但是由于这是一个庞大的项目,所以我们需要考虑到源码的管理,便于我们随时能够查看自己的修改和切换不同的分支进行开发。否则这样一个巨大的项目,一个月后,再想要找齐当时修改的逻辑,就非常困难了。如果你是个人开发,并且修改的逻辑不是特别复杂,或者是刚开始学习,那么可以选择跳过这个部分,直接修改源码即可。
|
||||
|
||||
@ -962,7 +962,7 @@ if __name__ == '__main__':
|
||||
|
||||
~~~
|
||||
|
||||
子模块仓库建立完成,最后我们还需要将代码上传到对应的仓库中。同样参考网上找的上传代码,修改一部分细节,代码如下
|
||||
子模块仓库建立完成,最后我们还需要将代码上传到对应的仓库中。同样参考网上找的上传代码,修改一部分细节,这里一定要注意default.xml中,project元素的属性path的是本地路径,而name才是指的git仓库的路径,代码如下
|
||||
|
||||
~~~python
|
||||
#!/usr/bin/python3
|
||||
@ -993,7 +993,7 @@ def parse_repo_manifest():
|
||||
s = MANIFEST_XML_PATH_NAME_RE.search(this_temp_line)
|
||||
|
||||
if s is not None:
|
||||
manifest_xml_project_paths.append(s.group("path"))
|
||||
manifest_xml_project_paths.append({"path":s.group("path"),"name":s.group("name")})
|
||||
|
||||
print("manifest_xml_project_paths=" + str(manifest_xml_project_paths))
|
||||
print("manifest_xml_project_paths len=" + str(len(manifest_xml_project_paths)))
|
||||
@ -1002,8 +1002,8 @@ def parse_repo_manifest():
|
||||
def push_source_code_by_folder(str_writer):
|
||||
# 遍历所有路径
|
||||
for path in manifest_xml_project_paths:
|
||||
print("path=" + path)
|
||||
abs_path = SOURCE_CODE_ROOT + path
|
||||
print("path=" + path["path"])
|
||||
abs_path = SOURCE_CODE_ROOT + path["path"]
|
||||
# 路径存在则进行上传
|
||||
if os.path.exists(abs_path):
|
||||
# change current work dir
|
||||
@ -1030,7 +1030,7 @@ def push_source_code_by_folder(str_writer):
|
||||
git_init_cmd = "git init"
|
||||
cmd_list.append(git_init_cmd)
|
||||
|
||||
git_remote_cmd = "git remote add origin " + REMOTE + path + ".git"
|
||||
git_remote_cmd = "git remote add origin " + REMOTE + path["name"] + ".git"
|
||||
cmd_list.append(git_remote_cmd)
|
||||
|
||||
git_add_dot_cmd = "git add ."
|
||||
@ -1111,7 +1111,64 @@ repo init -u git@192.168.2.189:android12_r3/manifest.git --repo-url=git@192.168.
|
||||
repo sync -j8
|
||||
~~~
|
||||
|
||||
到这里就完成了gitlab源码管理android源码开发了。最后如何使用git提交和查看历史记录我就不在这里叙述了。
|
||||
在同步的过程中,出现了两个问题。首先第一个是出现如下错误
|
||||
|
||||
~~~
|
||||
remote:
|
||||
remote: ========================================================================
|
||||
remote:
|
||||
remote: The project you were looking for could not be found or you don't have permission to view it.
|
||||
remote:
|
||||
remote: ========================================================================
|
||||
remote:
|
||||
fatal: 无法读取远程仓库。
|
||||
|
||||
请确认您有正确的访问权限并且仓库存在。
|
||||
|
||||
platform/build/bazel:
|
||||
~~~
|
||||
|
||||
检测代码后发现bazel仓库在路径build中不存在,这个仓库被建立在了platform下。导致这个问题的原因是由于前面的创建git的脚本中,发现build被指定为project,所以创建为仓库,而bazel必须是在一个group下,路径才会成立。而build的仓库已经存在,创建这个group失败后,就默认使用了更上一层的group。而解决办法也非常简单,直接将default中的几个build路径下的几个project重新命名,不要放在build的group下即可。下面是解决后的default.xml配置。
|
||||
|
||||
~~~
|
||||
<project path="build/make" name="platform/build" groups="pdk" >
|
||||
<copyfile src="core/root.mk" dest="Makefile" />
|
||||
<linkfile src="CleanSpec.mk" dest="build/CleanSpec.mk" />
|
||||
<linkfile src="buildspec.mk.default" dest="build/buildspec.mk.default" />
|
||||
<linkfile src="core" dest="build/core" />
|
||||
<linkfile src="envsetup.sh" dest="build/envsetup.sh" />
|
||||
<linkfile src="target" dest="build/target" />
|
||||
<linkfile src="tools" dest="build/tools" />
|
||||
</project>
|
||||
<project path="build/bazel" name="platform/build_bazel" groups="pdk" >
|
||||
<linkfile src="bazel.WORKSPACE" dest="WORKSPACE" />
|
||||
<linkfile src="bazel.sh" dest="tools/bazel" />
|
||||
<linkfile src="bazel.BUILD" dest="BUILD" />
|
||||
</project>
|
||||
<project path="build/blueprint" name="platform/build_blueprint" groups="pdk,tradefed" />
|
||||
<project path="build/pesto" name="platform/build_pesto" groups="pdk" />
|
||||
<project path="build/soong" name="platform/build_soong" groups="pdk,tradefed" >
|
||||
<linkfile src="root.bp" dest="Android.bp" />
|
||||
<linkfile src="bootstrap.bash" dest="bootstrap.bash" />
|
||||
</project>
|
||||
~~~
|
||||
|
||||
另外一个问题也非常类似。错误如下。
|
||||
|
||||
~~~
|
||||
请确认您有正确的访问权限并且仓库存在。
|
||||
device/mediatek/wembley-sepolicy: sleeping 4.0 seconds before retrying
|
||||
~~~
|
||||
|
||||
经过检查后发现,这是由于这个仓库在default.xml中的配置如下
|
||||
|
||||
~~~
|
||||
<project name="device/mediatek/wembley-sepolicy" path="device/mediatek/wembley-sepolicy" groups="device"/>
|
||||
~~~
|
||||
|
||||
然后看了创建仓库和批量提交代码的逻辑就明白了,是的,name和path的顺序反了,导致正则表达式未能成功匹配到这个仓库,所以我们调整一下name和path的顺序即可。到这里就完成了gitlab源码管理android源码开发了。最后如何使用git提交和查看历史记录我就不在这里叙述了。
|
||||
|
||||
|
||||
|
||||
## 2.10 小结
|
||||
|
||||
|
@ -2,5 +2,64 @@
|
||||
|
||||
## 3.1 源码结构介绍
|
||||
|
||||
通过前面的学习,我们成功编译了Android12以及对应的内核,并且通过多种方式刷入手机。接下来我们需要先对源码的结构有一定的了解,
|
||||
在上一章的学习中,我们成功编译了Android12以及对应的内核,并且通过多种方式刷入手机。接下来我们需要先对Android源码的根结构有一定的了解,对结构有一定了解能帮助我们更快的定位和分析源码,同时能让开发人员更好的理解Android系统。
|
||||
|
||||
Android源码结构分为四个主要的模块:frameworks、packages、hardware、system。frameworks模块是Android系统的核心,包含了Android系统的核心类库、Java框架和服务,它是Android开发的基础。packages模块包括了Android系统的应用程序,主要是用户使用的应用程序,例如通讯录、日历和相机。hardware模块提供了对硬件设备的支持,例如触摸屏、摄像头等。最后,system模块包含了Linux内核和Android底层服务,它负责管理资源和处理系统事件。除了这些主要模块,Android源码中还有一些其他的文件夹,例如build、external、prebuilts和tools等,他们提供了编译系统所需的资源和工具。接下来我们对根目录进行一个简单的介绍。
|
||||
|
||||
1、art:该目录是Android 5.0中新增加的,主要是实现Android RunTime(ART)的目录,它作为Android 4.4中的Dalvik虚拟机的替代,主要处理Java字节码。
|
||||
|
||||
2、bionic:这是Android的C库,包含了很多标准的C库函数和头文件,还有一些Android特有的函数和头文件。
|
||||
|
||||
3、bootable:该目录包含了引导程序,这些引导程序用于从系统启动,并初始化硬件, 例如Bootloader和Recovery程序。
|
||||
|
||||
4、build:该目录包含了编译Android源代码所需要的脚本,包括makefile文件和一些构建工具。
|
||||
|
||||
5、compatibility:该目录收集了Android设备的兼容性测试套件(CTS)和兼容性实现(Compatibility Implementation)。
|
||||
|
||||
6、cts:该目录包含了Android设备兼容性测试套件(CTS),主要用来测试设备是否符合Android标准。
|
||||
|
||||
7、dalvik:该目录包含了Dalvik虚拟机,它是Android 2.3版本之前的主要虚拟机,它主要处理Java字节码。
|
||||
|
||||
8、developers:该目录包含了Android开发者文档和样例代码。
|
||||
|
||||
9、development:该目录包含了一些调试工具,如systrace、monkey、ddms等。
|
||||
|
||||
10、device:该目录包含了特定的Android设备的驱动程序。
|
||||
|
||||
11、external:该目录包含了一些第三方库,如WebKit、OpenGL等。
|
||||
|
||||
12、frameworks:该目录提供了Android应用程序调用底层服务的API,它也是Android应用程序开发的重要组成部分。
|
||||
|
||||
13、hardware:该目录包含了Android设备硬件相关的驱动代码,如摄像头驱动、蓝牙驱动等。
|
||||
|
||||
14、kernel:该目录包含了Android系统内核的源代码,它是Android系统的核心部分。
|
||||
|
||||
15、libcore:该目录包含了Android底层库,它提供了一些基本的API,如文件系统操作、网络操作等。
|
||||
|
||||
16、libnativehelper:该目录提供了一些C++库,它们可以帮助我们调用本地代码。
|
||||
|
||||
17、packages:该目录包含了Android框架、应用程序和其他模块的源代码。 包含了 Android 系统中的所有应用程序,例如短信、电话、浏览器、相机等
|
||||
|
||||
18、pdk:该目录是一个Android平台开发套件,它包含了一些工具和API,以便开发者快速开发Android应用程序。
|
||||
|
||||
19、platform_testing:该目录包含了一些测试工具,用于测试Android平台的稳定性和性能。
|
||||
|
||||
20、prebuilts:该目录包含了一些预先编译的文件,如编译工具、驱动程序等。
|
||||
|
||||
21、sdk:该目录是Android SDK的源代码,它包含了Android SDK的API文档、代码示例、工具等。
|
||||
|
||||
22、system:该目录包含了Android系统的核心部分,如系统服务、应用程序、内存管理机制、文件系统、网络协议等。
|
||||
|
||||
23、test:该目录包含了一些测试代码,用于测试Android系统的各个组件。
|
||||
|
||||
24、toolchain:该目录包含了一些编译器和工具链,如GCC、Clang等,用于编译Android源代码。
|
||||
|
||||
25、tools:该目录包含了一些开发工具,如Android SDK工具、Android Studio、Eclipse等。
|
||||
|
||||
26、vendor:该目录包含了一些硬件厂商提供的驱动程序,如摄像头驱动、蓝牙驱动等。
|
||||
|
||||
我们并不需要全部记下,只要大致的有个印象,当你常常为了实现某个功能,查阅翻读源码时,就会不断加深你对这些目录划分的了解,这里我们回顾一下第二章中,在我们编译源码的过程中下载了两个驱动相关的文件。回顾下图。
|
||||
|
||||

|
||||
|
||||
下载两个驱动文件后,我们将文件放到源码根目录中解压,并且执行相应的sh脚本进行导出,到了这里我们了解到vendor中是硬件厂商提供的摄像头蓝牙之类的驱动程序。那么我们就可以观察到,脚本执行后,实际就是将驱动文件放到了对应目录中。
|
||||
|
BIN
chapter-03/images/image-20230219161123065.png
Normal file
BIN
chapter-03/images/image-20230219161123065.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 52 KiB |
21
目录.md
21
目录.md
@ -25,19 +25,24 @@
|
||||
|
||||
2.8 源码的开发环境搭建
|
||||
|
||||
2.9 gitlab+repo管理源码
|
||||
|
||||
|
||||
|
||||
第3章 认识系统组件
|
||||
3.1 源码结构介绍
|
||||
3.2 init进程
|
||||
3.2.1 initrc配置文件
|
||||
|
||||
3.2 进程启动流程
|
||||
|
||||
3.3 init进程
|
||||
3.3.1 initrc配置文件
|
||||
...
|
||||
3.2.x initrc添加xxx
|
||||
3.3 认识services
|
||||
3.4 认识framework
|
||||
3.5 认识libcore
|
||||
3.6 认识sepolicy
|
||||
3.7 认识linker
|
||||
3.3.x initrc添加xxx
|
||||
3.4 认识services
|
||||
3.5 认识framework
|
||||
3.6 认识libcore
|
||||
3.7 认识sepolicy
|
||||
3.8 认识linker
|
||||
|
||||
第4章 系统美化
|
||||
4.1 常见的系统美化方式
|
||||
|
Loading…
x
Reference in New Issue
Block a user