0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Gradle Plugin和AGP的区别1

jf_78858299 来源:小余的自习室 作者:小余的自习室 2023-03-30 11:48 次阅读

今天这篇文章我们来讲解下Android Gradle Plugin相关知识。

简化起见:本文所指AGP:Android Gradle Plugin

1.Gradle PluginAGP的区别?

Gradle PluginGradle构建过程中使用的插件的总称,而Android Gradle Plugin是这个总称里面的一个插件元素.

图片

agp插件和gp插件区别.png

Android Gradle Plugin配合Gradle构建我们的应用apk

2.apk构建流程

典型 Android 应用模块的构建流程。

图片

build-process_2x.png

按照以下常规步骤执行:

  • 1.将源文件和class文件编译组合后编译为dex文件
  • 2.将资源文件转换为编译后的资源文件
  • 3.将dex文件和编译后的资源文件打包为apk文件
  • 4.使用签名工具对文件进行签名
  • 5.生成最终apk之前,会使用 zipalign 工具对应用进行优化,减小apk运行时内存

在Gradle控制面板:执行assemble任务看看:

Line 172: > Task :application:preBuild UP-TO-DATE //编译预处理任务:空实现
    Line 176: > Task :application:preF1F3DebugBuild UP-TO-DATE //preF1F3DebugBuild F1F3变体预处理任务
    Line 180: > Task :application:compileF1F3DebugAidl NO-SOURCE //编译aidl文件
    Line 184: > Task :application:compileF1F3DebugRenderscript NO-SOURCE //编译绘制脚本文件
    Line 188: > Task :application:dataBindingMergeDependencyArtifactsF1F3Debug UP-TO-DATE //dataBinding依赖的类库或者插件合并
    Line 192: > Task :application:dataBindingMergeGenClassesF1F3Debug UP-TO-DATE //dataBinding依赖的class文件合并
    Line 196: > Task :application:generateF1F3DebugResValues UP-TO-DATE //生成ResValues 
    Line 200: > Task :application:generateF1F3DebugResources UP-TO-DATE//生成编译后的Resources
    Line 204: > Task :application:mergeF1F3DebugResources UP-TO-DATE //合并资源文件
    Line 208: > Task :application:dataBindingGenBaseClassesF1F3Debug UP-TO-DATE
    Line 212: > Task :application:dataBindingTriggerF1F3Debug UP-TO-DATE
    Line 216: > Task :application:generateF1F3DebugBuildConfig UP-TO-DATE 生成BuildConfig文件
    Line 220: > Task :application:javaPreCompileF1F3Debug UP-TO-DATE //java预编译
    Line 224: > Task :application:checkF1F3DebugAarMetadata UP-TO-DATE  //检测aar的元数据
    Line 228: > Task :application:createF1F3DebugCompatibleScreenManifests UP-TO-DATE 
    Line 232: > Task :application:extractDeepLinksF1F3Debug UP-TO-DATE
    Line 236: > Task :application:processF1F3DebugMainManifest UP-TO-DATE //处理MainManifest
    Line 240: > Task :application:processF1F3DebugManifest UP-TO-DATE //处理Manifest
    Line 244: > Task :application:processF1F3DebugManifestForPackage UP-TO-DATE//处理ManifestForPackage 
    Line 248: > Task :application:processF1F3DebugResources UP-TO-DATE//处理Resources
    Line 252: > Task :application:compileF1F3DebugJavaWithJavac UP-TO-DATE //编译原代码为class文件
    Line 256: > Task :application:compileF1F3DebugSources UP-TO-DATE//编译Sources
    Line 260: > Task :application:mergeF1F3DebugNativeDebugMetadata NO-SOURCE
    Line 264: > Task :application:mergeF1F3DebugShaders UP-TO-DATE
    Line 268: > Task :application:compileF1F3DebugShaders NO-SOURCE
    Line 272: > Task :application:generateF1F3DebugAssets UP-TO-DATE //生成Assets
    Line 276: > Task :application:mergeF1F3DebugAssets UP-TO-DATE //合并Assets
    Line 280: > Task :application:compressF1F3DebugAssets UP-TO-DATE //压缩Assets
    Line 284: > Task :application:checkF1F3DebugDuplicateClasses UP-TO-DATE //检测DuplicateClasses
    Line 288: > Task :application:desugarF1F3DebugFileDependencies UP-TO-DATE
    Line 292: > Task :application:mergeExtDexF1F3Debug UP-TO-DATE //合并des
    Line 296: > Task :application:processF1F3DebugJavaRes NO-SOURCE //处理JavaRes
    Line 300: > Task :application:mergeF1F3DebugJavaResource UP-TO-DATE //合并JavaResource
    Line 304: > Task :application:mergeLibDexF1F3Debug UP-TO-DATE //合并lib的dex
    Line 308: > Task :application:dexBuilderF1F3Debug UP-TO-DATE //dexBuilder
    Line 312: > Task :application:mergeProjectDexF1F3Debug UP-TO-DATE//mergeProjectDex
    Line 316: > Task :application:mergeF1F3DebugJniLibFolders UP-TO-DATE//合并JniLibFolders
    Line 320: > Task :application:mergeF1F3DebugNativeLibs UP-TO-DATE//合并NativeLibs
    Line 324: > Task :application:stripF1F3DebugDebugSymbols NO-SOURCE
    Line 328: > Task :application:validateSigningF1F3Debug UP-TO-DATE //检测签名
    Line 332: > Task :application:packageF1F3Debug UP-TO-DATE //打包变种
    Line 336: > Task :application:assembleF1F3Debug UP-TO-DATE//打包变种

