教程004-插件扩展
说明¶
这里说的 "插件" 并非我们常认知的插件,而是 "无痛" 新增模块。
需求¶
看完 教程002-设计思路 、教程003-简单扩展 之后,知道如何扩展一个模块了。
但有没有更好的办法呢,也就是我想新增个人配置的同时,也能及时享受到 as-aosp 的最新代码,不至于 pull 代码时冲突。
答案是有的,脚本思路就是 as-aosp 的 .gitignore 已经配置了 ext 目录,也就是说 ext 目录下改动会被 git 忽略掉。
思路¶
在前面 教程002-设计思路 其实有一个关键的信息我们当时没点出来。
- 根build.gradle
配置了:
- 根settings.gradle
配置了:
所以我们只需要在 ext/scripts 目录配置自己新增的模块就好了。
插件(ext)¶
首先,我们先来看下我们配置一个 ExtExampleUpgrade 模块需要的目录以及文件如下:
ext
├── ExtExampleUpgrade
│ └── build.gradle
└── scripts
├── configs
│ └── ext.gradle
└── settings
└── ext.gradle
这里能看到 ext/scripts/configs/ext.gradle、ext/scripts/settings/ext.gradle 跟 教程002-设计思路 提到的思路是保持一致的。
configs 里配置具体的源码路径,settings 则配置子模块。
然后 ExtExampleUpgrade 就是子模块,以及该子模块的 build.gradle 文件。
configs/ext.gradle¶
scripts/configs/ext.gradle 主要的目的是为了配置模块的路径,可以参考 scripts/configs/aosp.gradle
在本例子中配置如:
ext {
//通过scripts/config.gradle获取到设置的源码路径,
//这里也可以改成自己定义的路径
aospDir = rootProject.ext.aospRoot
ext_sample = [
root : "$aospDir",
/*************** 配置 Upgrade 路径 ***************/ upgrade: [
manifest: "device/sample/apps/upgrade/AndroidManifest.xml",
res : [
],
assets : [],
jni : "",
src : [
"$aospDir/device/sample/apps/upgrade/src/",
],
srcjars : [],
aidl : [],
],
]
}
settings/ext.gradle¶
scripts/settings/ext.gradle 主要的目的是为了加载模块,可以参考 scripts/settings/aosp.gradle
在本例子中配置如:
include ':ExtExampleUpgrade'
project(':ExtExampleUpgrade').projectDir = "$rootDir/ext/ExtExampleUpgrade" as File
ExtExampleUpgrade¶
ExtExampleUpgrade 就是我们想要新增的子模块了,这里也跟 教程002-设计思路 提到的思路是保持一致的,只需要配置 build.gradle 文件并设置如下即可。
def androidRoot = rootProject.ext.ext_sample.upgrade
ext {
BUILD_MANIFEST = androidRoot.manifest
BUILD_RES = androidRoot.res
BUILD_ASSETS = androidRoot.assets
BUILD_SRC = androidRoot.src
BUILD_SRC_JARS = ""
BUILD_AIDL = [androidRoot.src + androidRoot.aidl]
BUILD_NATIVE_ROOT = ""
}
apply from: "${rootDir}/scripts/android-build.gradle"
很简单吧,如果还有新增模块,按照这个思路再新增即可。