1、前言
拿到了系统源码,搭建好了系统环境,你就掌握了这个系统,只要你够牛逼,怎么玩就是你说了算。我们以 SystemUI 为例,来讲解如何在 AS 中流畅的开发系统 App。
首先需要拿到 SystemUI 源码,知道 SystemUI APK 的最终存放路径,以及在导入前预先分析下需要依赖哪些模块。
2、源码路径
大部分的系统 App 源码,都在 packages 目录中,比如 packages/apps/Settings/。
但是 SystemUI 比较特殊,源码路径在:frameworks/base/packages/SystemUI,而 Android 8.1 的 SystemUI 最终的 APK 路径在 /system/priv-app/SystemUI 目录中。
不同版本的系统可能会有些差异,Android 10 的 SystemUI APK 路径就在 /system/product/priv-app/SystemUI 中,这些变化到底是为了啥,我也不是很清楚。
拿到了源码,也知道目标路径了,可以开始了。
3、分析源码结构,分析 mk 文件
拿到了源码,在进行下一步之前,先大致了解下项目的结构和依赖。
分析源码结构
可使用 VS Code 打开 SystemUI 目录,Ctrl + P,输入 AndroidManifest,即可查看源码中有几个 Manifest 文件,通常来说,有几个 Manifest 文件就意味着项目中有几个 Module。或者查看有多少 res 目录,有多少个 res 也意味着有多少个 Module。为什么呢?
因为 Manifest 文件会根据 package 属性生成 R.java 文件,而源码中的 java 文件引用资源时都是以“package.R.string.xxxx”来引用的,所以必须通过 Library Module 的形式去引用这些 res,才能生成正确的 R 文件。
SystemUI的源码结构如下:
docs
plugin
ExamplePlugin
src
Android.mk
AndroidManifest.xml
res
res-keyguard
scripts
src
tests
Android.mk
AndroidManifest.xml
lint.xml
MODULE_LICENSE_APACHE2
NOTICE
proguard.flags
README.md
先看文件:
mk 文件是在系统源码环境下编译 APK 时的规则,很重要,稍后看。
manifest 文件大家都知道。