可以看到打包apk的任务基本和前面图片里面描述的流程一致,整个过程都是编译然后合并,打包的过程

主要涉及

  • 1.资源文件。
  • 2.源文件。
  • 3.库文件的资源
  • 4.库文件的class文件,
  • 5.jni的静动态库信息
  • 6.manfest清单文件的创建
  • 7.签名校验等 其他生成一些配置文件

3.AGP常用设置类型:

  • 1.buildTypes:编译类型:是debug或者release或者其他自定义类型
android {
    defaultConfig {
        manifestPlaceholders = [hostName:"www.example.com"]
        ...
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        debug {
            applicationIdSuffix ".debug"
            debuggable true
        }

        /**
         * The `initWith` property allows you to copy configurations from other build types,
         * then configure only the settings you want to change. This one copies the debug build
         * type, and then changes the manifest placeholder and application ID.
         */
        staging {
            initWith debug
            manifestPlaceholders = [hostName:"internal.example.com"]
            applicationIdSuffix ".debugStaging"
        }
    }
}
  • 2.productFlavor产品变种

创建产品变种与创建 build 类型类似:将其添加到 build 配置中的 productFlavors 代码块并添加所需的设置。

产品变种支持与 defaultConfig 相同的属性,这是因为,defaultConfig 实际上属于 ProductFlavor 类。

这意味着,您可以在 defaultConfig 代码块中提供所有变种的基本配置,每个变种均可更改其中任何默认值,如 applicationId

// Specifies one flavor dimension.
flavorDimensions 'abi','version'
productFlavors {
    f1 {
        dimension 'abi'
        versionName '1.0'
    }
    f2 {
        dimension 'abi'
        versionName '2.0'
    }
    f3 {
        dimension 'version'
    }
    f4 {
        dimension 'version'
    }
}

对应的变体:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AGP
    AGP
    +关注

    关注

    0

    文章

    25

    浏览量

    18151
  • 开发
    +关注

    关注

    0

    文章

    342

    浏览量

    40600
  • gradle
    +关注

    关注

    0

    文章

    26

    浏览量

    661
