网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

Gradle Plugin和AGP的区别3

时间:2023-03-30 11:50

人气:

作者:admin

标签:

导读:Gradle Plugin`和`AGP`的区别?`Gradle Plugin`是`Gradle`构建过程中使用的插件的总称,而`Android Gradle Plugin`是这个总称里面的一个插件元素....

方法1主要任务:

  • 做一些前期的检查工作,设置一些生命周期回调监听,创建任务等操作。
  • Gradle构建生命周期中的Agp插件的配置流程:

1.configureProject:构建project配置、

2.configureExtension:配置外部Extension字段

3.createTasks:创建Tasks

看第一阶段:configureProject

private void configureProject() {
        final Gradle gradle = project.getGradle();

        //创建缓存版本变化的原因的字符串
        Provider
  • 这个方法主要是创建了一系列构建需要的服务,并将服务放到一个globalScope对象中,也算是一些前期准备工作。

来看阶段2:configureExtension

private void configureExtension() {
        //获取dsl服务
        DslServices dslServices = globalScope.getDslServices();

        //获取构建输出
        final NamedDomainObjectContainer

进入createExtension方法:

这个是抽象方法:具体实现是在子类AppPlugin中:

protected AppExtension createExtension(
        @NonNull DslServices dslServices,
        @NonNull GlobalScope globalScope,
        @NonNull
                DslContainerProvider
  • 可以看到这里创建了一个‘android’的Extensions,bean类型为:BaseAppModuleExtension

这个BaseAppModuleExtension类就是我们可以在外部做扩展的起始点,这个类中有哪些属性包括父类中的属性都可以被扩展:

进到这个类中看看:

/** The `android` extension for base feature module (application plugin).  */
open class BaseAppModuleExtension(...private val publicExtensionImpl: ApplicationExtensionImpl)
:AppExtension:InternalApplicationExtension by publicExtensionImpl,。。

看到该类继承了AppExtension和InternalApplicationExtension(被ApplicationExtensionImpl代理)

AppExtension又继承AbstractAppExtension继承TestedExtension继承BaseExtension

这几个类组成了AGP所有的对外扩展属性

这里列举几个平时项目中开发用到的字段:

  • 1.在ApplicationExtensionImpl中:

buildFeatures属性:

public open val buildFeatures:com.android.build.api.dsl.ApplicationBuildFeatures

查看ApplicationBuildFeatures中的代码:

内部就两条属性:

//用于dataBinding支持
var dataBinding: Boolean?
var mlModelBinding: Boolean?

ApplicationBuildFeatures 继承 BuildFeatures

进入BuildFeatures 看看:

可以看到这里面可以配置很多信息:

buildFeatures {
    aidl = true
    buildConfig = true
    viewBinding = false
    dataBinding = true
    ....
}
  • 2.在AbstractAppExtension中
val applicationVariants: DomainObjectSet

这条属性,可以让我们在外部获取到当前所有变种:

DomainObjectSet是一个集合,可以使用集合遍历方式:

android.applicationVariants.all {variant->
    variant.outputs.all {output->
        outputFileName ="landi_dev_v${variant.versionName}_${variant.name}"+".apk"
    }
}

相信这个代码大家在自己项目中或多或少都见过

通过前面分析我们就知道:

variant = ApplicationVariant类对象
output = BaseVariantOutput类对象

关于configureExtension就介绍到这

第3阶段:createTasks

private void createTasks() {
        threadRecorder.record(
                ExecutionType.TASK_MANAGER_CREATE_TASKS,
                project.getPath(),
                null,
                () ->
                        TaskManager.createTasksBeforeEvaluate(
                                globalScope,
                                variantFactory.getVariantType(),
                                extension.getSourceSets()));

        project.afterEvaluate(
                CrashReporting.afterEvaluate(
                        p -> {
                            variantInputModel.getSourceSetManager().runBuildableArtifactsActions();

                            threadRecorder.record(
                                    ExecutionType.BASE_PLUGIN_CREATE_ANDROID_TASKS,
                                    project.getPath(),
                                    null,
                                    this::createAndroidTasks);
                        }));
    }
  • 1.BeforeEvaluate:配置前创建一些task
  • 2.afterEvaluate:配置后创建一些task:进入createAndroidTasks看看:
final void createAndroidTasks() {
        //使用variantManager创建变体 关注点1.。。
        variantManager.createVariants();
        //创建TaskManager 关注点2.。。
        TaskManager

关注点1主要作用就是获取所有的产品变体和buildTypes,创建对应的变体列表

关注点2:createTaskManager

抽象方法在子类AppPlugin中实现:

protected ApplicationTaskManager createTaskManager(
            @NonNull
                    List

创建的是一个ApplicationTaskManager类对象,后面会用到

来看关注点3:

这里面其实就是创建一系列的task,篇幅太长,不一一介绍

阶段三:createTasks主要任务:

  • 1.根据Extensions中的信息创建所有变体,
  • 2.给所有变体创建对应的任务:包括配置前任务和配置后的任务

总结我们的AGP主要任务:

  • 1.创建了一系列构建需要的服务,并将服务放到一个globalScope对象中,作为前期准备工作
  • 2.解析我们的外部扩展android{}闭包中的信息,设置到Project中
  • 3.根据buidTypes和产品变种创建对应的变种信息,创建一系列的构建任务。
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信