跳转至

教程004-插件扩展

说明

这里说的 "插件" 并非我们常认知的插件,而是 "无痛" 新增模块。

需求

看完 教程002-设计思路教程003-简单扩展 之后,知道如何扩展一个模块了。

但有没有更好的办法呢,也就是我想新增个人配置的同时,也能及时享受到 as-aosp 的最新代码,不至于 pull 代码时冲突。

答案是有的,脚本思路就是 as-aosp 的 .gitignore 已经配置了 ext 目录,也就是说 ext 目录下改动会被 git 忽略掉。

思路

在前面 教程002-设计思路 其实有一个关键的信息我们当时没点出来。

  • 根build.gradle

配置了:

applyConfig('ext/scripts/configs/ext.gradle')
  • 根settings.gradle

配置了:

applyConfig('ext/scripts/settings/ext.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"

很简单吧,如果还有新增模块,按照这个思路再新增即可。

Demo下载

Demo下载地址

评论