收藏 人收藏

    评论

    相关推荐

    AGP总线

    达到AGP 1X 266MB/S、AGP 2X 533MB/S、AGP 4X 1066MB/S、AGP 8X 2132MB/S,
    发表于 05-21 11:40

    Android Studio与Gradle深入

    。  上面提到的 settings.gradle 和 build.gradleGradle 平台中,其实都是一个 Groovy 对象。  Gradle 通过插件(
    发表于 08-31 17:58

    HarmonyOS初步探索04:使用DevEco Studio时设置Gradle仓库代替

    解决内部环境或企业内网环境问题,经常访问Maven仓库比较困难,此时可以设置Gradle仓库仓库。1)在用户目录新建一个 .gradle文件夹,某些 我的机器登录 帐户是lwx48xxxx,那么具体
    发表于 12-15 14:26

    xmake-gradle是什么?怎样去配置呢

    'org.tboox.gradle-xmake-plugin' version '1.1.5'}被废弃的插件集成方式buildscript {
    发表于 08-26 16:01

    AGP插槽,什么是AGP插槽,AGP插槽外形图

    AGP插槽,什么是AGP插槽,AGP插槽外形图 AGP(Accelerated Graphics Port)是在PCI总线基础上发展起来的,主要针对图形显示方面进行优化,专门用于图形
    发表于 04-26 18:15 2.3w次阅读

    AGP插槽

    AGP插槽 AGP(Accelerated Graphics Port)是在PCI总线基础上发展起来的,主要针对图形显示方面进行优化,专门用于图形显示卡。AGP标准也经过了几年的发展,从最初的
    发表于 12-24 15:22 896次阅读

    什么是AGP接口

    什么是AGP接口 AGP(Accelerate Graphical Port),加速图形接口。随着显示芯片的发展,PCI总
    发表于 12-25 10:31 1491次阅读

    Dexcount Gradle Plugin计算APK方法数量的Gradle插件

    ./oschina_soft/dexcount-gradle-plugin.zip
    发表于 06-13 09:53 1次下载
    Dexcount <b class='flag-5'>Gradle</b> <b class='flag-5'>Plugin</b>计算APK方法数量的<b class='flag-5'>Gradle</b>插件

    gradle和gradlew的区别

    你会注意到输出里打印了 Gradle 的版本,它对应着你运行的 gradle 命令在设备中的 Gradle 安装包版本。这听起来有点废话,但在谈论 gradlew 的时候需要明确这点,这很重要。
    的头像 发表于 12-13 09:57 924次阅读

    Gradle入门知识之Gradle详解

    大家回想一下自己第一次接触`Gradle`是什么时候? 相信大家也都是和我一样,在我们打开第一个AS项目的时候, 发现有很多带gradle字样的文件:`setting.gradle, build.
    的头像 发表于 03-30 10:47 2218次阅读
    <b class='flag-5'>Gradle</b>入门知识之<b class='flag-5'>Gradle</b>详解

    Gradle入门知识之Gradle语法1

    很多开发喜欢把`Gradle`简单定义为一种构建工具,和`ant,maven`等作用类似, 诚然Gradle确实是用来做构建,但是如果简单得把Gradle拿来做构建,就太小看Gradle
    的头像 发表于 03-30 10:54 804次阅读
    <b class='flag-5'>Gradle</b>入门知识之<b class='flag-5'>Gradle</b>语法1

    Gradle入门知识之Gradle语法2

    很多开发喜欢把`Gradle`简单定义为一种构建工具,和`ant,maven`等作用类似, 诚然Gradle确实是用来做构建,但是如果简单得把Gradle拿来做构建,就太小看Gradle
    的头像 发表于 03-30 10:54 575次阅读

    Gradle PluginAGP区别2

    Gradle Plugin`和`AGP`的区别? `Gradle Plugin`是`
    的头像 发表于 03-30 11:49 907次阅读

    Gradle PluginAGP区别3

    Gradle Plugin`和`AGP`的区别? `Gradle Plugin`是`
    的头像 发表于 03-30 11:50 957次阅读

    agp和pcie插槽区别 agp插槽插的组件是什么

    AGP(加速图形端口)和PCIe(Peripheral Component Interconnect Express)都是计算机插槽接口,用于连接显卡和主板。下面将分别介绍AGP和PCIe插槽的区别
    的头像 发表于 01-24 10:32 742次阅读